2016-09-21 19 views
1

私はライブURLをストリーミングするためにhttps://github.com/tumtumtum/StreamingKitiOS StreamingKitオーディオの録音/保存方法は?

を使用しています。完全にうまく動作します。私は、私のアプリにオーディオ機能の録音/保存を追加したいと思います。このライブラリがこれを行うことができるかどうかは誰にも分かりますか? そうでない場合は、選択肢はありますか?私はローカルファイル/静的URLではなく、LIVEストリーミングオーディオを記録する必要があることに注意してください。

ページでは、ちょうどその演奏前のPCMデータを傍受できることを示しています

[audioPlayer appendFrameFilterWithName:@"MyCustomFilter" block:^(UInt32 channelsPerFrame, UInt32 bytesPerFrame, UInt32 frameCount, void* frames) 
{ 
    ... 
}]; 

しかし、私は実際の記録/ mp3ファイルにこれを変換するか、またはこれさえから実際のデータを傍受する方法がわかりません?

答えて

1

StreamingKitは、サンプルの形式について少し秘密のようですが、このようなことができます。サンプルレートとは何ですか?浮動小数点数または整数私はあなたがサンプルサイズから推測できると思います。この例では、16ビットのintを仮定しています。

NSURL *dstUrl = [[NSURL fileURLWithPath:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] ] URLByAppendingPathComponent:@"output.m4a"]; 

NSLog(@"write to %@", dstUrl); 

__block AVAudioFile *audioFile = nil; 

[audioPlayer appendFrameFilterWithName:@"MyCustomFilter" block:^(UInt32 channelsPerFrame, UInt32 bytesPerFrame, UInt32 frameCount, void* frames) 
{ 
    NSError *error; 

    // what's the sample rate? StreamingKit doesn't seem to tell us 
    double sampleRate = 44100; 

    if (!audioFile) { 
     NSDictionary *settings = 
     @{ 
      AVFormatIDKey : @(kAudioFormatMPEG4AAC), 
      AVSampleRateKey : @(sampleRate), 
      AVNumberOfChannelsKey : @(channelsPerFrame), 
      }; 

     // need commonFormat? 
     audioFile = [[AVAudioFile alloc] initForWriting:dstUrl settings:settings commonFormat:AVAudioPCMFormatInt16 interleaved:YES error:&error]; 
     if (!audioFile) { 
      // error 
     } 
    } 

    AVAudioFormat *format = [[AVAudioFormat alloc] initWithCommonFormat:AVAudioPCMFormatInt16 sampleRate:sampleRate channels:channelsPerFrame interleaved:YES]; 
    AVAudioPCMBuffer *buffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:format frameCapacity:frameCount]; 

    buffer.frameLength = frameCount; 
    memmove(buffer.int16ChannelData[0], frames, frameCount*bytesPerFrame); 

    if (![audioFile writeFromBuffer:buffer error:&error]) { 
     NSLog(@"write error: %@", error); 
    } 
}]; 

[self.audioPlayer performSelector:@selector(removeFrameFilterWithName:) withObject:@"MyCustomFilter" afterDelay:10]; 
+0

ありがとう、午前中にこれを試して、報告してください! streamingkitのソースコードを見ると、サンプルレートが定義される場所は2つあります: 'initialSize'の' .mSampleRate = 44100.00 'と' createMixerUnit'の 'Float64 graphSampleRate = 44100.0;' –

+0

どうすればいいのか教えてください完了 –

+0

ps私は、iOSがMP3エンコーダを公開しているとは思わない。 StreamingKitで可能ならば、mp3パケットを直接保存する方が良いでしょう。 –

関連する問題