3
4

3 に答える 3

4

はい、インターネットから直接再生するには、オーディオ ファイル ストリーム サービスを使用する必要があります。

「AudioFileStreamExample」の例が役立つことがわかりました。これは次の場所にインストールする必要があります

/Developer/Examples/CoreAudio/Services/AudioFileStreamExample/

また、Matt Gallagher の記事「MP3 ストリームのストリーミングと再生」には、iPhone のサンプル コードが含まれています。私はそれを注意深く見ていませんでしたが、それはあなたにとって役に立ちそうです。

于 2008-11-24T20:17:29.503 に答える
3

主な問題は、使用しているコードがAudioFileオブジェクト (ディスク上のローカル オーディオ ファイル) を処理していることですが、ネットワークからオーディオをロードするときに、AudioFileStreamなどの独自の API 呼び出しのセットを使用する必要があることだと思いますAudioFileStreamOpenAudioFileStreamParseBytesなど

于 2008-11-21T17:15:00.277 に答える
1

I figured out a workaround. That is copy the content from internet to a local file, then play sound from that local file. And appears solve the problem.

Not perfect, but just works. If anyone has real solution, please let me know.

Here is the code to copy from internet to local file.

-(CFURLRef)saveURL:(NSString *)urlString {
    NSURL *url = (NSURL*)[[NSURL alloc] initWithString:urlString];
    NSData *data = [[NSData alloc] initWithContentsOfURL:url];
    NSArray *filePaths =    NSSearchPathForDirectoriesInDomains (                        NSDocumentDirectory,                                                        NSUserDomainMask,                                                   YES                                                    ); 

    NSString *recordingDirectory = [filePaths objectAtIndex: 0];

    CFStringRef fileString = (CFStringRef) [NSString stringWithFormat: @"%@/BufferFile.caf", recordingDirectory];
    NSLog(@"fileString = %@" , fileString);
    // create the file URL that identifies the file that the recording audio queue object records into
    CFURLRef fileURL =  CFURLCreateWithFileSystemPath (                                                NULL,   fileString,                                             kCFURLPOSIXPathStyle,                                             false);
    SInt32 err = 0;

    CFURLWriteDataAndPropertiesToResource (
  fileURL, (CFDataRef)data, nil, &err);
    return fileURL;
}
于 2008-11-17T01:57:29.180 に答える