Video.js-contrib-hls是一款基於Video.js框架的插件,主要用於支持MPEG-DASH和HLS播放,它是Video.js的一個補充和擴展,使得Video.js可以更加完善地支持流媒體播放。
一、安裝和使用videojs-contrib-hls
安裝videojs-contrib-hls可以直接使用npm進行安裝:
npm install videojs-contrib-hls
然後通過import的方式引入插件:
import videojs from "video.js"; import "videojs-contrib-hls";
接下來在Video.js的初始化中通過hls參數來使用插件:
const player = videojs('video-player', { techOrder: ['html5', 'flash'], sources: [{ type: 'application/x-mpegURL', src: 'http://example.com/your/hls/stream.m3u8' }], hls: { // hls配置選項 } });
在options中,我們可以對hls進行多種參數選項配置,例如最大解碼緩存時間、每個請求片段緩存的大小等等。
二、支持自動切換清晰度
如果HLS流的源URL提供了多種不同的清晰度片段,videojs-contrib-hls可以自動根據網路條件以及播放設備的支持進行不同清晰度之間的自動切換。只需要在sources列表中添加多個清晰度的片源,插件會自動判斷當前連接速度和設備支持的最高清晰度並進行自動切換。
const player = videojs('video-player', { sources: [{ type: 'application/x-mpegURL', src: 'http://example.com/your/hls/stream-240p.m3u8' },{ type: 'application/x-mpegURL', src: 'http://example.com/your/hls/stream-480p.m3u8' },{ type: 'application/x-mpegURL', src: 'http://example.com/your/hls/stream-720p.m3u8' }], hls: { // hls配置選項 } });
三、級聯字幕
Video.js-contrib-hls還支持HLS流文件中的字幕級聯,這意味著我們可以將多種語言的字幕同步在同一個流上進行播放,自由切換字幕,提升用戶觀看體驗。
使用字幕級聯需要在M3U8文件的`EXT-X-MEDIA`標籤中添加相同group-id的多個流,其中type分別為「AUDIO」和「SUBTITLES」表示分別為音頻流和字幕流,URI為相對路徑,LABLE為字幕語言名稱,如下所示:
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="中文",DEFAULT=YES,AUTOSELECT=YES,URI="./audio.m3u8" #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="英文",URI="./audio_en.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub",NAME="中文",DEFAULT=YES,AUTOSELECT=YES,URI="./sub.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub",NAME="英文",URI="./sub_en.m3u8"
在Video.js初始化時使用插件的tracks參數,將多個字幕流添加到tracks中,如下所示:
const player = videojs('video-player', { sources: [{ type: 'application/x-mpegURL', src: './playlist.m3u8' }], tracks: [{ kind: 'subtitles', src: './sub.m3u8', srclang: 'zh', label: '中文' },{ kind: 'subtitles', src: './sub_en.m3u8', srclang: 'en', label: 'English' }], hls: { // hls配置選項 } });
四、鉤子函數的使用
videojs-contrib-hls還支持多種鉤子函數,包括請求、緩存等等,可以方便地定製自己的播放器。
例如,在請求hls片段時可以使用xhrBeforeRequest鉤子,對請求進行自定義操作,例如添加Authorization頭部等。
player.hls.xhrBeforeRequest = function(options) { options.headers = options.headers || {}; options.headers.Authorization = "Bearer " + token; return options; };
同樣,我們還可以使用encryptWithDES鉤子對hls流進行加密,從而保證播放源的安全性:
player.hls.encryptWithDES = function(data, key) { const cipher = crypto.createCipheriv('des-cbc', key, iv); return Buffer.concat([cipher.update(data), cipher.final()]); };
五、總結
Video.js-contrib-hls是一款強大的HLS流媒體播放插件,提供了許多實用的功能,例如級聯字幕、自動清晰度切換、鉤子函數等等,可以讓我們更加方便地實現自定義的播放器。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/255098.html