rtmp流媒體協(xié)議書(shū)范本_第1頁(yè)
rtmp流媒體協(xié)議書(shū)范本_第2頁(yè)
rtmp流媒體協(xié)議書(shū)范本_第3頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、H5視頻直播掃盲1 H5到底能不能做視頻直播?當(dāng)然可以,H5火了這么久,涵蓋了各個(gè)方面的技術(shù)。對(duì)于視頻錄制,可以使用強(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)端支持不太理想。IE*EdgeFirefoxChrome29o45 H48a949o對(duì)于視頻播放,可以使用HLS(HTTP Live Streaming)協(xié)議播 放直播流,ios和android都天然支持這種協(xié)議,配置簡(jiǎn)單, 直接使用video標(biāo)簽即可。webRT(兼 容性:13Sal46950vid

2、eo標(biāo)簽播放his協(xié)議視頻:1<source src="7:8080/hls/mystream.m3u8" type="applicati2 />3<p class="warning">Your browser does not support HTML5 video.</p4</video>2到底什么是HLS協(xié)議?簡(jiǎn)單講就是把整個(gè)流分成一個(gè)個(gè)小的,基于 HTT啲文件來(lái)下 載,每次只下載一些,前面提到了用于 H5播放直播視頻時(shí)引 入的一個(gè).m3u8的文件,這個(gè)文件就是基于 HLS協(xié)議

3、,存放視 頻流元數(shù)據(jù)的文件。每一個(gè).m3u8文件,分別對(duì)應(yīng)若干個(gè)ts文件,這些ts文件才 是真正存放視頻的數(shù)據(jù),m3u8文件只是存放了一些ts文件的 配置信息和相關(guān)路徑,當(dāng)視頻播放時(shí),.m3u8是動(dòng)態(tài)改變的,video 標(biāo)簽會(huì)解析這個(gè)文件,并找到對(duì)應(yīng)的 ts 文件來(lái)播放, 所以一般為了加快速度,.m3u8放在web服務(wù)器上,ts文件放 在cdn上。.m3u8文件,其實(shí)就是以UTF-8編碼的m3i文件,這個(gè)文件本 身不能播放,只是存放了播放信息的文本文件:m3u文件頭第一個(gè)TS分片的序列號(hào)每個(gè)分片TS勺最大的時(shí)長(zhǎng)是否允許 cachem3u文件結(jié)束符指定每個(gè)媒體段 (ts) 的持續(xù)#EXTM3U1

4、#EXT-X-MEDIA-SEQUENCE2#EXT-X-TARGETDURATION3#EXT-X-ALLOW-CACHE4#EXT-X-ENDLIST5#EXTINF67 (秒),僅對(duì)其后面的URI有效mystream-12.tsts文件:my stream-10. tsHLS的請(qǐng)求流程是:1 http請(qǐng)求m3u8的url。2 服務(wù)端返回一個(gè) m3u8勺播放列 表,這個(gè)播放列表是實(shí)時(shí)更新的,一般一次給出5段數(shù)據(jù)的url。3客戶端解析m3u8的播放列表,再按序請(qǐng)求每一段的 url,獲取ts數(shù)據(jù)流。簡(jiǎn)單流程:請(qǐng)求video3 HLS直播延時(shí)我們知道his協(xié)議是將直播流分成一段一段的小段視頻去下

5、 載播放的,所以假設(shè)列表里面的包含5個(gè)ts文件,每個(gè)TS文件包含5秒的視頻容,那么整體的延遲就是25秒。因?yàn)楫?dāng)你看到這些視頻時(shí),主播已經(jīng)將視頻錄制好上傳上去了,所以 時(shí)這樣產(chǎn)生的延遲。當(dāng)然可以縮短列表的長(zhǎng)度和單個(gè)ts文件的大小來(lái)降低延遲,極致來(lái)說(shuō)可以縮減列表長(zhǎng)度為1,并且ts的時(shí)長(zhǎng)為1s,但是這樣會(huì)造成請(qǐng)求次數(shù)增加,增大服務(wù)器 壓力,當(dāng)網(wǎng)速慢時(shí)回造成更多的緩沖,所以蘋(píng)果官方推薦的ts 時(shí)長(zhǎng)時(shí) 10s ,所以這樣就會(huì)大改有 30s 的延遲。參考資料: https:/developer.apple./library/ios/documentation/ NetworkingInternet/Con

6、ceptual/StreamingMediaGuide/F requentlyAskedQuestions/FrequentlyAskedQuestions.ht ml4 視頻直播的整個(gè)流程是什么?當(dāng)視頻直播可大致分為:1 視頻錄制端: 一般是電腦上的音視頻輸入設(shè)備或者手機(jī)端 的攝像頭或者麥克風(fēng),目前以移動(dòng)端的手機(jī)視頻為主。2 視頻播放端:可以是電腦上的播放器,手機(jī)端的 native 播 放器,還有就是h5的video標(biāo)簽等,目前還是已手機(jī)端的 native 播放器為主。3 視頻服務(wù)器端:一般是一臺(tái) nginx 服務(wù)器,用來(lái)接受視頻 錄制端提供的視頻源,同時(shí)提供給視頻播放端流服務(wù)。 簡(jiǎn)單流程:

7、nginx手機(jī)攝像頭5怎樣進(jìn)行音視頻采集?當(dāng)首先明確幾個(gè)概念:我們視頻編碼:所謂視頻編碼就是指通過(guò)特定的壓縮技術(shù),將某 個(gè)視頻格式的文件轉(zhuǎn)換成另一種視頻格式文件的方式, 使用的iphone錄制的視頻,必須要經(jīng)過(guò)編碼,上傳,解碼, 才能真正的在用戶端的播放器里播放。編解碼標(biāo)準(zhǔn): 視頻流傳輸中最為重要的編解碼標(biāo)準(zhǔn)有國(guó)際電 聯(lián)的H.261、H.263、H.264,其中HLS協(xié)議支持H.264格式的 編碼。音頻編碼:同視頻編碼類似,將原始的音頻流按照一 定的標(biāo)準(zhǔn)進(jìn)行編碼,上傳,解碼,同時(shí)在播放器里播放,當(dāng) 然音頻也有許多編碼標(biāo)準(zhǔn),例如PCM編碼,WM編碼,AA(編碼等等,這里我們HLS協(xié)議支持的音頻編

8、碼方式是AAC編碼。下面將利用 ios 上的攝像頭,進(jìn)行音視頻的數(shù)據(jù)采集,主要 分為以下幾個(gè)步驟:1 音視頻的采集, ios 中,利用 AVCaptureSession 和 AVCaptureDevice 可以采集到原始的音視頻數(shù)據(jù)流。 2 對(duì)視 頻進(jìn)行H264編碼,對(duì)音頻進(jìn)行AAC編碼,在ios中分別有已經(jīng) 封裝好的編碼庫(kù)來(lái)實(shí)現(xiàn)對(duì)音視頻的編碼。 3 對(duì)編碼后的音、 視頻數(shù)據(jù)進(jìn)行組裝封包;4建立RTM連接并上推到服務(wù)端。ps:由于編碼庫(kù)大多使用c語(yǔ)言編寫(xiě),需要自己使用時(shí)編譯, 對(duì)于 ios ,可以使用已經(jīng)編譯好的編碼庫(kù)。x264 編碼:https:/github./kewlbear/x264-

9、iosfaac 編碼: https:/github./fflydev/faac-ios-buildffmpeg 編碼:https:/github./kewlbear/FFmpeg-iOS-build-script關(guān)于如果想給視頻增加一些特殊效果,例如增加濾鏡等,一 般在編碼前給使用濾鏡庫(kù),但是這樣也會(huì)造成一些耗時(shí),導(dǎo) 致上傳視頻數(shù)據(jù)有一定延時(shí)。簡(jiǎn)單流程:1 iOSAVCaptureSession原始視X261攝像頭F頻流rtmnginx服務(wù)器iOS麥克風(fēng)AVCaptureSession原始音faa頻流6前面提到的ffmpeg是什么?和之前的x264 樣,ffmpeg其實(shí)也是一套編碼庫(kù),類似的還

10、 有Xvid,Xvid是基于MPEG!協(xié)議的編解碼器,x264是基于 H.264協(xié)議的編碼器,ffmpeg集合了各種音頻,視頻編解碼 協(xié)議,通過(guò)設(shè)置參數(shù)可以完成基于MPEG4,H.264等協(xié)議的編解碼,demo這里使用的是x264編碼庫(kù)。7什么是RTMPReal Time Messaging Protocol (簡(jiǎn)稱 RTMF)是 Macromedia 開(kāi)發(fā)的一套視頻直播協(xié)議,現(xiàn)在屬于Adobe。和HLS-樣都可以應(yīng)用于視頻直播,區(qū)別是 RTM基于flash無(wú)法在ios的瀏 覽器里播放,但是實(shí)時(shí)性比HLS要好。所以一般使用這種協(xié)議來(lái)上傳視頻流,也就是視頻流推送到服務(wù)器。這里列舉一下hls和rt

11、mp對(duì)比:協(xié)議原理延時(shí)優(yōu)點(diǎn)使用場(chǎng)景;RTMP長(zhǎng)鏈接 tcp每個(gè)時(shí)刻 的數(shù)據(jù)收 到后立刻發(fā)送2s延時(shí)低即時(shí)互動(dòng)HLS短鏈接 http集合一段1時(shí)間數(shù)據(jù) 生成也切片文件更新m3u8文件10s-30s跨平臺(tái)h5直播-8推流簡(jiǎn)所謂推流,就是將我們已經(jīng)編碼好的音視頻數(shù)據(jù)發(fā)往視頻 流服務(wù)器中,一般常用的是使用rtmp推流,可以使用第三方庫(kù)librtmp-iOS 進(jìn)行推流,librtmp圭寸裝了一些核心的 api供 使用者調(diào)用,如果覺(jué)得麻煩,可以使用現(xiàn)成的ios視頻推流sdk,也是基于rtmp的,https:/github./runner365/LiveVideoCoreSDK9推流服務(wù)器搭建簡(jiǎn)簡(jiǎn)單的推流服

12、務(wù)器搭建,由于我們上傳的視頻流都是基于 rtmp 協(xié)議的,所以服務(wù)器也必須要支持 rtmp 才行,大概需要 以下幾個(gè)步驟:1 安裝一臺(tái) nginx 服務(wù)器。2 安裝 nginx 的 rtmp 擴(kuò)展,目前使用比較多的是 https:/github./arut/nginx-rtmp-module3 配置 nginx 的 conf 文件:rtmp 1server 23 listen 1935;#監(jiān)聽(tīng)的4 端口56 chunk_size 4000;789application hls 10 #rtmp 推流請(qǐng)求路徑live on; hls on; hls_pathhls_fragment111213

13、14/usr/local/var/hls;15165s;17 4 重啟 nginx ,將 rtmp 的推流地址寫(xiě)為 rtmp:/ip:1935/hls/mystream ,其中 hls_path 表示生成 的.m3u8和ts文件所存放的地址, hls_fragment表示切片時(shí) 長(zhǎng),mysteam表示一個(gè)實(shí)例,即將來(lái)要生成的文件名可以先 自己隨便設(shè)置一個(gè)。更多配置可以參考: https:/github./arut/nginx-rtmp-module/wiki/ 根據(jù)以上步驟基本上已經(jīng)實(shí)現(xiàn)了一個(gè)支持 rtmp 的視頻服務(wù) 器了。10在html5頁(yè)面進(jìn)行播放直播視頻? 簡(jiǎn)單來(lái)說(shuō),直接使用 vide

14、o 標(biāo)簽即可播放 hls 協(xié)議的直播視 頻:1 <video autoplay webkit-playsinline><source src="7:8080/hls/mystream.m3u8" type="applicati2 />3<p class="warning">Your browser does not support HTML5 video.</p4</video>需要注意的是,給 video 標(biāo)簽增加 webkit-playsinline 屬性, 這個(gè)屬性

15、是為了讓 video視頻在ios的uiwebview里面可以不 全屏播放,默認(rèn) ios 會(huì)全屏播放視頻,需要給 uiwebview 設(shè)置 allowsInlineMediaPlayback = YES 業(yè)界比較成熟的 videojs ,可以根據(jù)不同平臺(tái)選擇不同的策略,例如 ios 使用 video標(biāo)簽,pc使用flash等。11 坑點(diǎn)總結(jié)簡(jiǎn)根據(jù)以上步驟,筆者寫(xiě)了一個(gè) demo從實(shí)現(xiàn)ios視頻錄制, 采集,上傳,nginx服務(wù)器下發(fā)直播流,h5頁(yè)面播放直播視 頻者一整套流程,總結(jié)出以下幾點(diǎn)比較坑的地方:1在使用AVCaptureSession進(jìn)行采集視頻時(shí),需要實(shí)現(xiàn) AVCaptureVideo

16、DataOutputSampleBufferDelegate 協(xié)議,同 時(shí)在-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuff er fromConnection:(AVCaptureConnection connection 捕獲到視頻流,要注意的是 didOutputSampleBuffer 這個(gè)方 法不是didDropSampleBuffer方法,后者只會(huì)觸發(fā)一次,當(dāng) 時(shí)開(kāi)始寫(xiě)的是didDropSampleBuffer方法,差了半

17、天才發(fā)現(xiàn) 方法調(diào)用錯(cuò)了。2在使用rtmp推流時(shí),rmtp地址要以rtmp:/ 開(kāi)頭,ip地址 要寫(xiě)實(shí)際ip地址,不要寫(xiě)成localhost ,同時(shí)要加上端口號(hào), 因?yàn)槭謾C(jī)端上傳時(shí)是無(wú)法識(shí)別 localhost的。這里后續(xù)會(huì)補(bǔ)充上一些坑點(diǎn),有的需要貼代碼,這里先列這 么多。demo地址:https:/github./lvming6816077/LMVideoTest/ 參考資料:.nihaoshijie./index.php/archives/615結(jié)尾打個(gè)廣告: 移動(dòng)端日志工具:https:/github./lvming6816077/MLoggerReactNative下拉刷新組件: htt

18、ps:/github./lvming6816077/react-native-pullRefr eshScrollView歡迎使用!原創(chuàng)文章請(qǐng)注明:自 AlloyTeam : .alloyteam./2016/05/h5-camera-literacy/h5-rtmp<head>vmeta charset="UTF-8"><title> In sert title here</title><li nk href="vjs.ze ncdn.n et/5.19/video-js. min. css" rel=&

19、quot;stylesheet"><script src="vjs.ze ncdn.n et/5.19/video.mi n.js"></script></head><body><videoid="my-player"class="video-js"con trolspreload="auto"poster="vjs.ze ncdn.n et/v/ocea ns.p ng"data-setup=''><source src='rtmp:/live.hkstv.hk.lxd ns./live/hks' type='rtmp/flv'/></p></video><script type="text/javascript">var player = videojs('my-player');var opti ons = ;var player = videojs('my-player', o

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論