? 視頻直播最近很火,也來跳坑,開更!
? 先簡單說一下直播的大致流程,好有個理解。整個過程分為三個部分,采集端--服務器--播放端,重點也就是采集端和播放端。
先說采集端,一般流程:采集--編碼--打包--推流。
采集: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兩種傳輸方式,支持弱網丟幀,動態切換碼率,分辨率