推流流程
使用rtmp協(xié)議(其他協(xié)議也類似)推流的大體流程如下:
1.通過系統(tǒng)相機捕獲視頻及聲音,該美顏的美顏彩掐,該濾鏡的濾鏡淤翔。
2.捕獲的視頻幀為yuv格式,音頻幀為pcm格式佩谷。
3.將捕獲的音視頻數(shù)據(jù)旁壮,傳入一個串行隊列(編碼隊列)监嗜,在隊列中進行編碼操作。
4.將yuv格式視頻數(shù)據(jù)抡谐,轉(zhuǎn)成h264格式視頻幀裁奇;將pcm格式音頻數(shù)據(jù),轉(zhuǎn)成aac格式音頻幀麦撵。
5.將轉(zhuǎn)好的h264及aac格式數(shù)據(jù)刽肠,轉(zhuǎn)成flv視頻幀。放入編碼緩沖區(qū)免胃,待發(fā)送音五。繼續(xù)獲取視頻幀并編碼。
6.建立rtmp連接到服務(wù)器羔沙,成功后躺涝,創(chuàng)建另一個串行隊列(發(fā)送隊列)。
7.rtmp協(xié)議扼雏,需要在首幀發(fā)送 sps/pps和AudioSpecificConfig這2種特別的幀數(shù)據(jù)坚嗜。
8.發(fā)送了首幀之后,發(fā)送隊列不停從編碼隊列中獲取flv視頻幀诗充,發(fā)送至rtmp服務(wù)端苍蔬。
9.結(jié)束直播,關(guān)閉推流蝴蜓,釋放資源碟绑。
推流流程圖
代碼結(jié)構(gòu)類圖
集成注意事項
1、引入GPUImage.xcodeproj及其他類庫茎匠,并設(shè)置路徑
2蜈敢、當(dāng)一個工程引入另一個工程時,需要在Build Phases里的TargetDependencied加入所引用的庫
3汽抚、bitcode 設(shè)置為NO
4、在Build Phases里增加一個Framework,引入GPUImage.framework
5伯病、在info.plist里加入相關(guān)的權(quán)限造烁,如攝像頭,麥克風(fēng)等午笛。