最简单的 iOS 推流代码,视频捕获,软编码 (faac,x264),硬编码(aac,h264),美颜,flv 编码,rtmp 协议,陆续更新代码解析,你想学的知识这里都有,愿意懂直播技术的同学快来看!!
源代码:https://github.com/hardman/AWLive
推流流程
使用 rtmp 协议(其他协议也类似)推流的大体流程如下:
通过系统相机捕获视频及声音,该美颜的美颜,该滤镜的滤镜.
捕获的视频帧为 yuv 格式,音频帧为 pcm 格式.
将捕获的音视频数据,传入一个串行队列 (编码队列),在队列中进行编码操作.
将 yuv 格式视频数据,转成 h264 格式视频帧;将 pcm 格式音频数据,转成 aac 格式音频帧.
将转好的 h264 及 aac 格式数据,转成 flv 视频帧.放入编码缓冲区,待发送.继续获取视频帧并编码.
建立 rtmp 连接到服务器,成功后,创建另一个串行队列(发送队列).
rtmp 协议,需要在首帧发送 sps/pps 和 AudioSpecificConfig 这 2 种特别的帧数据.
发送了首帧之后,发送队列不停从编码队列中获取 flv 视频帧,发送至 rtmp 服务端.
结束直播,关闭推流,释放资源.
我的代码严格按照上述流程编写.这些逻辑也适用于市面上出现的几乎所有的推流代码.
我把上述流程及源代码画了 2 个图.里面有详细的流程及使用的技术.
推流流程图
代码结构类图
文章列表
1 小时学会:最简单的 iOS 直播推流(一)项目介绍
1 小时学会:最简单的 iOS 直播推流(二)代码架构概述
1 小时学会:最简单的 iOS 直播推流(三)使用系统接口捕获音视频
1 小时学会:最简单的 iOS 直播推流(四)如何使用 GPUImage,如何美颜
1 小时学会:最简单的 iOS 直播推流(五)yuv,pcm 数据的介绍和获取
1 小时学会:最简单的 iOS 直播推流(六)h264,aac,flv 介绍
1 小时学会:最简单的 iOS 直播推流(七)h264/aac 硬编码
1 小时学会:最简单的 iOS 直播推流(八)h264/aac 软编码
1 小时学会:最简单的 iOS 直播推流(九)flv 编码与音视频时间戳同步
1 小时学会:最简单的 iOS 直播推流(十)librtmp 使用介绍
1 小时学会:最简单的 iOS 直播推流(十一)sps&pps 和 AudioSpecificConfig 介绍(完结)
来源: https://juejin.im/post/5a5727376fb9a01c91404e69