利用爱奇艺开放平台实现视频托管回调播放(一)——获取授权

简介:

  “爱奇艺开放平台”提供“视频托管”、“视频播放”、“应用分发”等一系列的免费解决方案,其中“视频托管”正是我所需要的解决方案。“视频托管”是指把自己的视频上传托管到爱奇艺网站,并需要将托管的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方式请求。

示例代码如下:

/// <summary>
        /// 获取令牌(授权)
        /// </summary>
        private void GetAccessToken()
        {
            string requestAccessToken = string.Format("https://openapi.iqiyi.com/api/iqiyi/authorize?client_id={0}&client_secret={1}", mTestKey, mTestKeySecret);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestAccessToken);

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            

            Stream receiveStream = response.GetResponseStream();

            StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);

            string content = readStream.ReadToEnd();
            response.Close();
            readStream.Close();
            AuthorResult result = jss.Deserialize<AuthorResult>(content);
            if (result != null && result.code == "A00000")
            {
                this.authorResult = true;
                lb_msg.Text = result.msg;
                lb_accessToken.Text = result.data.access_token;
                this.access_token = result.data.access_token;
            }

        }

 

使用HttpWebRequest对象发送请求,对象默认请求方式是GET,如果需要设置其他请求方式,设置对象的Method属性即可。

该请求返回的是如下结构的JSON字符串:

{
    ‘code’: A0000,
    ‘data’: 
    {
        ‘access_token’: ACCESS_TOKEN, // 访问令牌
         ‘expires_in’ : 60, // 过期时间
         ‘refresh_token’: REFRESH_TOKEN, // 刷新令牌
    }
}

其中code表示状态码,含义如下:

A00000成功
Q00001失败
A00007系统错误
A21324client_id或client_secret参数无效

access_token是访问令牌,是进行后续操作的依据;expires_in表示访问令牌的过期时间,以秒为单位;refresh_token表示刷新令牌,当令牌过期时可以使用这个刷新令牌,重新获取access_token,详见“刷新授权信息”。

疑问:过期时间在测试是返回的是一个9位数的数值,也就是上亿。如果是以秒为单位那么过期时间是一个非常大的值,利用测试的KEY和SECRET返回的过期时间大约是4年左右,对于普通应用应该完全足够了;刷新令牌的意义在哪呢?如果令牌过期,完全可以重新获取授权,没必要利用这个操作吧。


相关推荐

评论