iOS音頻AAC視頻H264編碼 推流最佳方案


iOS音頻AAC視頻H264編碼 推流最佳方案

 

項目都是個人的調研與實驗,可能很多不好或者不對的地方請多包涵。

1    功能概況

*  實現音視頻的數據的采集

*  實現音視頻數據的編碼,視頻編碼成h264,音頻編碼成aac

*  實現音視頻數據的發布,將編碼好的音視頻數據傳輸到服務器

 

2 視頻和音頻編碼方案

視頻硬編碼需要使用AVAssetWriter,但是他只支持直接將數據編碼成h264並寫入文件,不提供接口中途獲取視頻數據處理,我們需要在保存的文件中讀出數據

據頂采用軟編碼,主流開源編解碼器Xvid,x264,ffmpeg,Xvid是基於MPEG4協議的編解碼器,x264是基於H.264協議的編碼器,ffmpeg集合了各種音頻,視頻編解碼協議,通過設置參數可以完成基於MPEG4,H.264等協議的編解碼,基於效率,決定使用x264進行軟編

Ios支持aac音頻軟編碼和硬編碼,硬編無需消耗cpu,效率高,決定使用硬編。使用Audio Queue

 

3. 技術流程圖

 

4  相關技術

(1)x264編碼器

x264是一個采用GPL授權的視頻編碼自由軟件[1]。x264的主要功能在於進行H.264/MPEG-4 AVC的視頻編碼,而不是作為解碼器(decoder)之用。

(2) 在xcode下編譯x264庫

*  下載x264的庫

*  打開shell,執行編譯,由於我們的飲食頻道額采集在模擬器上不能進行,所以不編譯i386的庫,直接編譯armv7的庫

*  執行make,編譯成功得到libx264.a

 

(3) Audioqueue簡介

要在iOS設備上播放和錄制音頻,蘋果推薦我們使用AVFoundation框架中的AVAudioPlayer和AVAudioRecorder類。雖然用法比較簡單,但是不支持流式;這就意味着:在播放音頻前,必須等到整個音頻加載完成后,才能開始播放音頻;錄音時,也必須等到錄音結束后,才能獲取到錄音數據。這給應用造成了很大的局限性。為了解決這個問題,我們就需要使用Audio Queue Services來播放和錄制音頻.

Audio Queue Services提供了在iOS 和 Mac OS X上直接錄制和播放各種格式的音頻,他能讓你的應用程序在沒有硬件接口知識的情況下使用硬件錄音和播放設備,如microphones 和loudspeakers。

 

(4)  Audioqueue錄制音頻過程

一個Recording Audio Queue,包括Buffer(緩沖器)組成的Buffer Queue(緩沖隊列),以及一個Callback(回調)

錄音流程如下:

l 將音頻填入第一個緩沖器中

l 當隊列中的第一個緩沖器填滿時,會自動填充下一個緩沖器。此時,會觸發回調。

l 在回調函數中需要將音頻數據流寫入磁盤

l 然后,需要在回調函數中將該緩沖器重新放入緩沖隊列,以便重復使用該緩沖器。重復步驟2。

Audio Queue錄制aac音頻數據如下流程:

 

5 rtmp發送音視頻

  xcode中編譯librtmp庫

在xcode中使用librtmp庫可將音視頻數據打成包,遵循rtmp協議,將數據發送到指定服務器,前提需要編譯librtmp庫並在xcode中使用此庫

*  下載rtmpdump源碼

*  shell下編譯librtmp成librtmp.a並加入到xcode工程

*  拷貝rtmpdump的include文件夾到xcode下的相應工程,並將路徑添加到User Header SearchPaths

*  在工程中引入使用librtmp

 

6. 音視頻同步

采用時間戳技術,時間戳即為一幀的采集時間,音視頻采取同一個參考時間,給每個幀打上時間戳

 

待續。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM