• 百度云点播VOD服务


    百度云点播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({
            '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);
               }
           });
       });
  • 相关阅读:
    剑指offer(29):最小的K个数(pop_heap函数的使用)
    C++ partition(STL partition)算法使用
    rvm离线安装
    解决redis requires ruby version 2.3.0
    vim 中如何替换选中行或指定几行内的文本
    Vue.js框架:官方命令行工具的安装和使用(三)
    Node.js:windows下安装配置(一)
    Redis开发:windows下的redis安装记录(一)
    Vue.js框架:计算属性computed的用法(二)
    面试知识(一)
  • 原文地址:https://www.cnblogs.com/renshaoqi/p/10825763.html
Copyright © 2020-2023  润新知