2009-08-28 29 views
3

我想在我的流媒體應用上實現AudioFileStreamSeek功能。但是我無法實現這一點。即使馬特·加拉格爾在他的博客中說:在iPhone上,我該如何使用fileHandle來即時下載mp3文件?

Icidentally,該AudioFileStreamSeek功能似乎完全破碎。如果你無法正常工作(就像我不能),只需要在文件中尋找一個新點,設置不連續爲真,並讓AudioFileStream處理它。

我的代碼kindda看起來是這樣,但我不能得到它的工作:

NSString *path = [[NSString alloc] initWithContentsOfURL: url]; 

    NSLog(@"url = %@", path); 
    SInt64 currentOffset; 
    UInt32 flags = 0; 

    OSStatus status = AudioFileStreamSeek(audioFileStream, 150, &currentOffset, &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; 
     } 
    } 

請幫助...

+0

所以在iPhone上的流媒體應用尋求功能是不可能的? – RoundOutTooSoon 2009-08-28 21:41:40

回答

3

由於缺乏任何其他的解決方案,你可以做的就是創建一個NSConnection,然後當您收到NSData時,您可以通過處理您接收到的NSConnectionDelegate的每個新的NSData塊來有效地創建流。 NSConnection將確保將其發送給您,以便您不必擔心正確訂購它。請注意,根據您的應用程序,您可能需要在主應用程序線程之外執行此操作,以便用戶仍然可以使用您的應用程序,即使下載失敗並且您必須重新緩衝。

+0

我會試試看,謝謝你! – RoundOutTooSoon 2009-09-11 22:08:28