中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

HTML5如何實(shí)現(xiàn)視頻直播功能思路-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)HTML5如何實(shí)現(xiàn)視頻直播功能思路的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比洛川網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式洛川網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋洛川地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。

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

1. HTTP Live Streaming

HTTP Live Streaming(簡(jiǎn)稱 HLS)是一個(gè)基于 HTTP 的視頻流協(xié)議,由 Apple 公司實(shí)現(xiàn),Mac OS 上的 QuickTime、Safari 以及 iOS 上的 Safari 都能很好的支持 HLS,高版本 Android 也增加了對(duì) HLS 的支持。一些常見的客戶端如: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ō),直接這樣寫就能播放了:

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

注意:HLS 在 PC 端僅支持safari瀏覽器,類似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)稱 RTMP)是 Macromedia 開發(fā)的一套視頻直播協(xié)議,現(xiàn)在屬于 Adobe。這套方案需要搭建專門的 RTMP 流媒體服務(wù)如 Adobe Media Server,并且在瀏覽器中只能使用 Flash 實(shí)現(xiàn)播放器。它的實(shí)時(shí)性非常好,延遲很小,但無(wú)法支持移動(dòng)端 WEB 播放是它的硬傷。

雖然無(wú)法在iOS的H5頁(yè)面播放,但是對(duì)于iOS原生應(yīng)用是可以自己寫解碼去解析的, 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&Prime; 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=&lsquo;rtmp/flv&rsquo;>
</video>
<script src=“http://vjs.zencdn.net/5.8.8/video.js”></script>
<script>
videojs.options.flash.swf = &lsquo;video.swf&rsquo;;
videojs(&lsquo;example_video_1&prime;).ready(function() {
this.play();
});
</script>

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

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

二、直播形式

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

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

① 背景視頻層

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

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

而現(xiàn)行H5類似直播頁(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)畫

了解完直播形式之后,接下來(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)?。?/p>

四、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 &ndash;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格式視頻流至視頻播放端。通常使用的常見編碼庫(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&Prime; \-f avfoundation -framerate 30 -video_size 640x480 -i “0” \-c:v libx264 -preset ultrafast \-filter_complex &lsquo;overlay=main_w-overlay_w-10:main_h-overlay_h-10&prime; -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&Prime; 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)播放。

感謝各位的閱讀!關(guān)于“HTML5如何實(shí)現(xiàn)視頻直播功能思路”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

網(wǎng)頁(yè)標(biāo)題:HTML5如何實(shí)現(xiàn)視頻直播功能思路-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)于:http://www.rwnh.cn/article26/pcgjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)動(dòng)態(tài)網(wǎng)站、靜態(tài)網(wǎng)站微信公眾號(hào)、搜索引擎優(yōu)化

廣告

聲明:本網(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)

微信小程序開發(fā)
岳阳县| 武定县| 申扎县| 慈利县| 寿宁县| 泊头市| 华安县| 青铜峡市| 万安县| 彰武县| 东城区| 郓城县| 泗阳县| 永宁县| 沭阳县| 建湖县| 望江县| 甘孜县| 山西省| 无为县| 新郑市| 泰兴市| 喜德县| 临西县| 宁强县| 独山县| 陆丰市| 马边| 正安县| 彭州市| 周口市| 新沂市| 麻城市| 贵南县| 永德县| 泉州市| 新乡县| 永安市| 泽州县| 莒南县| 咸阳市|