• python-html-百度云音视频点播服务


    加密的视频:

    一:python后端需要生成token

    token计算规则

    名词解释:

    • userId: 百度云用户唯一标识,可在百度云管理控制台账号基本信息中得到,32位字符串。
    • userKey:用户密钥,是AES-128内容密钥,用于对MediaId和ExpirationTime组成的串进行加密。长度为16字节,用32位十六进制数表示。可在百度云VOD管理控制台中设置和更新。
    • signature: 签名,是用UserKey给MediaId和ExpirationTime加密生成的字符串。长度为32字节,用64位十六进制数表示。
    • mediaId:百度云VOD中媒资的唯一标识。
    • expirationTime:Signature的过期时间,是一个unix时间戳,以秒为单位。
    • token:由Signature_UserId_ExpirationTime组成的字符串。
    • 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)

    代码如下

    urlpatterns = [
      path("course_token", view.course_token)
    ]

    def
    course_token(request): """ 百度点播的token """ video_url = request.GET.get('video_url') # 过期时间 expiration_time = int(time.time()) + 2 * 60 * 60 USER_ID = settings.BAIDU_CLOUD_USER_ID # 控制台-用户中心-用户ID USER_KEY = settings.BAIDU_CLOUD_USER_KEY # 音视频点播服务-全局设置-发布设置-安全设置-user key # file=http://xxx/xxxxx/xxxx/yyyyyyy.m3u8 extension = os.path.splitext(video_url)[1] # .m3u8 # 'mda-igjsr8g7z7zqwnav.m3u8'.replace('.m3u8', '') = 'yyyyyyy' media_id = video_url.split('/')[-1].replace(extension, '') # unicode->bytes=unicode.encode('utf-8')bytes 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) print('token:', token) return restful.result(data={'token': token})

    二:前端

    1.播放页面需要加载

    前三个文件下载地址:http://sdk.bce.baidu.com/media-sdk/Baidu-T5Player-SDK-Web-v3.4.0.zip

        <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盒子格式如下 <script src="{% static 'js/course_detail.js' %}"></script>
    <div class="video-container">
        <span hidden data-video-url="{{ course.video_url }}" data-cover-url="{{ course.cover_url }}"></span>
        <div id="playercontainer"></div>
    </div>

    js代码

    $(function () {
        var span = $(".video-container span");
        var video_url = span.attr("data-video-url");
        var cover_url = span.attr('data-cover-url');
        var player = cyberplayer("playercontainer").setup({
             '100%',
            height: '100%',
            file: video_url,
            image: cover_url,
            autostart: false,
            stretching: "uniform",
            repeat: false,
            volume: 100,
            controls: true,
            // primary: 'flash', flash优先
            tokenEncrypt: "true",
            // 点击头像 安全中心 AccessKey
            ak: 'xxxxxxxxxxxxxxxxxx'
        });
        player.on("beforePlay",function (e) {
            // 不是m3u8格式的就不是加密视频
            if(!/m3u8/.test(e.file)){
                return;
            }
    
            xfzajax.get({
                'url': '/course/course_token/',
                'data': {
                    'video_url': video_url
                },
                'success': function (result) {
                    if(result['code'] === 200){
                        var token = result['data']['token'];
                        console.log('token:', token);
                        player.setToken(e.file,token);
                    }else{
                        window.messageBox.showError('token获取错误!');
                    }
                }
            });
        });
    });
  • 相关阅读:
    jQuery easyui datagrid pagenation 的分页数据格式
    Mysql操作符号
    jquery JSON的解析方式
    线程有几种状态
    工作日志2014-07-07
    leetcode
    Fragment中的setUserVisibleHint()方法调用
    Android开发:Eclipse中SqliteManager插件使用
    海南出差报告总结(案件录入与案件追踪系统)
    Python学习十四:filter()
  • 原文地址:https://www.cnblogs.com/tangpg/p/9396931.html
Copyright © 2020-2023  润新知