DPlayer 播放rmtp/m3u8/flv视频

boyanx2周前技术教程3

MSE 支持

HLS

需要在 DPlayer.min.js 前面加载 hls.js (opens new window)。

Load demo

<div id="dplayer"></div>
<script src="hls.min.js"></script>
<script src="DPlayer.min.js"></script>
const dp = new DPlayer({
    container: document.getElementById('dplayer'),
    video: {
        url: 'demo.m3u8',
        type: 'hls',
    },
    pluginOptions: {
        hls: {
            // hls config
        },
    },
});
console.log(dp.plugins.hls); // Hls 实例
// 另一种方式,使用 customType
const dp = new DPlayer({
    container: document.getElementById('dplayer'),
    video: {
        url: 'demo.m3u8',
        type: 'customHls',
        customType: {
            customHls: function (video, player) {
                const hls = new Hls();
                hls.loadSource(video.src);
                hls.attachMedia(video);
            },
        },
    },
});

MPEG DASH

需要在 DPlayer.min.js 前面加载 dash.js (opens new window)。

<div id="dplayer"></div>
<script src="dash.min.js"></script>
<script src="DPlayer.min.js"></script>
const dp = new DPlayer({
    container: document.getElementById('dplayer'),
    video: {
        url: 'demo.mpd',
        type: 'dash',
    },
    pluginOptions: {
        dash: {
            // dash config
        },
    },
});
console.log(dp.plugins.dash); // Dash 实例
// 另一种方式,使用 customType
const dp = new DPlayer({
    container: document.getElementById('dplayer'),
    video: {
        url: 'demo.mpd',
        type: 'customDash',
        customType: {
            customDash: function (video, player) {
                dashjs.MediaPlayer().create().initialize(video, video.src, false);
            },
        },
    },
});

MPEG DASH (Shaka)

需要在 DPlayer.min.js 前面加载 shaka-player.compiled.js (opens new window)。

<div id="dplayer"></div>
<script src="shaka-player.compiled.js"></script>
<script src="DPlayer.min.js"></script>
const dp = new DPlayer({
    container: document.getElementById('dplayer'),
    screenshot: true,
    video: {
        url: 'demo.mpd',
        type: 'shakaDash',
        customType: {
            shakaDash: function (video, player) {
                var src = video.src;
                var playerShaka = new shaka.Player(video); // 将会修改 video.src
                playerShaka.load(src);
            },
        },
    },
});

FLV

需要在 DPlayer.min.js 前面加载 flv.js (opens new window)。

Load demo

<div id="dplayer"></div>
<script src="flv.min.js"></script>
<script src="DPlayer.min.js"></script>
const dp = new DPlayer({
    container: document.getElementById('dplayer'),
    video: {
        url: 'demo.flv',
        type: 'flv',
    },
    pluginOptions: {
        flv: {
            // refer to https://github.com/bilibili/flv.js/blob/master/docs/api.md#flvjscreateplayer
            mediaDataSource: {
                // mediaDataSource config
            },
            config: {
                // config
            },
        },
    },
});
console.log(dp.plugins.flv); // flv 实例
// 另一种方式,使用 customType
const dp = new DPlayer({
    container: document.getElementById('dplayer'),
    video: {
        url: 'demo.flv',
        type: 'customFlv',
        customType: {
            customFlv: function (video, player) {
                const flvPlayer = flvjs.createPlayer({
                    type: 'flv',
                    url: video.src,
                });
                flvPlayer.attachMediaElement(video);
                flvPlayer.load();
            },
        },
    },
});

WebTorrent

需要在 DPlayer.min.js 前面加载 webtorrent (opens new window)。

Load demo

<div id="dplayer"></div>
<script src="webtorrent.min.js"></script>
<script src="DPlayer.min.js"></script>
const dp = new DPlayer({
    container: document.getElementById('dplayer'),
    video: {
        url: 'magnet:demo',
        type: 'webtorrent',
    },
    pluginOptions: {
        webtorrent: {
            // webtorrent config
        },
    },
});
console.log(dp.plugins.webtorrent); // WebTorrent 实例
// 另一种方式,使用 customType
const dp = new DPlayer({
    container: document.getElementById('dplayer'),
    video: {
        url: 'magnet:demo',
        type: 'customWebTorrent',
        customType: {
            customWebTorrent: function (video, player) {
                player.container.classList.add('dplayer-loading');
                const client = new WebTorrent();
                const torrentId = video.src;
                client.add(torrentId, (torrent) => {
                    const file = torrent.files.find((file) => file.name.endsWith('.mp4'));
                    file.renderTo(
                        video,
                        {
                            autoplay: player.options.autoplay,
                        },
                        () => {
                            player.container.classList.remove('dplayer-loading');
                        }
                    );
                });
            },
        },
    },
});

配合其他 MSE 库使用

DPlayer 可以通过 customType 参数与任何 MSE 库一起使用,例如支持P2P插件:

<div id="dplayer"></div>
<script src="https://cdn.jsdelivr.net/npm/cdnbye@latest"></script>
<script src="DPlayer.min.js"></script>
var type = 'normal';
if(Hls.isSupported() && Hls.WEBRTC_SUPPORT) {
    type = 'customHls';
}
const dp = new DPlayer({
    container: document.getElementById('dplayer'),
    video: {
        url: 'demo.m3u8',
        type: type,
        customType: {
            'customHls': function (video, player) {
                const hls = new Hls({
                    debug: false,
                    // Other hlsjsConfig options provided by hls.js
                    p2pConfig: {
                        live: false,        // 如果是直播设为true
                        // Other p2pConfig options provided by CDNBye http://www.cdnbye.com/cn/
                    }
                });
                hls.loadSource(video.src);
                hls.attachMedia(video);
            }
        }
    },
});

直播

你可以把 DPlayer 用在直播当中,但如果你想要直播弹幕,你需要自己准备一个 WebSocket 后端。

Load demo

初始化播放器:

const dp = new DPlayer({
    container: document.getElementById('dplayer'),
    live: true,
    danmaku: true,
    apiBackend: {
        read: function (endpoint, callback) {
            console.log('Pretend to connect WebSocket');
            callback();
        },
        send: function (endpoint, danmakuData, callback) {
            console.log('Pretend to send danmaku via WebSocket', danmakuData);
            callback();
        },
    },
    video: {
        url: 'demo.m3u8',
        type: 'hls',
    },
});

通过 WebSocket 获取到弹幕之后,通过 dp.danmaku.draw 绘制弹幕:

const danmaku = {
    text: 'Get a danmaku via WebSocket',
    color: '#fff',
    type: 'right',
};
dp.danmaku.draw(danmaku);

常见问题

为什么播放器不能全屏?

如果播放器被包含在 iframe 里,尝试在 iframe 上添加 allowfullscreen 属性。

为了完善的浏览器兼容性,它应该是这样:

<iframe src="example.com" allowfullscreen="allowfullscreen" mozallowfullscreen="mozallowfullscreen" msallowfullscreen="msallowfullscreen" oallowfullscreen="oallowfullscreen" webkitallowfullscreen="webkitallowfullscreen"></iframe>

为什么播放器不能在手机上自动播放?

大多数移动端浏览器禁止了视频自动播放。

标签: aplayer.js

相关文章

tvOS真的代表了应用的未来吗?

CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面。如果您想投稿,或寻求《近匠》报道,请发送邮件至tang...

顶级播放器:foobar2000 v1.3.6汉化版下载

IT之家(www.ithome.com):顶级播放器:foobar2000 v1.3.6汉化版下载IT之家讯 12月12日消息,著名免费专业音乐播放器foobar2000已经更新到了1.3.6 Fin...

无汉化不音乐,foobar2000 v1.3.4汉化版下载

IT之家(www.ithome.com):无汉化不音乐,foobar2000 v1.3.4汉化版下载五天之前,免费音乐播放器foobar2000正式更新至v1.3.4 Final正式版本。该版本带来了...

小白也能轻松搭建和使用iptv直播

IPTV-API 安装与使用教程,手把手教会你以下一共4种安装运行方式,选择一种适合您的即可。工作流部署(自动更新)一.进入Githubhttps://github.com登录或注册你的Github账...

Node-Media-Server开源流行Nodejs流媒体服务器

简介Node-Media-Server一个 Node.js 实现的RTMP/HTTP/WebSocket/HLS/DASH流媒体服务器。开源github地址:https://github.com/il...

看剧不愁,在NAS上使用Emby自供版媒体服务器实现Strm直链播放

本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:Stark-C哈喽小伙伴们好,我是Stark-C~前几次不是分享了Strm生成教程嘛,这个其实主要是提前给绿联和极空间的影视中心支持的Str...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。