视频直播最近很火,也来跳坑,开更!
先简单说一下直播的大致流程,好有个理解。整个过程分为三个部分,采集端--服务器--播放端,重点也就是采集端和播放端。
先说采集端,一般流程:采集--编码--打包--推流。
采集:1、创建AVCaptureSession,
2、输入对象AVCaptureDeviceInput
3、输出对象AVCaptureVideoDataOutput
4、输出代理方法 captureOutput(_:didOutputSampleBuffer:fromConnection:)
这里输出SampleBuffer其中pixelBuffer就是未编码的帧数据流,接下来就是对编码
pixelBuffer:未编码前存放数据结构,详细可以参考这一篇iOS8系统H264视频硬件编解码说明 - 简书
编码:编码一般分硬编码和软编码,现在说硬编码,流行!
提问:为什么要编码?
解答:【我的理解(待完善)】
视频H.264帧太大,编码主要获取视频流的SPS(序列参数集) 和 PPS(图像参数集)。
可以参考牛人的意见iOS 系统中,H.264 视频流可以硬件解码吗? 具体如何实现? - 信息技术(IT) - 知乎
outputPixelBuffer存放编码后数据帧。
打包: 一般都是打包成flv格式,格式简单,网络传输比较快,
打包这个真不会(待完善)
推流:目前很多sdk都是基于librtmp的RTMP传输协议,
【待完善】
有一个牛人写的demo,可以参考理解。GitHub - chenliming777/LMLiveStreaming: IOS直播开源,音频AAC视频H264硬件编码,支持美颜,支持flv rtmp两种传输方式,支持弱网丢帧,动态切换码率,分辨率
网友评论