直播主要原理

推流

在客户端上要完成直播视频的采集及RTMP上推,主要需要以下几个步骤:1.音视频的采集;2.对视频进行H264编码,对音频进行AAC编码;3.对编码后的音、视频数据进行FLV封包;4.建立RTMP连接并上推到服务端。而在将原始视频编码过程中,有两种方案:一种是利用第三方库FFmpeg 进行编码,一种是利用iOS自身的AVAssetWriter 或VideoToolBox.framework的VTCompressionSession进行编码。FFmpeg因其跨平台及功能丰富等诸多优势,被广泛使用。而使用AVAssetWriter编码需要将视频写入本地文件,然后通过实时监听文件内容的改变,读取文件并处理封包。从iOS8开始,VideoToolBox提供了硬件编码支持,可以使用VTCompressionSession进行编码。
H264编码与AAC编码
H264是一种高压缩率的编码标准,如何压缩嘞?一般的视频采集都是25帧/秒,也就是每秒截图25次,其实每一张图片的内容都相差不大,压缩的办法就是利用算法,只将每张图片变动差异化的部分保存下来,这样视频文件就小多了。这里放几篇学习的文章,[了解 H.264 编码](http://itony.me/808.html),[iOS8系统H264视频硬件编解码说明](http://www.jianshu.com/p/a6530fa46a88),[H.264硬编码代码](https://github.com/manishganvir/iOS-h264Hw-Toolbox)。
AAC编码[iOS音频AAC视频H264编码 推流最佳方案](http://my.oschina.net/u/2286256/blog/538190)

拉流

直播测试的实现的总体思路大致就是,(开源推流框架:腾讯,优酷等)+ (Nginx+RTMP) + (ijkplayer)。
我们要实现我们的直播播放,就是把获取到的数据解压缩,恢复成原始数据。解码就是将H264变成YUV,AAC变成PCM。
解码可以使用软解码,硬解码。
软解码就是利用CPU资源去解压缩数据,采用的方式是FFmpeg解码。
硬解码,对于iOS平台来说,可以使用VideoToolbox.Framework(该框架只能在iOS 8.0及以上系统使用)。为了方便我们的实现,我们采用的一般方式是第三方的SDK,网易云直播,暴风云直播,腾讯云直播,新浪云,VideoCore ,以及哔哩哔哩的ijkplayer等。
有比较多的SDk可以帮助我们去实现播放和推流 。

核心

核心是 RTMP / HLS最简单的模型就是 server 配一个nginx,直播端用 rtmp 协议推到nginx,nginx 拆分为 HLS 分片发布到CDN。收看端只需要去请求那个CDN的地址即可,iOS 的话, AVFoundation 里的 AVPlayer 就能直接播放.

你可能感兴趣的:(直播主要原理)