漂亮的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視頻彈幕的截圖

  在視頻上右鍵,顯示自定義的內容


免責聲明!

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



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