百度雲點播VOD服務
阿新 • • 發佈:2019-05-07
num pat player pan -h video mod 基於 min
百度雲點播VOD服務
準備工作
- 登錄百度。
- 進入百度雲:
https://cloud.baidu.com
。 - 開通“視頻點播VOD”服務。
- 進入後臺管理系統->右上角“安全認證”->獲取“AccessKey”。
- 再來到“視頻點播VOD”界面->全局設置->發布設置->安全設置->獲取UserKey。
自定義轉碼設置
我們的視頻需要經過編碼加密後才能發布出去。因此要創建一個編碼模板。具體模板容器的配置如下:
- 容器:選擇
HLS(Http Live Streaming)
HLS
是蘋果公司提出的基於HTTP
的流媒體網絡傳輸協議。他把一整個視頻切片成多段,然後生成一個m3u8
文件,在這個文件中存儲了每一段視頻的真實地址,以後在實現了m3u8
協議的播放器在播放視頻的時候就從這個文件中獲取視頻,並且播放的時候需要設置密碼。 - 編碼規格:高。
- 分辨率:1920_1080,2180_720,800*600等。
- 視頻碼率:
- 加密策略:Token加密。
後端
後端唯一要做的事情就是給前端提供token
,前端只有獲取了token
才能播放出這個視頻出來。壞消息是百度雲根本沒有提供獲取token
的sdk
,好消息是我們已經找到了他生成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})
前端
- 用這個鏈接下載
videojs
文件:http://sdk.bce.baidu.com/media-sdk/Baidu-T5Player-SDK-Web-v3.4.0.zip
。 - 加載這三個
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>
- 創建一個容器,用來裝視頻播放的。示例代碼如下:
<div id="playercontainer"></div>
- 初始化播放器。並且將視頻地址的參數傳遞進去。示例代碼如下:
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服務