如何使用HTML5實(shí)現(xiàn)視頻直播功能

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何使用HTML5實(shí)現(xiàn)視頻直播功能,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)建站2013年開(kāi)創(chuàng)至今,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元定安做網(wǎng)站,已為上家服務(wù),為定安各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

前言

前不久抽空對(duì)目前比較火的視頻直播,做了下研究與探索,了解其整體實(shí)現(xiàn)流程,以及探討移動(dòng)端HTML5直播可行性方案。

發(fā)現(xiàn)目前 WEB 上主流的視頻直播方案有 HLS 和 RTMP,移動(dòng) WEB 端目前以 HLS 為主(HLS存在延遲性問(wèn)題,也可以借助 video.js 采用RTMP),PC端則以 RTMP 為主實(shí)時(shí)性較好,接下來(lái)將圍繞這兩種視頻流協(xié)議來(lái)展開(kāi)H5直播主題分享。

一、視頻流協(xié)議HLS與RTMP

1. HTTP Live Streaming

HTTP Live Streaming(簡(jiǎn)稱(chēng) HLS)是一個(gè)基于 HTTP 的視頻流協(xié)議,由 Apple 公司實(shí)現(xiàn),Mac OS 上的 QuickTime、Safari 以及 iOS 上的 Safari 都能很好的支持 HLS,高版本 Android 也增加了對(duì) HLS 的支持。一些常見(jiàn)的客戶端如:MPlayerX、VLC 也都支持 HLS 協(xié)議。

HLS 協(xié)議基于 HTTP,而一個(gè)提供 HLS 的服務(wù)器需要做兩件事:

編碼:以 H.263 格式對(duì)圖像進(jìn)行編碼,以 MP3 或者 HE-AAC 對(duì)聲音進(jìn)行編碼,最終打包到 MPEG-2 TS(Transport Stream)容器之中;分割:把編碼好的 TS 文件等長(zhǎng)切分成后綴為 ts 的小文件,并生成一個(gè) .m3u8 的純文本索引文件;瀏覽器使用的是 m3u8 文件。m3u8 跟音頻列表格式 m3u 很像,可以簡(jiǎn)單的認(rèn)為 m3u8 就是包含多個(gè) ts 文件的播放列表。播放器按順序逐個(gè)播放,全部放完再請(qǐng)求一下 m3u8 文件,獲得包含最新 ts 文件的播放列表繼續(xù)播,周而復(fù)始。整個(gè)直播過(guò)程就是依靠一個(gè)不斷更新的 m3u8 和一堆小的 ts 文件組成,m3u8 必須動(dòng)態(tài)更新,ts 可以走 cdn。一個(gè)典型的 m3u8 文件格式如下:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000
gear1/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=311111
gear2/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=484444
gear3/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=737777
gear4/prog_index.m3u8

可以看到 HLS 協(xié)議本質(zhì)還是一個(gè)個(gè)的 HTTP 請(qǐng)求 / 響應(yīng),所以適應(yīng)性很好,不會(huì)受到防火墻影響。但它也有一個(gè)致命的弱點(diǎn):延遲現(xiàn)象非常明顯。如果每個(gè) ts 按照 5 秒來(lái)切分,一個(gè) m3u8 放 6 個(gè) ts 索引,那么至少就會(huì)帶來(lái) 30 秒的延遲。如果減少每個(gè) ts 的長(zhǎng)度,減少 m3u8 中的索引數(shù),延時(shí)確實(shí)會(huì)減少,但會(huì)帶來(lái)更頻繁的緩沖,對(duì)服務(wù)端的請(qǐng)求壓力也會(huì)成倍增加。所以只能根據(jù)實(shí)際情況找到一個(gè)折中的點(diǎn)。

對(duì)于支持 HLS 的瀏覽器來(lái)說(shuō),直接這樣寫(xiě)就能播放了:

<video src=”./bipbopall.m3u8″ height=”300″ width=”400″  preload=”auto” autoplay=”autoplay” loop=”loop” webkit-playsinline=”true”></video>

注意:HLS 在 PC 端僅支持safari瀏覽器,類(lèi)似chrome瀏覽器使用HTML5 video

標(biāo)簽無(wú)法播放 m3u8 格式,可直接采用網(wǎng)上一些比較成熟的方案,如:sewise-player、MediaElement、videojs-contrib-hls、jwplayer。

2. Real Time Messaging Protocol

Real Time Messaging Protocol(簡(jiǎn)稱(chēng) RTMP)是 Macromedia 開(kāi)發(fā)的一套視頻直播協(xié)議,現(xiàn)在屬于 Adobe。這套方案需要搭建專(zhuān)門(mén)的 RTMP 流媒體服務(wù)如 Adobe Media Server,并且在瀏覽器中只能使用 Flash 實(shí)現(xiàn)播放器。它的實(shí)時(shí)性非常好,延遲很小,但無(wú)法支持移動(dòng)端 WEB 播放是它的硬傷。

雖然無(wú)法在iOS的H5頁(yè)面播放,但是對(duì)于iOS原生應(yīng)用是可以自己寫(xiě)解碼去解析的, RTMP 延遲低、實(shí)時(shí)性較好。瀏覽器端,HTML5 video

標(biāo)簽無(wú)法播放 RTMP 協(xié)議的視頻,可以通過(guò) video.js 來(lái)實(shí)現(xiàn)。

<link href=“http://vjs.zencdn.net/5.8.8/video-js.css” rel=“stylesheet”>
<video id=“example_video_1″ class=“video-js vjs-default-skin” controls preload=“auto” width=“640” height=“264” loop=“l(fā)oop” webkit-playsinline>
<source src=“rtmp://10.14.221.17:1935/rtmplive/home” type=‘rtmp/flv’>
</video>
<script src=“http://vjs.zencdn.net/5.8.8/video.js”></script>
<script>
videojs.options.flash.swf = ‘video.swf’;
videojs(‘example_video_1′).ready(function() {
this.play();
});
</script>

3. 視頻流協(xié)議HLS與RTMP對(duì)比

如何使用HTML5實(shí)現(xiàn)視頻直播功能

二、直播形式

目前直播展示形式,通常以YY直播、映客直播這種頁(yè)面居多,可以看到其結(jié)構(gòu)可以分成三層:

① 背景視頻層

② 關(guān)注、評(píng)論模塊

③ 點(diǎn)贊動(dòng)畫(huà)

而現(xiàn)行H5類(lèi)似直播頁(yè)面,實(shí)現(xiàn)技術(shù)難點(diǎn)不大,其可以通過(guò)實(shí)現(xiàn)方式分為:

① 底部視頻背景使用video視頻標(biāo)簽實(shí)現(xiàn)播放

② 關(guān)注、評(píng)論模塊利用 WebScoket 來(lái)實(shí)時(shí)發(fā)送和接收新的消息通過(guò)DOM 和 CSS3 實(shí)現(xiàn)

③ 點(diǎn)贊利用 CSS3 動(dòng)畫(huà)

了解完直播形式之后,接下來(lái)整體了解直播流程。

三、直播整體流程  

直播整體流程大致可分為:

視頻采集端:可以是電腦上的音視頻輸入設(shè)備、或手機(jī)端的攝像頭、或麥克風(fēng),目前以移動(dòng)端手機(jī)視頻為主。

如何使用HTML5實(shí)現(xiàn)視頻直播功能

直播流視頻服務(wù)端:一臺(tái)Nginx服務(wù)器,采集視頻錄制端傳輸?shù)囊曨l流(H264/ACC編碼),由服務(wù)器端進(jìn)行解析編碼,推送RTMP/HLS格式視頻流至視頻播放端。

視頻播放端:可以是電腦上的播放器(QuickTime Player、VLC),手機(jī)端的native播放器,還有就是 H5 的video標(biāo)簽等,目前還是以手機(jī)端的native播放器為主。

(web前端學(xué)習(xí)交流群:328058344 禁止閑聊,非喜勿進(jìn)!)

四、H5 錄制視頻

對(duì)于H5視頻錄制,可以使用強(qiáng)大的 webRTC (Web Real-Time Communication)是一個(gè)支持網(wǎng)頁(yè)瀏覽器進(jìn)行實(shí)時(shí)語(yǔ)音對(duì)話或視頻對(duì)話的技術(shù),缺點(diǎn)是只在 PC 的 Chrome 上支持較好,移動(dòng)端支持不太理想。

使用 webRTC 錄制視頻基本流程

① 調(diào)用 window.navigator.webkitGetUserMedia()

獲取用戶的PC攝像頭視頻數(shù)據(jù)。

② 將獲取到視頻流數(shù)據(jù)轉(zhuǎn)換成 window.webkitRTCPeerConnection

(一種視頻流數(shù)據(jù)格式)。

③ 利用 WebScoket

將視頻流數(shù)據(jù)傳輸?shù)椒?wù)端。

注意:

雖然Google一直在推WebRTC,目前已有不少成型的產(chǎn)品出現(xiàn),但是大部分移動(dòng)端的瀏覽器還不支持 webRTC(最新iOS 10.0也不支持),所以真正的視頻錄制還是要靠客戶端(iOS,Android)來(lái)實(shí)現(xiàn),效果會(huì)好一些。

如何使用HTML5實(shí)現(xiàn)視頻直播功能

WebRTC支持度

WebRTC支持度

iOS原生應(yīng)用調(diào)用攝像頭錄制視頻流程

① 音視頻的采集,利用AVCaptureSession和AVCaptureDevice可以采集到原始的音視頻數(shù)據(jù)流。

② 對(duì)視頻進(jìn)行H264編碼,對(duì)音頻進(jìn)行AAC編碼,在iOS中分別有已經(jīng)封裝好的編碼庫(kù)(x264編碼、faac編碼、ffmpeg編碼)來(lái)實(shí)現(xiàn)對(duì)音視頻的編碼。

③ 對(duì)編碼后的音、視頻數(shù)據(jù)進(jìn)行組裝封包。

④ 建立RTMP連接并上推到服務(wù)端。

    如何使用HTML5實(shí)現(xiàn)視頻直播功能五、搭建Ng

五、搭建Nginx+Rtmp直播流服務(wù)

安裝nginx、nginx-rtmp-module

① 先clone nginx項(xiàng)目到本地:

brew tap homebrew/nginx

② 執(zhí)行安裝nginx-rtmp-module

brew install nginx-full –with-rtmp-module

2. nginx.conf配置文件,配置RTMP、HLS

查找到nginx.conf配置文件(路徑/usr/local/etc/nginx/nginx.conf),配置RTMP、HLS。

① 在http節(jié)點(diǎn)之前添加 rtmp 的配置內(nèi)容:

    如何使用HTML5實(shí)現(xiàn)視頻直播功能

② 在http中添加 hls 的配置

    如何使用HTML5實(shí)現(xiàn)視頻直播功能

3. 重啟nginx服務(wù)

重啟nginx服務(wù),瀏覽器中輸入 http://localhost:8080,是否出現(xiàn)歡迎界面確定nginx重啟成功。

nginx -s reload

六、直播流轉(zhuǎn)換格式、編碼推流

當(dāng)服務(wù)器端接收到采集視頻錄制端傳輸過(guò)來(lái)的視頻流時(shí),需要對(duì)其進(jìn)行解析編碼,推送RTMP/HLS格式視頻流至視頻播放端。通常使用的常見(jiàn)編碼庫(kù)方案,如x264編碼、faac編碼、ffmpeg編碼等。鑒于 FFmpeg 工具集合了多種音頻、視頻格式編碼,我們可以優(yōu)先選用FFmpeg進(jìn)行轉(zhuǎn)換格式、編碼推流。

1.安裝 FFmpeg 工具

brew install ffmpeg

2.推流MP4文件

視頻文件地址:/Users/gao/Desktop/video/test.mp4

推流拉流地址:rtmp://localhost:1935/rtmplive/home,rtmp://localhost:1935/rtmplive/home

//RTMP 協(xié)議流
ffmpeg -re -i /Users/gao/Desktop/video/test.mp4 -vcodec libx264 -acodec aac -f flv rtmp://10.14.221.17:1935/rtmplive/home
//HLS 協(xié)議流
ffmpeg -re -i /Users/gao/Desktop/video/test.mp4 -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -q 10 rtmp://10.14.221.17:1935/hls/test

注意:

當(dāng)我們進(jìn)行推流之后,可以安裝VLC、ffplay(支持rtmp協(xié)議的視頻播放器)本地拉流進(jìn)行演示

3.FFmpeg推流命令

① 視頻文件進(jìn)行直播

ffmpeg -re -i /Users/gao/Desktop/video/test.mp4 -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -q 10 rtmp://192.168.1.101:1935/hls/test
ffmpeg -re -i /Users/gao/Desktop/video/test.mp4 -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -q 10 rtmp://10.14.221.17:1935/hls/test

② 推流攝像頭+桌面+麥克風(fēng)錄制進(jìn)行直播

ffmpeg -f avfoundation -framerate 30 -i “1:0″ \-f avfoundation -framerate 30 -video_size 640x480 -i “0” \-c:v libx264 -preset ultrafast \-filter_complex ‘overlay=main_w-overlay_w-10:main_h-overlay_h-10′ -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://192.168.1.101:1935/hls/test

更多命令,請(qǐng)參考:

FFmpeg處理RTMP流媒體的命令大全

FFmpeg常用推流命令

七、H5 直播視頻播放

移動(dòng)端iOS和 Android 都天然支持HLS協(xié)議,做好視頻采集端、視頻流推流服務(wù)之后,便可以直接在H5頁(yè)面配置 video 標(biāo)簽播放直播視頻。

<video controls preload=“auto” autoplay=“autoplay” loop=“l(fā)oop” webkit-playsinline>
<source src=“http://10.14.221.8/hls/test.m3u8″ type=“application/vnd.apple.mpegurl” />
<p class=“warning”>Your browser does not support HTML5 video.</p>
</video>

八、總結(jié)

本文從視頻采集上傳,服務(wù)器處理視頻推流,以及H5頁(yè)面播放直播視頻一整套流程,具體闡述了直播實(shí)現(xiàn)原理,實(shí)現(xiàn)過(guò)程中會(huì)遇到很多性能優(yōu)化問(wèn)題。

① H5 HLS 限制必須是H264+AAC編碼。

② H5 HLS 播放卡頓問(wèn)題,server 端可以做好分片策略,將 ts 文件放在 CDN 上,前端可盡量做到 DNS 緩存等。

③ H5 直播為了達(dá)到更好的實(shí)時(shí)互動(dòng),也可以采用RTMP協(xié)議,通過(guò)video.js 實(shí)現(xiàn)播放。

上述就是小編為大家分享的如何使用HTML5實(shí)現(xiàn)視頻直播功能了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享題目:如何使用HTML5實(shí)現(xiàn)視頻直播功能
網(wǎng)站網(wǎng)址:http://bm7419.com/article12/igosdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、做網(wǎng)站、搜索引擎優(yōu)化、虛擬主機(jī)、網(wǎng)站改版、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司