我发现 Apple 在 AudioFileStreamSeek 上的文档非常有限,而且我在任何地方都找不到任何实际使用的示例。我有一个工作流音频播放器,但我似乎无法让 AudioFileStreamSeek 像宣传的那样工作......
任何帮助提示或一个小例子将不胜感激!
我被告知这有效:
AudioQueueStop(audioQueue, true);
UInt32 flags = 0;
err = AudioFileStreamParseBytes(audioFileStream, length, bytes,
kAudioFileStreamParseFlag_Discontinuity);
OSStatus status = AudioFileStreamSeek(audioFileStream, framePacket.mPacket,
¤tOffset, &flags);
NSLog(@"Setting next byte offset to: %qi, flags: %d", (long long)currentOffset, flags);
// then read data from the new offset set by AudioFileStreamSeek
[fileHandle seekToFileOffset:currentOffset];
NSData* data = "" readDataOfLength:4096];
flags = kAudioFileStreamParseFlag_Discontinuity;
status = AudioFileStreamParseBytes( stream, [data length], [data bytes], flags);
if (status != noErr)
{
NSLog(@"Error parsing bytes: %d", status);
}
除非我弄错了,否则这仅在 3.0 SDK 中可用,因此在 NDA 下可用。也许你应该把它带到Apple Beta 论坛?
我站得更正了。如果您在在线 2.2.1 文档中进行搜索,AudioFileStreamSeek 不会出现。您必须手动挖掘文档才能找到它。
Matt GallagherAudioFileStreamSeek
在他的示例“流式传输和播放 MP3 流”中使用。
看看马特的代码AudioStreamer.m
:
SInt64 seekPacket = floor(newSeekTime / packetDuration);
err = AudioFileStreamSeek(audioFileStream, seekPacket, &packetAlignedByteOffset, &ioFlags);
不要忘记将数据偏移量 (kAudioFileStreamProperty_DataOffset) 添加到 AudioFileStreamSeek 返回的字节偏移量。返回值是音频数据的偏移量,忽略数据偏移量。
在搜索之前/之后停止然后重新启动 AudioQueue 也是一个好主意。