直播軟體開發關於Android、iOS中的影片採集步驟

雲豹kj的晨曦發表於2020-08-12

很多人對直播軟體開發還是抱有想法的,但是在這個資本冷靜的市場下,直播平臺該怎麼玩,在直播軟體開發過程中哪些功能是必須具備的,這都是值得關注的話題。今天我們給大家分享一份詳細的直播軟體開發關於Android 、iOS音影片採集步驟講解。


直播軟體開發關於Android、iOS中的影片採集步驟
直播軟體開發

手機直播軟體開發過程中,Android 音訊幀採集步驟:

與Camera 的配置相比,AudioRecord 簡單了很多,在例項化 AudioRecord 時需要指定採集源,筆者設定為了麥克風,然後指定取樣率,筆者採用相容性非常強的 44100Hz ,也就是每秒採集 44100 次,接著是配置音訊通道,由於筆者對音訊要求不是很高所以採用了 AudioFormat.CHANNEL_IN_MONO 代表單通道,當然也是支援雙通道立體聲採集的,只需傳入 AudioFormat.CHANNEL_IN_STEREO 即可,然後再設定取樣的資料格式,也就是每個取樣值所佔空間的大小,筆者選擇了 16位 也就是 2 byte ,最後再配置上緩衝器大小,這個值一般不是寫死的可以透過 AudioRecord.getMinBufferSize 來獲取一個最小值。

接著只需要呼叫AudioRecord.read 即可獲取採集到的 PCM 影片。

手機直播軟體開發過程中,Android 影片幀採集步驟:

對於Android直播軟體開發者來說Camera 這個類並不陌生,我們只需要一些簡單配置以後就可以配合 SurfaceView 來瀏覽攝像頭所捕捉到的畫面,我們這次的部分配置也許與往常的不同,因為我們需要自己處理每一幀影片,比如需要設定一個取樣格式: Camera.Parameters.setPreviewFormat,點進原始碼你會發現裡面所支援的格式有很多,但是不幸的是 5.0 以前只支援 NV12 與 YV12 ,關於這兩種取樣模式等下會細講。除此之外你還需新增緩衝區來存放臨時的影片資料,並設定取樣回撥,如:

這裡的buffSize 大小與取樣格式息息相關,不過 NV12 與 YV12 的每幀大小倒是剛好一樣大的,都是3/2*H*W,在 TODO 的位置我們就可以對影片進行編碼與或者其他操作,但是千萬別直接編碼或者操作,很關鍵!你可以使用一個佇列來儲存資料,然後開啟一個執行緒去讀這個佇列裡面的資料,然後進行操作,因為你直接操作很可能阻塞這個執行緒,這個執行緒是主執行緒,雖然一般不會導致 ANR ,但是很可能造成丟幀,比如你採集的幀率是 30fps ,採集到第一幀的時候你阻塞了一會兒,那麼很可能第二第三幀就會丟,然後你處理第四幀,第五第六幀就會丟,最後播放影片的時候就會像按了快進一樣,並且處理完後我們需要及時把 buffer 歸還給 Camera。


直播軟體開發關於Android、iOS中的影片採集步驟
直播軟體開發

手機直播軟體開發過程中,iOS音影片採集的步驟

1、建立並初始化 AVCaptureSession。

2、建立並初始化 AVCaptureVideoDataOutput。

3、設定 AVCaptureVideoDataOutput的videoSettings,videoSettings 中的 Key and value 包含了輸出影像與影片格式定義。

4、呼叫 AVCaptureVideoDataOutput 物件的 setSampleBufferDelegate 方法,設定取樣資料緩衝區的代理。這樣當從輸入裝置採集到資料後,系統就會自動呼叫AVCaptureVideoDataOutputSampleBufferDelegate 協議中的 captureOutput 方法,從而獲取到影片資料。

5、將 AVCaptureVideoDataOutput 物件新增到 AVCaptureSession物件中。

6、根據影片型別 AVMediaTypeVideo,建立 AVCaptureDevice 物件。(可以建立影片裝置也可以建立音訊裝置)。

7、以 AVCaptureDevice 為引數,建立 AVCaptureDeviceInput 物件。

8、將 AVCaptureDeviceInput 對像新增到 AVCaptureSession 物件中。

9、呼叫 AVCaptureSession 物件的 setSessionPreset 方法進行屬性設定。如 設定 quality level, bitrate, 或其它 output 的 settings。

10、呼叫 Output 物件的 connectionWithMediaType 方法,建立 Input與Output之前的連線。

11、呼叫 AVCaptureSession 物件的 startRunning() 方法,開始影片採集。12、呼叫 AVCaptureSession 對像的 stopRunning() 方法,停止影片採集。


直播軟體開發關於Android、iOS中的影片採集步驟
直播軟體開發

以上音影片採集步驟主要是直播軟體開發過程中app開發基本功能展示,除此之外還會包好管理後臺功能。其實,直播平臺如何搭建這個問題並不困難,大多數服務商會免費提供直播平臺搭建部署服務,如果是自己搭建網上也有很多參考教程,對於後期運營而言直播軟體開發時的功能確立反而更為重要。

宣告:本篇文章為雲豹kj的小編原創文章,轉載請帶連結並表明名稱。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978278/viewspace-2711059/,如需轉載,請註明出處,否則將追究法律責任。

相關文章