我正在尝试在流媒体应用程序上实现AudioFileStreamSeek功能。但是我无法让它运行。甚至Matt Gallagher在他的博客上都说:
顺便说一句,AudioFileStreamSeek函数似乎完全损坏。如果您无法使它工作(如我所不能),则只需在文件中寻找新的位置,请将不连续设置为true,然后让AudioFileStream处理它。
我的代码kindda看起来像这样,但我无法正常工作:
NSString *path = [[NSString alloc] initWithContentsOfURL: url];
NSLog(@"url = %@", path);
SInt64 currentOffset;
UInt32 flags = 0;
OSStatus status = AudioFileStreamSeek( audioFileStream, 150, ¤tOffset, &flags );
NSLog(@"Setting next byte offset to: %qi, flags: %d", (long long)currentOffset, flags);
NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath: path];
// then read data from the new offset set by AudioFileStreamSeek
[fileHandle seekToFileOffset:currentOffset];
NSData * data = [fileHandle readDataOfLength:4096];
NSLog(@"data length %d, bytes %d", [data length], [data bytes]);
if (discontinuous)
{
err = AudioFileStreamParseBytes(audioFileStream, length, bytes, kAudioFileStreamParseFlag_Discontinuity);
if (err)
{
[self failWithErrorCode:AS_FILE_STREAM_PARSE_BYTES_FAILED];
return;
}
}
else
{
err = AudioFileStreamParseBytes(audioFileStream, length, bytes, 0);
if (err)
{
[self failWithErrorCode:AS_FILE_STREAM_PARSE_BYTES_FAILED];
return;
}
}
请帮忙...
最佳答案
缺少任何其他解决方案,您可以做的是创建一个NSConnection,然后在收到NSData时,可以通过处理接收到NSConnectionDelegate的每个新的NSData块来有效地创建流。 NSConnection将确保按顺序将其发送给您,因此您不必担心正确订购它。但是请注意,根据您的应用程序,您可能需要在主应用程序线程之外执行此操作,以便即使下载停止并且您必须重新缓冲,用户仍可以使用您的应用程序。