django之集成第三方支付平台PaysAPI與百度雲視頻點播服務接入


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); } }); });

 

 有志者,事竟成!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM