zoukankan      html  css  js  c++  java
  • 漂亮的HTML5弹幕视频播放器DPlayer

    DPlayer

    快速开始

      加载播放器文件:

    <link rel="stylesheet" href="DPlayer.min.css" />
    <div id="dplayer"></div>
    <script src="DPlayer.min.js"></script>

      在js里初始化:

    const dp = new DPlayer({
        container: document.getElementById('dplayer'),
        video: {
            url: 'demo.mp4',
        },
    });

      一个最简单的 DPlayer 就初始化好了,它只有最基本的视频播放功能。

    搭建视频弹幕后台服务

      前置条件:安装了git、docker、docker-compose

      下载后台服务代码,当然也可以自己搭建后台服务

    git clone https://github.com/MoePlayer/DPlayer-node.git

      进入DPlayer-node目录执行docker-compose命令

    cd DPlayer-node
    
    docker-compose build
    docker-compose pull
    docker-compose up  -d

      启动弹幕服务之后,就可以愉快的在边看视频边发弹幕了(~ ̄▽ ̄)~

      当然需要先在DPlayer设置弹幕属性。DPlayer支持播放各种格式,以下的视频选项设置亲测有效,不过视频字幕没有测试,有感兴趣的同学可以自己制作字幕玩一下。

    <h1>DPlayer</h1>
    
    <link rel="stylesheet" href="https://cdn.bootcss.com/dplayer/1.25.0/DPlayer.min.css" />
    <div id="dplayer"></div>
    <script src="https://cdn.bootcss.com/blueimp-md5/2.12.0/js/md5.min.js"></script>
    <script src="https://cdn.bootcss.com/flv.js/1.5.0/flv.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
    <!-- 以上js都需要在dplayer之前加载 -->
    <script src="https://cdn.bootcss.com/dplayer/1.25.0/DPlayer.min.js"></script>
    
    <script type="text/javascript">
        var url = '/assets/oceans.mp4';
        var vid = md5(url);
        
        const dp = new DPlayer({
            container: document.getElementById('dplayer'),
            autoplay: false, // 自动播放
            theme: '#FADFA3', // 主题
            loop: true, // 循环播放
            lang: 'zh-cn', // 语言
            screenshot: true, // 截图
            hotkey: true, // 热键
            preload: 'auto', // 预加载
            logo: '/assets/octocat.png', // 左上角logo
            volume: 0.7, // 音量
            mutex: true, // 多个视频互斥
            // 常规方式
            video: {
                url: url,
                type: 'normal',
                pic: '/assets/demo.png', // 封面
                thumbnails: '/assets/thumbnail.jpg', // 缩略图
            },
            // m3u8
            //video: {
            //    url: '/assets/demo.m3u8',
            //    type: 'hls'
            //},
            // flv
            //video: {
            //    url: '/assets/demo.flv',
            //    type: 'flv'
            //},
            pluginOptions: {
                hls: {
                    // hls config
                    autoStartLoad: true,
                    startPosition: -1
    
                },
                flv: {
                    enableWorker: false,
                    enableStashBuffer: true,
                    stashInitialSize: undefined,
    
                    isLive: false,
    
                    lazyLoad: true,
                    lazyLoadMaxDuration: 3 * 60,
                    lazyLoadRecoverDuration: 30,
                    deferLoadAfterSourceOpen: true,
    
                    // autoCleanupSourceBuffer: default as false, leave unspecified
                    autoCleanupMaxBackwardDuration: 3 * 60,
                    autoCleanupMinBackwardDuration: 2 * 60,
    
                    statisticsInfoReportInterval: 600,
    
                    fixAudioTimestampGap: true,
    
                    accurateSeek: false,
                    seekType: 'range',  // [range, param, custom]
                    seekParamStart: 'bstart',
                    seekParamEnd: 'bend',
                    rangeLoadZeroStart: false,
                    customSeekHandler: undefined,
                    reuseRedirectedURL: false,
                    // referrerPolicy: leave as unspecified
    
                    headers: undefined,
                    customLoader: undefined
                }
            },
            
            // 切换视频质量
            //video: {
            //    quality: [
            //        {
            //            name: 'HD',
            //            url: 'demo.m3u8',
            //            type: 'hls',
            //        },
            //        {
            //            name: 'SD',
            //            url: 'demo.mp4',
            //            type: 'normal',
            //        },
            //    ],
            //    defaultQuality: 0,
            //    pic: 'demo.png',
            //    thumbnails: 'thumbnails.jpg',
            //},
            // 视频字幕
            subtitle: {
                type: 'webvtt',
                url: 'webvtt.vtt',
                fontSize: '25px',
                bottom: '10%',
                color: '#b7daff'
            },
            // 弹幕
            danmaku: {
                id: vid,
                api: 'http://192.168.1.172:1207/',
                addition: ['http://192.168.1.172:1207/v3/bilibili?aid=80266688&cid=137358410']
            },
            // 视频右键菜单
            contextmenu: [
                {
                    text: 'falltakeman',
                    link: 'https://cnblogs.com/falltakeman',
                },
                {
                    text: 'dplayer',
                    click: (player) => {
                        console.log(player);
                    },
                },
            ],
            // 高能预告
            highlight: [
                {
                    text: '敌军还有10秒到达战场',
                    time: 10,
                },
                {
                    text: '2mins 空降',
                    time: 120,
                },
            ],
        });
    
    </script>

    danmaku属性

      说明一下danmaku属性:

      id是视频id,需要保证唯一性,建议使用md5加密。

      api就是弹幕后台的地址了。

      addition是可选项,用来加载bilibili弹幕,其实就是通过刚刚搭建的弹幕服务去b站加载弹幕。

      可以看到我的addition属性是这样的:http://192.168.1.172:1207/v3/bilibili?aid=80266688&cid=137358410

      官网的示例没有详细说明,没有接触过的可能不知道这个aid是什么,这个aid就是b站视频的av号,而cid就是弹幕id。

     

      当然也可以不传cid参数,弹幕后台会根据aid去查找cid。

      这是没有加载b站弹幕的截图,本来录了gif,但是文件太大了,就不贴gif图片了。

      这是加载了bilibili视频弹幕的截图

      在视频上右键,显示自定义的内容

  • 相关阅读:
    【转】Chrome 控制台不完全指南
    AngularJS 之 Factory vs Service vs Provider【转】
    【转】NuGet.org 无法访问的解决方法
    jquery easyui 1.4.1 验证时tooltip 的位置调整
    jquery easyui 1.4.1 API( CHM版)
    扩展 easyui-tabs 插件 关闭标签页方法
    easyui layout 折叠后显示标题
    easyui 中Datagrid 控件在列较多且无数据时,列显示不全的解决方案
    为easyui datagrid 添加上下方向键移动
    Android布局实现圆角边框
  • 原文地址:https://www.cnblogs.com/fallTakeMan/p/12099242.html
Copyright © 2011-2022 走看看