簡體   English   中英

AVCaptureSession 音頻不適用於長視頻

[英]AVCaptureSession audio doesn't work for long videos

我正在使用 AVCaptureSession 錄制帶音頻的視頻。 對於短視頻,一切似乎都能正常工作,但出於某種原因,如果我錄制的視頻長於約 12 秒,則音頻無法正常工作。

我發現該解決方案是對一個完全不同的問題的回答

問題是 AVCaptureMovieFileOutput 中的movieFragmentInterval屬性。

此屬性的文檔解釋了這些片段是什么:

QuickTime 影片由媒體樣本和標識它們在文件中的位置的樣本表組成。 沒有樣本表的電影文件是不可讀的。

在處理過的文件中,樣本表通常出現在文件的開頭。 它也可能出現在文件的末尾,在這種情況下,標題包含指向末尾示例表的指針。 當正在錄制新的電影文件時,由於尚不知道文件的大小,因此無法寫入樣本表。 相反,必須在記錄完成時寫入該表。 如果沒有采取其他行動,這意味着如果記錄沒有成功完成(例如,在發生崩潰的情況下),文件數據將無法使用(因為沒有樣本表)。 通過周期性地將“電影片段”插入電影文件中,可以逐步建立樣本表。 這意味着如果文件沒有完全寫入,電影文件仍然可用(直到寫入最后一個片段的點)。

它還說:

默認值為 10 秒。 設置為 kCMTimeInvalid 以禁用電影片段寫入(通常不推薦)。

因此,出於某種原因,每當寫入片段時,我的錄音就會變得一團糟。 我剛剛添加了這行movieFileOutput.movieFragmentInterval = kCMTimeInvalid; (其中movieFileOutput是我添加到 AVCaptureSession 的 AVCaptureMovieFileOutput)以禁用片段寫入,並且音頻現在可以工作了。

我們也遇到過這個問題。 基本上禁用電影片段寫入會起作用,但它實際上並不能解釋問題。 您很可能正在使用不支持此功能的文件擴展名錄制到輸出文件,例如mp4 如果您傳遞擴展名為mov的輸出文件,則使用電影片段寫入應該沒有問題,並且輸出文件將包含音頻。

更新videoFileOutput.movieFragmentInterval = kCMTimeInvalid為我解決了這個問題。

但是,我在調用startRecordingToOutputFileURL后不小心設置了movieFragmentInterval 痛苦的一個小時后,我意識到我的錯誤。 對於像我這樣的新手,請注意這個明顯的順序

videoFileOutput.movieFragmentInterval = kCMTimeInvalid
videoFileOutput.startRecordingToOutputFileURL(filePath, recordingDelegate: recordingDelegate)

kCMTimeInvalid 現在已棄用。 這是現在分配它的方法:

videoFileOutput?.movieFragmentInterval = CMTime.invalid

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM