《rtmp流媒体协议.docx》由会员分享,可在线阅读,更多相关《rtmp流媒体协议.docx(20页珍藏版)》请在第一文库网上搜索。
1、H5视频直播扫盲1H5究竟能不能做视频直播?固然可以,H5火了这样久,涵盖了各个方面的技术。对于视频录制,可以使用强大的WebRTC(WebReaI-TimeCommuication)是一种支持网页浏览器进行实时语音对话或视频对话的技术,缺陷是只在PC的ChrOme上支持较好,移动端支持不太抱负。对于视频播放,可以使用H1S(HTTP1iveStreaming)合同播放直播流,i。S和。ndroid都天然支持这种合同,配备简朴,直接使用vide0标签即可。WebRTC兼容性:IE*EdgeFirefoxChrome1314video标签播放hIS合同视频:3Yourbrowserdoesnot
2、supportHTM15video.42究竟什么是H1S合同?简朴讲就是把整个流提成一种个小时,基于HTTP的文献来下载,每次只下载某些,前面提到了用于H5播放直播视频时引入的一种m3u8的文献,这个文献就是基于H1S合同,寄存视频流元数据的文献。每一种.m3u8文献,分别相应若干个和文献,这些ts文献才是真正寄存视频的数据3u8文献只是寄存了某些ts文献的配备信息和有关途径,当视频播放时,.m3u8是动态变化的Mdeo标签会解析这个文献,并找到相应的ts文献来播放,因此一般为了加迅速度,m3u8放在Web服务器上Js文献放在Cdn上。m3u8文献,其实就是以UTF-8编码的m3u文献,这个文
3、献自身不能播放,只是寄存了播放信息的文本文献:1 #EXTM3Um3u文献头2 #EXT-X-MEDIA-SEQUENCE第一种TS分片的序列号每个分片TS的最大的时长-#EXT-X-TARGETDURATIONf#EXT-X-END1ISTm3u8文献结束符(#EXTINF指定每个媒体段(ts澳持续时间(秒),仅对其背面的UR1有於ts文献:mystream-9.tsmystream-10.ts7mystream-12.tsmystream-11.ts mystream-12.ts mystream-13.ts二mystream.m3u8Stest.htm1mystream-10.tsH1S
4、的祈求流程是:1http祈求m3u8的ur1。2服务端返回一种m3u8的播放列表,这个播放列表是实时更新时,一般一次给出5段数据的ur1。3客户端解析m3u8的播放列表,再按序祈求每一段的UrI,获取ts数据流。简朴流程:配置信息请求HHHvideo2.m383H1S直播延时我们懂得Hs合同是将直播流提成一段一段的小段视频去下载播放时,因此假设列表里面的涉及5个tS文献,每个TS文献涉及5秒的视频内容,那么整体的延迟就是25秒。由于当你看到这些视频时,主播已经将视频录制好上传上去了,因此时这样产生时延迟。固然可以缩短列表的长度和单个ts文献的大小来减少延迟,极致来说可以缩减列表长度为1,并且t
5、s的时长为Is,但是这样会导致祈求次数增长,增大服务器压力,当网速慢时回导致更多的缓冲,因此苹果官方推荐的ts时长时1Os,因此这样就会大改有3Os的延迟。参照资料:4视频直播的整个流程是什么?当视频直播可大体分为:1视频录制端:一般是电脑上的音视频输入设备或者手机端的摄像头或者麦克风,目前以移动端的手机视频为主。2视频播放端:可以是电脑上的播放器,手机端的native播放器,尚有就是h5的Vide。标签等,目前还是已手机端的nQtive播放器为主。3视频服务器端:一般是一台nginx服务器,用来接受视频录制端提供的视频源,同步提供应视频播放端流服务。简朴流程:nginx手机摄像头5如何进行音
6、视频采集?当一方面明确几种概念:将某个视频格视频编码:所谓视频编码就是指通过特定的压缩技术,式的文献转换成另一种视频格式文献的方式,我们使用的iph。ne录制的视频,必须要通过编码,上传,解码,才干真正的在顽客端的播放器里播放。编解码原则:视频流传播中最为重要的编解码原则有国际电联的H.261、H.263sH264,其中H1S合同支持H.264格式的编码。音频编码:同视频编码类似,将原始的音频流按照一定的原则进行编码,上传,解码,同步在播放器里播放,固然音频也有许多编码原则,例如PCM编码,WMA编码,AAC编码等等,这里我们H1S合同支持的音频编码方式是AAC编码。下面将运用ios上的摄像头
7、,进行音视频的数据采集,重要分为如下几种环节:1音视频的采集Jos中,运用AVCQptureSession和AVCQPtUreDevice可以采集到原始的音视频数据流。2对视频进行H264编码,对音频进行AAC编码,在i。s中分别有已经封装好的编码库来实现对音视频的编码。3对编码后的音、视频数据进行组装封包;4建立RTMP连接并上推到服务端。PS:由于编码库大多使用C语言编写,需要自己使用时编译,对于ios,可以使用已经编译好的编码库。x264编码:faC编码:ffmpeg编码:有关如果想给视频增长某些特殊效果,例如增长滤镜等,一般在编码前给使用滤镜库,但是这样也会导致某些耗时,导致上传视频数
8、据有一定延时。简朴流程:iOS摄像头AVCaptureSession原始视频流2rtmnginx服务器6前面提到的ffmpeg是什么?和之前的x264同样,ffmpeg其实也是一套编码库,类似时尚有XVid,Xvid是基于MPEG4合同的;编解码器,x264是基于H.264合同的编码器,ffmpeg集合了多种音频,视频编解码合同,通过设立参数可以完毕基于MPEG4zH.264等合同的编解码,dem。这里使用的是X264编码库。7什么是RTMP?Rea1TimeMessagingProtocoI(简称RTMP)是Macromedia开发的一套视频直播合同,目前属于ACIobe。和H1S同样都可以
9、应用于视频直播,区别是RTMP基于f1ash无法在ios的浏览器里播放,但是实时性比H1S要好。因此一般使用这种合同来上传视频流,也就是视频流推送到服务器。这里列举一下his和什mp对比:协议原理延时优点使用场景RTMP长链接tcp每个时刻的数据收到后立刻发送2s延时低即时互动H1S短链接http集合一段时间数据生成ts切片文件更新m3u8文件10s-30s跨平台h5直播简所谓推流,就是将我们已经编码好的音视频数据发往视频流服务器中,一般常用的是使用什mp推流,可以使用第三方库Iibrtmp-QS进行推流JiRtmp封装了某些核心的QPi供使用者调用,如果觉得麻烦,可以使用现成的i。s视频推流
10、Sdk,也是基于什mP时,9推流服务器搭建简简朴的推流服务器搭建,由于我们上传的视频流都是基于rtmp合同时,因此服务器也必须要支持mp才行,大概需要如下几种环节:1安装一台nginx服务器。2安装nginxf1rtmp扩展,目前使用比较多的是3配备nginx的COnf文献:1rtmp2SerVer3Iisten1935;#监听的端口chunk_size40OO;app1icationh1s#iImP推流祈求途径Iiveon;hison;h1s_pathusr1oca1varwwwh1s;h1s_fragment5s;)567891O111213141)16174重启nginx,将rtmp的推
11、流地址写为rtmp:/ip:1935/h1s/mystrem,其中h1s_poth表达生成的.m3u8和tS文献所寄存的地址,h1sjragment表达切片时长,mysteQm表达一种实例,即将来要生成的文献名可以先自己随便设立一种。更多配备可以参照:根据以上环节基本上已经实现了一种支持rtmp的视频服务器了。1O在htm15页面进行播放直播视频?简朴来说,直接使用Vide。标签即可播放Hs合同的直播视频:14 YoUrbrowserdoesnotsupportHTM15需要注意的是,给VideO标签增长Webkit-PIaySin1ine属性,这个属性是为了让VideO视频在ios的UiWe
12、bview里面可以不全屏播放,默认i。s会全屏播放视频,需要给UiWebVieW设立aIIOws1n1ieMediaPIayback=YESo业界比较成熟的Videojs,可以根据不同平台选择不同时方略,例如ios使用Video标签,PC使用f1。Sh等。11坑点总结简根据以上环节,笔者写了一种dem。,从实现ios视频录制,采集,上传,nginX服务器下发直播流,h5页面播放直播视频者一整套流程,总结出如下几点比较坑的地方:1在使用AVCaptureSession进行采集视频时,需要实现AVCaptureVideoDataOutputSamp1eBufferDe1egcIte合同,同步在-(
13、VOid)CaPtUreOutput:(AVCaptureOutput*)captureOutputdidOtputSampIeBuffer:(CMSQmPIeBUfferRef)sQmpIeBufferfromConection:(AVCaptureConnectio*)conection捕获至IJ视频流,要注意的是didutputSamp1eBffer这个措施不是didDropSamp1eBuffer措施,后者只会触发一次,当时开始写的是didDropSamp1eBuffer措施,差了半天才发现措施调用错了。2在使用rtmp推流时,rmtp地址要以什mp:/开头,ip地址要写实际iP地址,不要写成IOca1host,同步要加上端标语,由于手机端上传时是无法辨认IOCa1hoSt的。这里后续会补充上某些坑点,有时需要贴代码,这里先列这样多。CIemo地址:参照资料:结尾打个广告:移动端日记工具:ReactNative下拉刷新组件:欢迎使用!原创文章转载请注明:转载自AIIoyTeam:h5-rtmp1serttitiehere videoid-,my-p1yercIass=video-jscontroIspre1oad=,uto