我发现Apple的文档在AudioFileStreamSeek上非常有限,我找不到任何实际使用的例子。我有一个有效的流式音频播放器,但我似乎无法让AudioFileStreamSeek像宣传的那样工作......
非常感谢任何帮助提示或一些例子!
答案 0 :(得分:1)
我被告知这是有效的:
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);
}
答案 1 :(得分:0)
除非我弄错了,否则只能在3.0 SDK中使用,因此只能在NDA下使用。也许你应该把它带到Apple Beta forums?
我的立场得到了纠正。如果您在在线2.2.1文档中进行搜索,则不会显示AudioFileStreamSeek。你必须手动挖掘文档才能找到它。
答案 2 :(得分:0)
不要忘记将数据偏移量(kAudioFileStreamProperty_DataOffset)添加到AudioFileStreamSeek返回的字节偏移量中。返回值是音频数据的偏移量,忽略数据偏移量。
在搜索之前/之后停止然后重新启动AudioQueue也是一个好主意。
答案 3 :(得分:0)
Matt Gallagher在他的例子"Streaming and playing an MP3 stream"中使用了AudioFileStreamSeek
。
看看马特的代码AudioStreamer.m
:
SInt64 seekPacket = floor(newSeekTime / packetDuration);
err = AudioFileStreamSeek(audioFileStream, seekPacket, &packetAlignedByteOffset, &ioFlags);