1. 程式人生 > >百度雲點播VOD服務

百度雲點播VOD服務

num pat player pan -h video mod 基於 min

百度雲點播VOD服務

準備工作

  1. 登錄百度。
  2. 進入百度雲:https://cloud.baidu.com
  3. 開通“視頻點播VOD”服務。
  4. 進入後臺管理系統->右上角“安全認證”->獲取“AccessKey”。
  5. 再來到“視頻點播VOD”界面->全局設置->發布設置->安全設置->獲取UserKey。

自定義轉碼設置

我們的視頻需要經過編碼加密後才能發布出去。因此要創建一個編碼模板。具體模板容器的配置如下:

  1. 容器:選擇HLS(Http Live Streaming)
    HLS是蘋果公司提出的基於HTTP的流媒體網絡傳輸協議。他把一整個視頻切片成多段,然後生成一個m3u8文件,在這個文件中存儲了每一段視頻的真實地址,以後在實現了m3u8協議的播放器在播放視頻的時候就從這個文件中獲取視頻,並且播放的時候需要設置密碼。
  2. 編碼規格:高。
  3. 分辨率:1920_1080,2180_720,800*600等。
  4. 視頻碼率:

技術分享圖片

技術分享圖片

  1. 加密策略:Token加密。

後端

  後端唯一要做的事情就是給前端提供token,前端只有獲取了token才能播放出這個視頻出來。壞消息是百度雲根本沒有提供獲取tokensdk,好消息是我們已經找到了他生成token的方法。方法如下:

token計算規則

名詞解釋:
1. userId: 百度雲用戶唯一標識,可在百度雲管理控制臺賬號基本信息中得到,32位字符串。
2. userKey:用戶密鑰,是AES-128內容密鑰,用於對MediaId和ExpirationTime組成的串進行加密。長度為16字節,用32位十六進制數表示。可在百度雲VOD管理控制臺中設置和更新。
3. signature: 簽名,是用UserKey給MediaId和ExpirationTime加密生成的字符串。長度為32字節,用64位十六進制數表示。
4. mediaId:百度雲VOD中媒資的唯一標識。
5. expirationTime:Signature的過期時間,是一個unix時間戳,以秒為單位。
6. token:由Signature_UserId_ExpirationTime組成的字符串。
7. HMAC-SHA-256:簽名算法,詳見https://tools.ietf.org/html/rfc4868


token的生成方法:
1. 生成簽名signature = HMAC-SHA-256(userKey,String.format("/%s/%s", mediaId, expirationTime),sample code見HMAC-SHA-256加密算法 Sample Code
2. 利用下劃線(_) 連接signature,userId,expirationTime組合成token = String.format(“%s_%s_%s”, signature, userId,expirationTime)

更多請見https://cloud.baidu.com/doc/VOD/BestPractise.html#token.E8.AE.A1.E7.AE.97.E8.A7.84.E5.88.99

示例代碼如下:

import os,hmac,hashlib,time
from django.conf import settings

def course_token(request):
    file = request.GET.get(‘video‘)

    expiration_time = int(time.time()) + 2 * 60 * 60

    USER_ID = settings.BAIDU_CLOUD_USER_ID
    USER_KEY = settings.BAIDU_CLOUD_USER_KEY

    extension = os.path.splitext(file)[1]
    media_id = file.split(‘/‘)[-1].replace(extension, ‘‘)

    key = USER_KEY.encode(‘utf-8‘)
    message = ‘/{0}/{1}‘.format(media_id, expiration_time).encode(‘utf-8‘)
    signature = hmac.new(key, message, digestmod=hashlib.sha256).hexdigest()
    token = ‘{0}_{1}_{2}‘.format(signature, USER_ID, expiration_time)
    return restful.result(data={‘token‘: token})

前端

  1. 用這個鏈接下載videojs文件:http://sdk.bce.baidu.com/media-sdk/Baidu-T5Player-SDK-Web-v3.4.0.zip
  2. 加載這三個js文件:
     <script src="{% static ‘videojs/video.min.js‘ %}"></script>
     <script src="{% static ‘videojs/videojs-contrib-hls.min.js‘ %}"></script>
     <script src="{% static ‘videojs/videojs-contrib-quality-levels.min.js‘ %}"></script>
     <script type="text/javascript" src="https://cdn.bdstatic.com/jwplayer/latest/cyberplayer.js"></script>
    
  3. 創建一個容器,用來裝視頻播放的。示例代碼如下:
     <div id="playercontainer"></div>
    
  4. 初始化播放器。並且將視頻地址的參數傳遞進去。示例代碼如下:
     var videourl = "視頻地址";
     var cover = "視頻封面圖";
     var player = cyberplayer("playercontainer").setup({
         width: ‘100%‘,
         height: ‘100%‘,
         file: videourl,
         image: cover,
         autostart: false,
         stretching: "uniform",
         repeat: false,
         volume: 100,
         controls: true,
         primary: "flash",
         tokenEncrypt: "true",
         // AccessKey
         ak: ‘42455a8c985649aeaa4ca86b50482d78‘
     });
     player.on(‘beforePlay‘,function (e) {
         if(!/m3u8/.test(e.file)){
             return;
         }
         xfzajax.get({
             // 獲取token的url
             ‘url‘: ‘/course/course_token/‘,
             ‘data‘: {
                 ‘video‘: videourl
             },
             ‘success‘: function (result) {
                 if(result[‘code‘] === 200){
                     var token = result[‘data‘][‘token‘];
                     player.setToken(e.file,token);
                 }else{
                     alert(‘token錯誤!‘);
                 }
             },
             ‘fail‘: function (error) {
                 console.log(error);
             }
         });
     });

百度雲點播VOD服務