[英]AudioToolbox ExtAudioFileSeek(_:_:) does not directly set the desired frame position
我正在開發 iOS MPEG-DASH 播放器,但在搜索功能方面遇到問題。
將文件的讀取位置設置為指定的樣本幀編號。 對 ExtAudioFileRead( : :_:) 函數的后續調用將返回來自該位置的樣本,即使它位於數據包的中間。
不幸的是, AudioToolbox.AudioFile_ReadProc
循環不會直接尋找正確的幀, AudioToolbox.AudioFile_ReadProc
遍歷所有文件段,請求 16 和 27682 字節的包。 需要大量時間(尤其是長曲目)並強制下載所有中間片段(不應該是必需的)這也會導致應用在播放高音質長曲目時崩潰。
這是我的日志跟蹤。 我將幀索引轉換為“mega”以提高可讀性。
[PlayerEngine] - Trying to seek at 16.870537 %
[AudioSource] - Pausing AudioOutputUnit
[AudioSource] - AudioOutputUnit successfully stopped
[AudioOutputUnit] - Trying to seek at frame 31.006805M
[AudioOutputUnit] - Successfully sought at frame 31.006805M
[AudioInputUnit] - Audio frames have been flushed
[AudioInputUnit] - Seek to frame 31.006806M pending
[AudioConverter] - Converted frame buffer has been flush
[AudioSource] - Resuming AudioOutputUnit
[AudioSource] - AudioOutputUnit successfully resumed
[PlayerEngine] - Successfully sought at 16.870537 %
[AudioInputUnit] - Seeking to frame 31.006805M
[CoreAudioDecoder] - Trying to seek at frame 31.006805M
[CoreAudioDecoder] - Seek on frame 31.006806M done successfully
[CoreAudioDecoder] - AudioToolbox.AudioFile_ReadProc : inClientData, inPosition:1.315635M, requestCount:16
(...)
[CoreAudioDecoder] - AudioToolbox.AudioFile_ReadProc : inClientData, inPosition:1.331687M, requestCount:27682
它是 AudioToolBox 上的錯誤還是有辦法修復它?
非常感謝 !
涼爽的!
由於您提到讀取回調,我假設您不僅使用ExtAudioFile
API,還使用AudioFile
API,例如ExtAudioFileWrapAudioFileID(AudioFileInitializeWithCallbacks(...))
壓縮音頻格式並不總是在幀和文件偏移之間具有簡單的映射,因此您看到的幼稚行為可能是由於這些 API 之一( AudioFile
?)不知道這種映射,這是可以理解的。
嘗試要么設置kExtAudioFileProperty_PacketTable
對房地產ExtAudioFile
或kAudioFilePropertyPacketTableInfo
所包裝的音頻文件。 前者可能更有意義。 我不知道整個數據包表信息是否從一開始就可供您使用,或者是否會隨着時間的推移向您顯示,也不知道 API 將如何對您多次設置這些屬性做出反應。
祝你好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.