rtmp流媒体协议书范本_第1页
rtmp流媒体协议书范本_第2页
rtmp流媒体协议书范本_第3页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、H5视频直播扫盲1 H5到底能不能做视频直播?当然可以,H5火了这么久,涵盖了各个方面的技术。对于视频录制,可以使用强大的 webRTC( Web Real-Time Communication )是一个支持网页浏览器进行实时语音对话 或视频对话的技术,缺点是只在PC的chrome上支持较好,移动端支持不太理想。IE*EdgeFirefoxChrome29o45 H48a949o对于视频播放,可以使用HLS(HTTP Live Streaming)协议播 放直播流,ios和android都天然支持这种协议,配置简单, 直接使用video标签即可。webRT(兼 容性:13Sal46950vid

2、eo标签播放his协议视频: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协议?简单讲就是把整个流分成一个个小的,基于 HTT啲文件来下 载,每次只下载一些,前面提到了用于 H5播放直播视频时引 入的一个.m3u8的文件,这个文件就是基于 HLS协议

3、,存放视 频流元数据的文件。每一个.m3u8文件,分别对应若干个ts文件,这些ts文件才 是真正存放视频的数据,m3u8文件只是存放了一些ts文件的 配置信息和相关路径,当视频播放时,.m3u8是动态改变的,video 标签会解析这个文件,并找到对应的 ts 文件来播放, 所以一般为了加快速度,.m3u8放在web服务器上,ts文件放 在cdn上。.m3u8文件,其实就是以UTF-8编码的m3i文件,这个文件本 身不能播放,只是存放了播放信息的文本文件:m3u文件头第一个TS分片的序列号每个分片TS勺最大的时长是否允许 cachem3u文件结束符指定每个媒体段 (ts) 的持续#EXTM3U1

4、#EXT-X-MEDIA-SEQUENCE2#EXT-X-TARGETDURATION3#EXT-X-ALLOW-CACHE4#EXT-X-ENDLIST5#EXTINF67 (秒),仅对其后面的URI有效mystream-12.tsts文件:my stream-10. tsHLS的请求流程是:1 http请求m3u8的url。2 服务端返回一个 m3u8勺播放列 表,这个播放列表是实时更新的,一般一次给出5段数据的url。3客户端解析m3u8的播放列表,再按序请求每一段的 url,获取ts数据流。简单流程:请求video3 HLS直播延时我们知道his协议是将直播流分成一段一段的小段视频去下

5、 载播放的,所以假设列表里面的包含5个ts文件,每个TS文件包含5秒的视频容,那么整体的延迟就是25秒。因为当你看到这些视频时,主播已经将视频录制好上传上去了,所以 时这样产生的延迟。当然可以缩短列表的长度和单个ts文件的大小来降低延迟,极致来说可以缩减列表长度为1,并且ts的时长为1s,但是这样会造成请求次数增加,增大服务器 压力,当网速慢时回造成更多的缓冲,所以苹果官方推荐的ts 时长时 10s ,所以这样就会大改有 30s 的延迟。参考资料: https:/developer.apple./library/ios/documentation/ NetworkingInternet/Con

6、ceptual/StreamingMediaGuide/F requentlyAskedQuestions/FrequentlyAskedQuestions.ht ml4 视频直播的整个流程是什么?当视频直播可大致分为:1 视频录制端: 一般是电脑上的音视频输入设备或者手机端 的摄像头或者麦克风,目前以移动端的手机视频为主。2 视频播放端:可以是电脑上的播放器,手机端的 native 播 放器,还有就是h5的video标签等,目前还是已手机端的 native 播放器为主。3 视频服务器端:一般是一台 nginx 服务器,用来接受视频 录制端提供的视频源,同时提供给视频播放端流服务。 简单流程:

7、nginx手机摄像头5怎样进行音视频采集?当首先明确几个概念:我们视频编码:所谓视频编码就是指通过特定的压缩技术,将某 个视频格式的文件转换成另一种视频格式文件的方式, 使用的iphone录制的视频,必须要经过编码,上传,解码, 才能真正的在用户端的播放器里播放。编解码标准: 视频流传输中最为重要的编解码标准有国际电 联的H.261、H.263、H.264,其中HLS协议支持H.264格式的 编码。音频编码:同视频编码类似,将原始的音频流按照一 定的标准进行编码,上传,解码,同时在播放器里播放,当 然音频也有许多编码标准,例如PCM编码,WM編码,AA(编码等等,这里我们HLS协议支持的音频编

8、码方式是AAC编码。下面将利用 ios 上的摄像头,进行音视频的数据采集,主要 分为以下几个步骤:1 音视频的采集, ios 中,利用 AVCaptureSession 和 AVCaptureDevice 可以采集到原始的音视频数据流。 2 对视 频进行H264编码,对音频进行AAC编码,在ios中分别有已经 封装好的编码库来实现对音视频的编码。 3 对编码后的音、 视频数据进行组装封包;4建立RTM连接并上推到服务端。ps:由于编码库大多使用c语言编写,需要自己使用时编译, 对于 ios ,可以使用已经编译好的编码库。x264 编码:https:/github./kewlbear/x264-

9、iosfaac 编码: https:/github./fflydev/faac-ios-buildffmpeg 编码:https:/github./kewlbear/FFmpeg-iOS-build-script关于如果想给视频增加一些特殊效果,例如增加滤镜等,一 般在编码前给使用滤镜库,但是这样也会造成一些耗时,导 致上传视频数据有一定延时。简单流程:1 iOSAVCaptureSession原始视X261摄像头F频流rtmnginx服务器iOS麦克风AVCaptureSession原始音faa频流6前面提到的ffmpeg是什么?和之前的x264 样,ffmpeg其实也是一套编码库,类似的还

10、 有Xvid,Xvid是基于MPEG!协议的编解码器,x264是基于 H.264协议的编码器,ffmpeg集合了各种音频,视频编解码 协议,通过设置参数可以完成基于MPEG4,H.264等协议的编解码,demo这里使用的是x264编码库。7什么是RTMPReal Time Messaging Protocol (简称 RTMF)是 Macromedia 开发的一套视频直播协议,现在属于Adobe。和HLS-样都可以应用于视频直播,区别是 RTM基于flash无法在ios的浏 览器里播放,但是实时性比HLS要好。所以一般使用这种协议来上传视频流,也就是视频流推送到服务器。这里列举一下hls和rt

11、mp对比:协议原理延时优点使用场景;RTMP长链接 tcp每个时刻 的数据收 到后立刻发送2s延时低即时互动HLS短链接 http集合一段1时间数据 生成也切片文件更新m3u8文件10s-30s跨平台h5直播-8推流简所谓推流,就是将我们已经编码好的音视频数据发往视频 流服务器中,一般常用的是使用rtmp推流,可以使用第三方库librtmp-iOS 进行推流,librtmp圭寸装了一些核心的 api供 使用者调用,如果觉得麻烦,可以使用现成的ios视频推流sdk,也是基于rtmp的,https:/github./runner365/LiveVideoCoreSDK9推流服务器搭建简简单的推流服

12、务器搭建,由于我们上传的视频流都是基于 rtmp 协议的,所以服务器也必须要支持 rtmp 才行,大概需要 以下几个步骤:1 安装一台 nginx 服务器。2 安装 nginx 的 rtmp 扩展,目前使用比较多的是 https:/github./arut/nginx-rtmp-module3 配置 nginx 的 conf 文件:rtmp 1server 23 listen 1935;#监听的4 端口56 chunk_size 4000;789application hls 10 #rtmp 推流请求路径live on; hls on; hls_pathhls_fragment111213

13、14/usr/local/var/hls;15165s;17 4 重启 nginx ,将 rtmp 的推流地址写为 rtmp:/ip:1935/hls/mystream ,其中 hls_path 表示生成 的.m3u8和ts文件所存放的地址, hls_fragment表示切片时 长,mysteam表示一个实例,即将来要生成的文件名可以先 自己随便设置一个。更多配置可以参考: https:/github./arut/nginx-rtmp-module/wiki/ 根据以上步骤基本上已经实现了一个支持 rtmp 的视频服务 器了。10在html5页面进行播放直播视频? 简单来说,直接使用 vide

14、o 标签即可播放 hls 协议的直播视 频: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 标签增加 webkit-playsinline 属性, 这个属性

15、是为了让 video视频在ios的uiwebview里面可以不 全屏播放,默认 ios 会全屏播放视频,需要给 uiwebview 设置 allowsInlineMediaPlayback = YES 业界比较成熟的 videojs ,可以根据不同平台选择不同的策略,例如 ios 使用 video标签,pc使用flash等。11 坑点总结简根据以上步骤,笔者写了一个 demo从实现ios视频录制, 采集,上传,nginx服务器下发直播流,h5页面播放直播视 频者一整套流程,总结出以下几点比较坑的地方:1在使用AVCaptureSession进行采集视频时,需要实现 AVCaptureVideo

16、DataOutputSampleBufferDelegate 协议,同 时在-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuff er fromConnection:(AVCaptureConnection connection 捕获到视频流,要注意的是 didOutputSampleBuffer 这个方 法不是didDropSampleBuffer方法,后者只会触发一次,当 时开始写的是didDropSampleBuffer方法,差了半

17、天才发现 方法调用错了。2在使用rtmp推流时,rmtp地址要以rtmp:/ 开头,ip地址 要写实际ip地址,不要写成localhost ,同时要加上端口号, 因为手机端上传时是无法识别 localhost的。这里后续会补充上一些坑点,有的需要贴代码,这里先列这 么多。demo地址:https:/github./lvming6816077/LMVideoTest/ 参考资料:.nihaoshijie./index.php/archives/615结尾打个广告: 移动端日志工具:https:/github./lvming6816077/MLoggerReactNative下拉刷新组件: htt

18、ps:/github./lvming6816077/react-native-pullRefr eshScrollView欢迎使用!原创文章请注明:自 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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论