标签:时间 soft 简单 bre text this 实现 不用 注册
背景:
题库软件的教学视频需要实现在线播放,由于技术水平和服务器配置的限制,如果把视频放在自己服务器上会出现各种问题。访问人数少的时候还可以勉强应付,临近考试时,服务器压力增大,视频访问延迟太大,有时根本无法正常播放,视频一直处于缓冲状态。被学生调侃“缓冲两小时,播放五分钟”。
如果要改善这种现状,一方面是增强服务器的配置,另一方面优化软件代码。这两个对我来说都太难,水平太菜,捉急。不过好在现状互联网足够发达,想要实现什么功能基本上都能找到现成的解决方案,兜兜转转发现了“爱奇艺开放平台”。
简介:
“爱奇艺开放平台”提供“视频托管”、“视频播放”、“应用分发”等一系列的免费解决方案,其中“视频托管”正是我所需要的解决方案。“视频托管”是指把自己的视频上传托管到爱奇艺网站,并需要将托管的UGC视频(用户自制视频)回调到自己的网站或APP免广告播放,这真是瞌睡来枕头了,正合我意。这样就不用担心视频延迟问题了,除非是用户本身带宽问题。而且还可以免广告播放。其实之前有把视频上传至优酷生成播放链接在APP内播放,但是需要看一段时间的广告。想想有的视频内容3分钟左右,看个30秒的广告,也是蛋疼的紧。
开始:
废话不多说。要想使用“视频托管”服务,首先要成为“爱奇艺开放平台”的开发者。开发者有“个人”和“公司”两种,根据实际情况选择。申请通过后网页上会出现“我的应用”选项,根据实际需求创建一个应用,应用一个账户只能创建一个,人工审核时间比较长。审核通过后会发放一个APP KEY 和 APP SECRET,这是后期开发必不可少的凭证,需小心保管。“视频托管”应用简单来说就是先上传一些视频到爱奇艺,然后利用爱奇艺平台提供api来回调这些视频到自己的网站或者APP去播放。这样可以省去搭建视频服务器的麻烦,代价是这些视频在爱奇艺主站上都是公开的,其他人可以随便看。“视频托管”应用开发大致可以分成两大块:视频上传和视频管理。你所回调的视频内容必须来自使用对应APP KEY和APP SECRET上传的视频文件,仅使用个人账号上传的视频内容是无法回调的。
视频上传:
视频上传有两种方式:利用视频托管的上传接口上传、利用合作方账户登录“爱奇艺视频助手”进行上传。第一种方式也就是利用开放的API上传接口来上传视频文件;第二种方式相对来说比较简单,下载“爱奇艺视频助手”,使用合作方账户登录这个助手(“合作方账户”就是注册开发者的账户)填写审核通过应用的APP KEY 和 APP SECRET,之后上传视频文件就可以了。目前,第一种方式对我来说比较难,还没摸索清楚,自觉水平太菜,等看完“异步编程”相关内容再来试试,先使用第二种方式来上传视频。
视频管理:
对于“视频托管”应用来说,“视频管理”的主要内容是:获取授权、刷新授权信息、获取视频状态、获取视频信息、获取视频URL列表、删除视频。
获取授权:
获取授权就是获取一个访问令牌(access_token),利用这个令牌去进行其他操作。
获取授权的请求字符串:“https://openapi.iqiyi.com/api/iqiyi/authorize?client_id=APP_KEY&client_secret=APP_SECRET”。
其中APP_KEY 和 APP_SECRET是创建“视频托管应用”审核通过后由爱奇艺开放平台发放的。使用HTTP GET方式请求。
示例代码如下:
1 /// <summary> 2 /// 获取令牌(授权) 3 /// </summary> 4 private void GetAccessToken() 5 { 6 string requestAccessToken = string.Format("https://openapi.iqiyi.com/api/iqiyi/authorize?client_id={0}&client_secret={1}", mTestKey, mTestKeySecret); 7 8 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestAccessToken); 9 10 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 11 12 13 Stream receiveStream = response.GetResponseStream(); 14 15 StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); 16 17 string content = readStream.ReadToEnd(); 18 response.Close(); 19 readStream.Close(); 20 AuthorResult result = jss.Deserialize<AuthorResult>(content); 21 if (result != null && result.code == "A00000") 22 { 23 this.authorResult = true; 24 lb_msg.Text = result.msg; 25 lb_accessToken.Text = result.data.access_token; 26 this.access_token = result.data.access_token; 27 } 28 29 }
使用HttpWebRequest对象发送请求,对象默认请求方式是GET,如果需要设置其他请求方式,设置对象的Method属性即可。
该请求返回的是如下结构的JSON字符串:
1 { 2 ‘code’: A0000, 3 ‘data’: 4 { 5 ‘access_token’: ACCESS_TOKEN, // 访问令牌 6 ‘expires_in’ : 60, // 过期时间 7 ‘refresh_token’: REFRESH_TOKEN, // 刷新令牌 8 } 9 }
其中code表示状态码,含义如下:
A00000 | 成功 | |
Q00001 | 失败 | |
A00007 | 系统错误 | |
A21324 | client_id或client_secret参数无效 |
access_token是访问令牌,是进行后续操作的依据;expires_in表示访问令牌的过期时间,以秒为单位;refresh_token表示刷新令牌,当令牌过期时可以使用这个刷新令牌,重新获取access_token,详见“刷新授权信息”。
疑问:过期时间在测试是返回的是一个9位数的数值,也就是上亿。如果是以秒为单位那么过期时间是一个非常大的值,利用测试的KEY和SECRET返回的过期时间大约是4年左右,对于普通应用应该完全足够了;刷新令牌的意义在哪呢?如果令牌过期,完全可以重新获取授权,没必要利用这个操作吧。
标签:时间 soft 简单 bre text this 实现 不用 注册
原文地址:http://www.cnblogs.com/zhang-15-506/p/7662180.html