概述
iOS8之后 系统提供了VideoToolBox用来处理音频和视频的编解码(硬解使用GPU),在iOS8之前,普遍使用的是ffmpeg(软解使用CPU)。
处理流程
1.采集
使用AVFoundation提供的AVCapture系列类自定义一个视频流采集的相机,在采集到数据的回调内处理视频编码。
相机自定义:
|
|
回调处理:
|
|
sampleBuffer 这个就是视频流的原始数据。
2.开始编码
使用VideoToolBox库的相关API可能很方便的编码上面的sampleBuffer数据.
首先要初始化一个VTCompressionSessionRef对象
|
|
开始编码:
|
|
编码成功回调:
|
|
这里是编码流程中比较关键的一环,需要将编码后的数据(H264数据)根据相应的数据格式取出来,用来做进行二次封装(封装为rtmp协议对应格式的数据)进行rtmp传输。不过这几种数据都是固定格式的,所以只要清楚相应的格式后,拆分了封装应该都是能解决的。
3.拆分后的视频数据二次封装为rtmp格式包
sps和pps数据的封装(关键帧数据)
|
|
非关键帧数据的封装
|
|
4.建立rtmp通道
先要开始一个socket的通道
|
|
和服务器建立一个rtmp通信,通过服务器返回的状态码发送相应的握手请求,在3次握手成功后,rtmp通道建立完成,就可以发送封二次封装好的数据了。
|
|
5.rtmp推流
|
|
如果一切OK 推流地址应该就可以用VLC播放了。
具体代码参考我的 demo.