mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-11 22:06:17 -08:00
218 lines
6.0 KiB
Plaintext
218 lines
6.0 KiB
Plaintext
---
|
||
title: 第三方库
|
||
sidebar_position: 7
|
||
slug: /zh-cn/libraries
|
||
---
|
||
|
||
## 简介
|
||
|
||
- 通过选项 `customType` 可以很容易的集成第三方的视频解码库,存在多个解码器时,你可以把他们都添加到 `customType` 里,解码库太大时,你还可以使用 `js` 动态导入
|
||
|
||
- 播放器默认会解析出 `url` 选项的视频类型(如 `m3u8`, `flv`, `mpd`), 假如无法解析出正确的视频类型时,你可以添加 `type` 选项指明视频类型
|
||
|
||
```js
|
||
// 现在这个播放器可以同时播放: m3u8, flv, mpd
|
||
var art = new Artplayer({
|
||
container: '.artplayer-app',
|
||
url: '/assets/sample/video.m3u8',
|
||
type: 'm3u8', // 可选,但最好填上
|
||
customType: {
|
||
m3u8: async function (video, url) {
|
||
const { default: Hls } = await import('hls.js');
|
||
},
|
||
flv: async function (video, url) {
|
||
const { default: flvjs } = await import('flv.js');
|
||
},
|
||
mpd: async function (video, url) {
|
||
const { default: dashjs } = await import('dash.js');
|
||
},
|
||
},
|
||
});
|
||
|
||
// 你可以切换新的视频地址
|
||
art.url = '/assets/sample/video-new.m3u8';
|
||
|
||
// 你还可以切换新的视频类型
|
||
art.type = 'flv';
|
||
art.url = '/assets/sample/video.flv';
|
||
|
||
art.type = 'mpd';
|
||
art.url = '/assets/sample/video.mpd';
|
||
```
|
||
|
||
:::tip 提示
|
||
|
||
假如使用了 `customType`,那么切换地址前,要销毁上一个解码器实例,否则会引起内存泄漏
|
||
|
||
:::
|
||
|
||
```js
|
||
var hls = null;
|
||
var art = new Artplayer({
|
||
container: '.artplayer-app',
|
||
url: '/assets/sample/video.m3u8',
|
||
type: 'm3u8',
|
||
customType: {
|
||
m3u8: async function (video, url) {
|
||
const { default: Hls } = await import('hls.js');
|
||
|
||
// 切换地址前,要销毁上一个解码器实例
|
||
if (hls) {
|
||
hls.destroy();
|
||
}
|
||
|
||
// 播放器销毁时,也要销毁解码器实例
|
||
art.on('destroy', () => {
|
||
if (hls) {
|
||
hls.destroy();
|
||
}
|
||
});
|
||
|
||
hls = new Hls();
|
||
hls.loadSource(url);
|
||
hls.attachMedia(video);
|
||
},
|
||
},
|
||
});
|
||
|
||
// 切换新的视频地址
|
||
art.url = '/assets/sample/video-new.m3u8';
|
||
```
|
||
|
||
## flv.js
|
||
|
||
- 主页: [https://github.com/Bilibili/flv.js](https://github.com/Bilibili/flv.js)
|
||
|
||
<div className="run-code" data-libs="https://unpkg.com/flv.js@1.6.2/dist/flv.js">
|
||
▶ Run Code
|
||
</div>
|
||
|
||
```js
|
||
var art = new Artplayer({
|
||
container: '.artplayer-app',
|
||
autoplay: true,
|
||
url: '/assets/sample/video.flv',
|
||
customType: {
|
||
flv: function (video, url) {
|
||
if (flvjs.isSupported()) {
|
||
const flvPlayer = flvjs.createPlayer({
|
||
type: 'flv',
|
||
url: url,
|
||
});
|
||
flvPlayer.attachMediaElement(video);
|
||
flvPlayer.load();
|
||
} else {
|
||
art.notice.show = '不支持播放格式:flv';
|
||
}
|
||
},
|
||
},
|
||
});
|
||
```
|
||
|
||
## hls.js
|
||
|
||
- 主页: [https://github.com/video-dev/hls.js](https://github.com/video-dev/hls.js)
|
||
|
||
<div className="run-code" data-libs="https://cdnjs.cloudflare.com/ajax/libs/hls.js/8.0.0-beta.3/hls.min.js">
|
||
▶ Run Code
|
||
</div>
|
||
|
||
```js
|
||
var art = new Artplayer({
|
||
container: '.artplayer-app',
|
||
autoplay: true,
|
||
url: 'https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8',
|
||
customType: {
|
||
m3u8: function (video, url) {
|
||
if (Hls.isSupported()) {
|
||
const hls = new Hls();
|
||
hls.loadSource(url);
|
||
hls.attachMedia(video);
|
||
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
|
||
video.src = url;
|
||
} else {
|
||
art.notice.show = '不支持播放格式:m3u8';
|
||
}
|
||
},
|
||
},
|
||
});
|
||
```
|
||
|
||
## dash.js
|
||
|
||
- 主页: [https://github.com/Dash-Industry-Forum/dash.js](https://github.com/Dash-Industry-Forum/dash.js)
|
||
|
||
<div className="run-code" data-libs="https://cdnjs.cloudflare.com/ajax/libs/dashjs/2.6.3/dash.all.min.js">
|
||
▶ Run Code
|
||
</div>
|
||
|
||
```js
|
||
var art = new Artplayer({
|
||
container: '.artplayer-app',
|
||
autoplay: true,
|
||
url: 'https://dash.akamaized.net/envivio/EnvivioDash3/manifest.mpd',
|
||
customType: {
|
||
mpd: function (video, url) {
|
||
var player = dashjs.MediaPlayer().create();
|
||
player.initialize(video, url, true);
|
||
},
|
||
},
|
||
});
|
||
```
|
||
|
||
## shaka-player
|
||
|
||
- 主页: [https://github.com/google/shaka-player](https://github.com/google/shaka-player)
|
||
|
||
<div className="run-code" data-libs="https://unpkg.com/shaka-player@3.3.1/dist/shaka-player.compiled.js">
|
||
▶ Run Code
|
||
</div>
|
||
|
||
```js
|
||
var art = new Artplayer({
|
||
container: '.artplayer-app',
|
||
autoplay: true,
|
||
url: '//storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd',
|
||
customType: {
|
||
mpd: function (video, url) {
|
||
shaka.polyfill.installAll();
|
||
var player = new shaka.Player(video);
|
||
player.load(url);
|
||
},
|
||
},
|
||
});
|
||
```
|
||
|
||
## webtorrent
|
||
|
||
- 主页: [https://github.com/webtorrent/webtorrent](https://github.com/webtorrent/webtorrent)
|
||
|
||
<div className="run-code" data-libs="https://unpkg.com/webtorrent@1.8.1/index.js">
|
||
▶ Run Code
|
||
</div>
|
||
|
||
```js
|
||
var art = new Artplayer({
|
||
container: '.artplayer-app',
|
||
autoplay: true,
|
||
url: 'magnet:?xt=urn:btih:6a9759bffd5c0af65319979fb7832189f4f3c35d&dn=sintel.mp4&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&tr=wss%3A%2F%2Ftracker.webtorrent.io&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fsintel-1024-surround.mp4',
|
||
type: 'torrent',
|
||
customType: {
|
||
torrent: function (video, url, art) {
|
||
var client = new WebTorrent();
|
||
art.loading.show = true;
|
||
client.add(url, function (torrent) {
|
||
var file = torrent.files[0];
|
||
file.renderTo(video, {
|
||
autoplay: true,
|
||
});
|
||
});
|
||
},
|
||
},
|
||
});
|
||
|
||
art.on('ready', () => {
|
||
art.template.$video.controls = false;
|
||
});
|
||
```
|