任何人都可以为iPhone提供AudioFileStreamSeek的工作示例吗?

时间:2009-03-20 15:30:36

标签: iphone cocoa audio streaming

我发现Apple的文档在AudioFileStreamSeek上非常有限,我找不到任何实际使用的例子。我有一个有效的流式音频播放器,但我似乎无法让AudioFileStreamSeek像宣传的那样工作......

非常感谢任何帮助提示或一些例子!

4 个答案:

答案 0 :(得分:1)

我被告知这是有效的:

AudioQueueStop(audioQueue, true);
UInt32 flags = 0;
err = AudioFileStreamParseBytes(audioFileStream, length, bytes,
                                kAudioFileStreamParseFlag_Discontinuity);

OSStatus status = AudioFileStreamSeek(audioFileStream, framePacket.mPacket, 
                                      &currentOffset, &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);