天天看點

直播軟體開發關于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/2HW,在 TODO 的位置我們就可以對視訊進行編碼與或者其他操作,但是千萬别直接編碼或者操作,很關鍵!你可以使用一個隊列來儲存資料,然後開啟一個線程去讀這個隊列裡面的資料,然後進行操作,因為你直接操作很可能阻塞這個線程,這個線程是主線程,雖然一般不會導緻 ANR ,但是很可能造成丢幀,比如你采集的幀率是 30fps ,采集到第一幀的時候你阻塞了一會兒,那麼很可能第二第三幀就會丢,然後你處理第四幀,第五第六幀就會丢,最後播放視訊的時候就會像按了快進一樣,并且處理完後我們需要及時把 buffer 歸還給 Camera。

手機直播軟體開發過程中,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() 方法,停止視訊采集。

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

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

繼續閱讀