瀏覽器不需要安裝插件截驮,前端播放在線視頻方案笑陈,幾款播放器介紹,hls協(xié)議下的h.265視頻播放方案推薦

一般我們播放本地視頻都是使用 video標(biāo)簽葵袭,但是<video> 元素只支持三種視頻格式:MP4涵妥、WebM、Ogg坡锡,對(duì)于在線視頻直接使用video是沒法播放的妹笆,這里介紹幾款這兩天我在做播放在線監(jiān)控視頻功能時(shí)使用過的幾款播放器,初次接觸流媒體踩了一堆坑娜氏,到目前為止對(duì)這部分內(nèi)容都還了解的很淺顯拳缠,若有問題請(qǐng)?jiān)谠u(píng)論區(qū)指出,歡迎交流贸弥。
該文章旨在為小白推薦播放方案窟坐,誰還不是從小白過來的呢?

先介紹幾個(gè)概念:

流協(xié)議:流協(xié)議就是在兩個(gè)通信系統(tǒng)之間傳輸多媒體文件的一套規(guī)則绵疲,它定義了視頻文件將如何分解為小數(shù)據(jù)包以及它們?cè)诨ヂ?lián)網(wǎng)上傳輸?shù)捻樞蛘茉В琑TMP與 RTSP 是比較常見的流媒體協(xié)議。

HLS:HLS (HTTP Live Streaming)是Apple的動(dòng)態(tài)碼率自適應(yīng)技術(shù)盔憨。主要用于PC和Apple終端的音視頻服務(wù)徙菠。包括一個(gè)m3u(8)的索引文件,TS媒體分片文件和key加密串文件郁岩。參考:HLS婿奔。簡單來說,HLS是一種協(xié)議问慎,如果你的視頻源是http://xxxx.m3u8這種萍摊,就選擇這種協(xié)議,.m3u8是個(gè)文本文件如叼,直播時(shí)冰木,他的內(nèi)容實(shí)時(shí)變更,內(nèi)部指向一個(gè)或多個(gè).ts文件笼恰。

HTTP-FLV: HTTP-FLV 是將音視頻數(shù)據(jù)以 FLV 文件格式進(jìn)行封裝踊沸,再將 FLV 格式數(shù)據(jù)封裝在 HTTP 協(xié)議中進(jìn)行傳輸?shù)囊环N流媒體傳輸方式。HTTP-FLV 的實(shí)現(xiàn)原理: HTTP-FLV 利用 HTTP/1.1 分塊傳輸機(jī)制發(fā)送 FLV 數(shù)據(jù)社证。雖然直播服務(wù)器無法知道直播流的長度逼龟,但是 HTTP/1.1 分塊傳輸機(jī)制可以不填寫 conten-length 字段而是攜帶 Transfer-Encoding: chunked 字段,這樣客戶端就會(huì)一直接受數(shù)據(jù)猴仑。參考:FLV 和 HTTP-FLV审轮。
簡單來說就是你的視頻源是直播且是http://xxxx.flv,就選擇這種協(xié)議播放辽俗。還有個(gè)websocket-flv疾渣,是基于websocket的。

RTMP與RTSP: 什么是RTMP 和 RTSP崖飘?它們之間有什么區(qū)別榴捡?

H264(AVC)與H265(HEVC):都是視頻編碼,是視頻壓縮格式朱浴,由于視頻本身的碼流太大吊圾,所以需要經(jīng)過壓縮然后再通過網(wǎng)絡(luò)進(jìn)行傳輸,其中H265是H264的升級(jí)版翰蠢,很多播放器無法播放H265視頻项乒。

下列播放器排名不分先后,自己評(píng)判梁沧。

1.西瓜播放器- xgplayer

我使用的版本:


image.png

優(yōu)點(diǎn):
1.官網(wǎng)教程非常簡單清晰檀何,上手快。這點(diǎn)個(gè)人認(rèn)為尤其重要廷支,小白哪懂那么多频鉴,就沖這個(gè)點(diǎn)個(gè)大大的贊!
2.使用起來體驗(yàn)感很好
3.支持直播點(diǎn)播恋拍,支持hls垛孔,http+flv,dash施敢,WebRTC直播周荐,還有音樂播放器
4.提供在線可調(diào)試demo

image.png

缺點(diǎn):
1.xgplayer-hls.js不能播放hls H.265視頻,因?yàn)槭腔趆ls.js封裝的僵娃,hls.js支持H264羡藐,不支持H265。
2.xgplayer-hls測(cè)試后發(fā)現(xiàn)同樣不能播放hls H.265視頻悯许。
3.播放不同的視頻需要自己切換對(duì)應(yīng)的包仆嗦,如xgplayer-flv.js,xgplayer-hls.js(也可以算是優(yōu)點(diǎn)先壕,包體積更小瘩扼,更靈活,看你怎么評(píng)判了)

我一開始選取的這款播放器垃僚,但很遺憾集绰,我的監(jiān)控視頻是hls協(xié)議的H.265視頻,沒法播放谆棺。栽燕。罕袋。但總的來說如果不播放H.265視頻,個(gè)人非常推薦碍岔!

播放效果:


image.png

2.EasyPlayer.js

首先有的博客用的這個(gè)@easydarwin/easywasmplayer浴讯,但在npm上看到這個(gè)包不再支持了,我沒用過這個(gè)包蔼啦,感興趣的自己嘗試榆纽。

image.png

我用的是這個(gè):EasyPlayer.js
版本如下:

image.png

優(yōu)點(diǎn):
1.內(nèi)部自動(dòng)識(shí)別視頻格式,自動(dòng)使用對(duì)應(yīng)方法解碼捏肢。

image.png

缺點(diǎn):
1.文檔錯(cuò)誤奈籽,不友好,按照文檔指示 npm install @easydarwin/easyplayer --save 后沒有找到官方說的EasyPlayer.swf文件

image.png

我在4.0.7版本中才找到這個(gè)文件鸵赫。


image.png

但是直接下載官方demo后跑起來發(fā)現(xiàn)衣屏,不需要這個(gè)文件也行,因此應(yīng)該是官方文檔沒有更新辩棒。(若遇到vue demo運(yùn)行報(bào)錯(cuò)勾拉,可能是nodejs 版本問題)

2.右鍵播放器有彈窗,(解決辦法:自己設(shè)置樣式隱藏)


image.png
<style>
// 隱藏彈窗
.easy-player-right-menu{
  display: none !important;
}
</style>

3.該播放器是支持播放h265視頻的盗温,但應(yīng)該是指的flv格式的(我未測(cè)試過)藕赞, 實(shí)測(cè)時(shí)發(fā)現(xiàn)不支持播放hls 協(xié)議下的h265視頻

播放效果:


image.png

3.h265web.js

優(yōu)點(diǎn):
1.詳情見官方文檔,篇幅有限不一一列舉

image.png

2.使用后是目前唯一一個(gè)可以滿足我需求的播放器卖局,可以播放hls協(xié)議的H.265視頻斧蜕,主碼流的,視頻信息如下:
image.png

但問題是很卡砚偶!卡爆了的卡!批销,但是好歹出現(xiàn)了畫面,后改為輔碼流視頻源才播放流暢染坯,視頻信息如下:

image.png

缺點(diǎn):
1.很占內(nèi)存均芽,引入項(xiàng)目后至少占1個(gè)g內(nèi)存,而且對(duì)h265視頻解析是使用canvas繪制的方式(目前好像只有這種方案才能播放)单鹿,對(duì)比使用video播放來說慢了些掀宋。但h265webj內(nèi)部做了判斷,當(dāng)視頻是h264格式的會(huì)改為video標(biāo)簽播放仲锄。
2.播放器底部的controll需要自己實(shí)現(xiàn)劲妙,官網(wǎng)提供的是各種api,提倡自己封裝儒喊×头埽可參考我這兩篇文章自己實(shí)現(xiàn),或自己查閱文檔封裝怀愧。
h265web.js 同時(shí)播放多個(gè)視頻侨颈,修改官方example 中player.js并重新編譯
前端使用hls方式播放h265(HEVC)格式的.ts在線文件余赢,附vue2.x封裝h265web.js代碼
3.控制臺(tái)作者給自己打廣告,連播放器要傳的參數(shù)token都是自己的廣告哈垢。妻柒。。不過問題不大温赔,開源的嘛蛤奢,可以理解鬼癣。

image.png

image.png

image.png

4.還有個(gè)問題陶贼,在tag v20211104和最新版本 tag v20220916播放上面那個(gè)主碼流 hls協(xié)議的H.265視頻時(shí)發(fā)現(xiàn),低版本tag v20211104反而更流暢待秃?猜測(cè)是后續(xù)版本迭代升級(jí)后體積變大拜秧,占用更多內(nèi)存,導(dǎo)致后面的版本播放更卡頓章郁。

擴(kuò)展:
若因?yàn)榭D導(dǎo)致播放延遲枉氮,可進(jìn)行追幀設(shè)置,動(dòng)態(tài)更改播放倍數(shù)優(yōu)化暖庄。我并未實(shí)現(xiàn)相關(guān)代碼聊替,因?yàn)檎{(diào)試起來太麻煩了,監(jiān)控是內(nèi)網(wǎng)視頻培廓,沒法在線調(diào)試惹悄。。肩钠。目前來說播放效果都比較好泣港,延遲也不高,幾秒左右价匠。

播放效果:


image.png

4.videojs

一個(gè)比較成熟的方案当纱,用的人比較多,但我沒怎么用過踩窖,我大概測(cè)試了下坡氯,可播放hls協(xié)議下h.264視頻,但不支持播放hls 協(xié)議下的h.265視頻洋腮,然后我就pass 掉了廉沮。
測(cè)試播放.m3u8后綴視頻源html代碼:

<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>videoJs</title>
  <link  rel="stylesheet" />

  <!-- If you'd like to support IE8 (for Video.js versions prior to v7) -->
  <!-- <script src="https://vjs.zencdn.net/ie8/1.1.2/videojs-ie8.min.js"></script> -->

  <script src="https://vjs.zencdn.net/7.20.3/video.min.js"></script>
  <script src="https://unpkg.com/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script>
</head>
<body>
<section id="videoPlayer">
  <video id="example-video" width="600" height="300" class="video-js vjs-default-skin vjs-big-play-centered" poster="">
    <source src="http://rm03.wscdn.hls.xiaoka.tv/live/fczjp0Dc_J60VGMN/playlist.m3u8" type="application/x-mpegURL" id="target">
  </video>
</section>
<script type="text/javascript">
  var player = videojs('example-video', { "poster": "", "controls": "true" }, function() {
    this.on('play', function() {
      console.log('正在播放');
    });
    //暫停--播放完畢后也會(huì)暫停
    this.on('pause', function() {
      console.log("暫停中")
    });
    // 結(jié)束
    this.on('ended', function() {
      console.log('結(jié)束');
    })

  });
</script>
</body>
</html>

參考:videojs 播放.M3U8格式視頻

5.rtsp流純前端播放方案 express+ffmpeg+flvjs

這種方案延遲較低,純前端實(shí)現(xiàn)rtsp+websocket-flv播放徐矩。
前端播放器只要支持websocket-flv就行滞时,不一定非要是flv.js,還需要啟動(dòng)nodejs后臺(tái)服務(wù)滤灯,要注意的是這臺(tái)運(yùn)行node服務(wù)的服務(wù)器上必須要安裝ffmpeg坪稽,最好是設(shè)置環(huán)境變量曼玩,若未設(shè)置則nodejs 代碼里也要改下路徑。該方案大概原理是nodejs內(nèi)部通過執(zhí)行ffmpeg命令實(shí)現(xiàn)對(duì)rtsp流轉(zhuǎn)flv窒百,然后通過websocket將flv流發(fā)送到前端黍判,前端使用flv.js 播放,注意,這個(gè)播放是基于websocket協(xié)議的篙梢。

這里我用vlc模擬rtsp流顷帖,然后啟動(dòng)node服務(wù)


image.png

前端使用flv.js將rtsp視頻源傳給node服務(wù)轉(zhuǎn)碼,成功播放視頻渤滞!


image.png

參考教程:里面基本都有源碼贬墩,思路都是一樣的,但異常情況需要自己處理妄呕,比如斷流陶舞,延遲等。
html5中播放rtsp流實(shí)現(xiàn)監(jiān)控绪励、直播等方案
RTSP流媒體播放器
如何實(shí)現(xiàn) RTSP 視頻播放肿孵?HTML5 播放 RTSP 視頻案例分享!
【前端】rtsp 與 rtmp 視頻流的播放方法
測(cè)試流搭建:
VLC搭建簡單的RTSP流媒體服務(wù)器
vlc搭建rtsp服務(wù)器作為測(cè)試流

感謝有這么多優(yōu)秀的庫供我們選擇疏魏,大家努力吧停做,爭取以后寫個(gè)自己的庫讓別人使用!

以上就是本篇文章全部內(nèi)容了大莫,寫了這么多蛉腌,若對(duì)你有幫助,請(qǐng)點(diǎn)個(gè)贊吧葵硕,謝謝支持眉抬!
本文地址:http://www.reibang.com/p/95869f3519b1,轉(zhuǎn)載請(qǐng)注明出處懈凹,謝謝蜀变。

參考:
見正文,引用較多介评,不一一列舉了库北。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市们陆,隨后出現(xiàn)的幾起案子寒瓦,更是在濱河造成了極大的恐慌,老刑警劉巖坪仇,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杂腰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡椅文,警方通過查閱死者的電腦和手機(jī)喂很,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門惜颇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人少辣,你說我怎么就攤上這事凌摄。” “怎么了漓帅?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵锨亏,是天一觀的道長。 經(jīng)常有香客問我忙干,道長器予,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任豪直,我火速辦了婚禮劣摇,結(jié)果婚禮上珠移,老公的妹妹穿的比我還像新娘弓乙。我一直安慰自己,他們只是感情好钧惧,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布暇韧。 她就那樣靜靜地躺著,像睡著了一般浓瞪。 火紅的嫁衣襯著肌膚如雪懈玻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天乾颁,我揣著相機(jī)與錄音涂乌,去河邊找鬼。 笑死英岭,一個(gè)胖子當(dāng)著我的面吹牛湾盒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诅妹,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼罚勾,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了吭狡?” 一聲冷哼從身側(cè)響起尖殃,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎划煮,沒想到半個(gè)月后送丰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弛秋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年器躏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牵现。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡邀桑,死狀恐怖瞎疼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壁畸,我是刑警寧澤贼急,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站捏萍,受9級(jí)特大地震影響太抓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜令杈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一走敌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逗噩,春花似錦掉丽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纲刀,卻和暖如春项炼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背示绊。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工锭部, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人面褐。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓拌禾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盆耽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蹋砚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容