【发布时间】:2021-09-22 09:25:44
【问题描述】:
我正在开发 iOS MPEG-DASH 播放器,但在寻找功能时遇到问题。
ExtAudioFileSeek(::) documentation说
将文件的读取位置设置为指定的样本帧编号。对 ExtAudioFileRead(::_:) 函数的后续调用会从该位置返回样本,即使它位于数据包的中间。
不幸的是,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 上的错误还是有办法修复它?
非常感谢!
【问题讨论】:
标签: ios audio avfoundation core-audio audiotoolbox