iOS 三種錄製視訊方式詳細對比

dearqjn發表於2016-05-15

先附上參考資料

http://www.jianshu.com/p/16cb14f53933

https://developer.apple.com/library/content/samplecode/AVSimpleEditoriOS/Introduction/Intro.html

https://github.com/objcio/VideoCaptureDemo

https://github.com/gsixxxx/DTSmallVideo

https://github.com/AndyFightting/VideoRecord

卷首吐槽語

這還是第一次接觸自定義介面錄製視訊,包括各種引數的設定,不得不說,錄製視訊這塊,各種類,各種方法,蠻複雜的,網上的資料也是各種雜亂,想要弄清楚還真是得費一番功夫,我參考了大量資料,根據自己的思路整理了一遍,按照我的思路來,保證你看一遍就會,我這裡只是簡單的錄製,壓縮,剪裁,匯出等功能,不設計濾鏡,新增背景音樂,合併,字幕等等,重要的是這個流程,主流程會了,其他也就是錦上添花了。

先附上dome demo地址

腦圖

方便大家對三中錄製方式有一個大概的瞭解,看一下這張圖片。 基本屬性與類 第一種採用系統的錄製較為簡單,詳細介紹後面兩種。

效果圖

1 2 3 4 5 6

demo中把三種方式單獨分開,便於學習。支援閃光燈,切換鏡頭,錄製不同尺寸的視訊等。

1.UIImagePickerController

這種方式只能設定一些簡單引數,自定義程度不高,只能自定義介面上的操作按鈕,還有視訊的畫質等。

2.AVCaptureSession+AVCaptureMovieFileOutput

流程:

0. 建立捕捉會話

1. 視訊的輸入

2. 音訊的輸入

3.輸出源設定

4. 視訊預覽層

一進入視訊錄製介面,這個時候 session就已經在採集資料了,並把資料顯示在預覽層上,使用者選擇錄製後,再將採集到的資料寫入檔案。

5. 開始採集畫面

6.開始錄製

3.AVCaptureSession+AVAssetWriter

流程:

1. 建立捕捉會話

需要確保在同一個佇列,最好佇列只建立一次

2.設定視訊的輸入 和 輸出

3. 設定音訊的輸入 和 輸出

4. 新增視訊預覽層

5. 開始採集畫面

6. 初始化AVAssetWriter

AVAssetWriter 寫入資料的過程需要在子執行緒中執行,並且每次寫入資料都需要保證在同一個執行緒。

7.拿到資料流後處理

視訊資料和音訊資料需要分開處理

我們拿到最原始的資料以後,可以對其進行各種引數的設定

設定好引數以後,就可以寫入檔案了。AVAssetWriter資料寫入的過程有點複雜,demo中我新建AVAssetWriteManager分離出AVAssetWriter,單獨處理寫資料,這樣邏輯會清晰一點。

fileOut和writer的相同點和不同點

從上面的兩個流程大致可以看出來, 相同點:資料採集都在AVCaptureSession中進行,視訊和音訊的輸入都一樣,畫面的預覽一致。 不同點: 輸出不一致, AVCaptureMovieFileOutput 只需要一個輸出即可,指定一個檔案路後,視訊和音訊會寫入到指定路徑,不需要其他複雜的操作。 AVAssetWriter 需要 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 兩個單獨的輸出,拿到各自的輸出資料後,然後自己進行相應的處理。

可配引數不一致,AVAssetWriter可以配置更多的引數。

視訊剪裁不一致,AVCaptureMovieFileOutput 如果要剪裁視訊,因為系統已經把資料寫到檔案中了,我們需要從檔案中獨到一個完整的視訊,然後處理;而AVAssetWriter我們拿到的是資料流,還沒有合成視訊,對資料流進行處理,所以兩則剪裁方式也是不一樣。

其他新增背景音樂,水印等也是不一樣的,這裡沒有涉及就不介紹了。到這裡也差不多了,文章也有點長了。這些是我自己整理資料總結出來的,不排除會有一些錯誤之處,供大家學習參考,希望有所收穫。如果方便,還請為我star一個,也算是對我的支援。

demo地址

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

iOS 三種錄製視訊方式詳細對比 iOS 三種錄製視訊方式詳細對比

相關文章