簡體   English   中英

AudioToolbox ExtAudioFileSeek(_:_:) 不直接設置想要的幀位置

[英]AudioToolbox ExtAudioFileSeek(_:_:) does not directly set the desired frame position

我正在開發 iOS MPEG-DASH 播放器,但在搜索功能方面遇到問題。

ExtAudioFileSeek( : :) 文檔

將文件的讀取位置設置為指定的樣本幀編號。 對 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對房地產ExtAudioFilekAudioFilePropertyPacketTableInfo所包裝的音頻文件。 前者可能更有意義。 我不知道整個數據包表信息是否從一開始就可供您使用,或者是否會隨着時間的推移向您顯示,也不知道 API 將如何對您多次設置這些屬性做出反應。

祝你好運!

暫無
暫無

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

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