1. 程式人生 > >利用愛奇藝開放平臺實現視頻托管回調播放(一)——獲取授權

利用愛奇藝開放平臺實現視頻托管回調播放(一)——獲取授權

con new 在線 resp 麻煩 簡介 回調 其他人 擔心

背景:

  題庫軟件的教學視頻需要實現在線播放,由於技術水平和服務器配置的限制,如果把視頻放在自己服務器上會出現各種問題。訪問人數少的時候還可以勉強應付,臨近考試時,服務器壓力增大,視頻訪問延遲太大,有時根本無法正常播放,視頻一直處於緩沖狀態。被學生調侃“緩沖兩小時,播放五分鐘”。

  如果要改善這種現狀,一方面是增強服務器的配置,另一方面優化軟件代碼。這兩個對我來說都太難,水平太菜,捉急。不過好在現狀互聯網足夠發達,想要實現什麽功能基本上都能找到現成的解決方案,兜兜轉轉發現了“愛奇藝開放平臺”。

簡介:

  “愛奇藝開放平臺”提供“視頻托管”、“視頻播放”、“應用分發”等一系列的免費解決方案,其中“視頻托管”正是我所需要的解決方案。“視頻托管”是指把自己的視頻上傳托管到愛奇藝網站,並需要將托管的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年左右,對於普通應用應該完全足夠了;刷新令牌的意義在哪呢?如果令牌過期,完全可以重新獲取授權,沒必要利用這個操作吧。

利用愛奇藝開放平臺實現視頻托管回調播放(一)——獲取授權