PaysAPI直接查看接口文檔:https://www.paysapi.com/docindex,比較簡單
百度雲視頻點播服務接入:
1. 准備工作:百度雲的示例:http://cyberplayer.bcelive.com/demo/new/index.html
· 在百度雲注冊賬號並且開通“音視頻點播VOD”服務
· 進入后台管理系統 -> 安全認證 -> 獲取AccessKey
· 自定義轉碼模板(因為視頻需要使用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)
加密代碼實例:
# hamc,hashlib:加密包
import hmac,hashlib,time from django.conf import settings # 獲取視頻加密token方式 def course_token(request): file = request.GET.get('video') # 自行設置token過期時間 expiration_time = int(time.time()) + 2 * 60 * 60 # 用戶唯一ID USER_ID = settings.BAIDU_CLOUD_USER_ID
# 用戶秘鑰 USER_KEY = settings.BAIDU_CLOUD_USER_KEY # 從視頻地址中得到 百度雲VOD 中媒體資源的唯一標識 media_id = file.split('/')[-2] # 加密時,需要將加密的字符串轉為16進制 key = USER_KEY.encode('utf-8') message = '/{0}/{1}'.format(media_id, expiration_time).encode('utf-8')
# hamc.new():創建一個加密的實例
# digestmod=hashlib.sha256:指定加密類型
# .hexdigest():得到加密后的對象 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. 下載百度雲視頻播放插件: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. 在js代碼中初始化視頻播放器:
var videourl = "視頻地址"; var cover = "視頻封面圖"; var player = cyberplayer("playercontainer").setup({ width: '100%',//設置寬度 height: '100%',//設置播放器高度 file: videourl,//視頻播放地址 image: cover,//視頻封面圖片
autostart: false,
//設置播放器縮放方式,縮放方式分為:1.none:不縮放;2.uniform:添加黑邊縮放;3. exactfit:改變寬高比縮到最大;4.fill:剪切並縮放到最大(默認方式為uniform) stretching: "uniform",
//設置視頻的重復播放模式,重復模式分為:1.false:無重復; 2.true:重復播放 repeat: false, volume: 100,//音量調節,默認為100
//設置播放器控制條的顯示模式,顯示模式分為:1.none:不顯示;2.over:懸浮(鼠標無操作時自動隱藏) controls: true, //primary: "flash",// 是否使用flash播放
// 是否開啟token加密(重要) tokenEncrypt: "true", // AccessKey ak: 'AccessKey' //用戶的AccessKey });
// 命令 beforePlay :在開始播放前需要做的事情 player.on('beforePlay',function (e) {
// 判斷視頻格式是否為m3u8格式 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'];
// 將token設置到播放器中 player.setToken(e.file,token); }else{
// 如果token有誤,則將視頻停止播放 player.stop(); } }, 'fail': function (error) { console.log(error); } }); });
有志者,事竟成!