1

こんにちは、あるデバイスからオーディオ/ビデオを記録し、NSStream を使用して別のデバイスに送信しようとしています。avcapturesession を作成し、オーディオ/ビデオ データを生成しました。ビデオ データは正常に別のデバイスに送信され、正しく表示されますが、オーディオ データは非常にロボット的でスキップするように歪んでいます。cmsamplebufferref から audiobufferlist を取得し、2048 バイトのデータを別のデバイスに送信しました

    CMBlockBufferRef blockBuffer;
            CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, NULL, &currentInputAudioBufferList, sizeof(currentInputAudioBufferList), NULL, NULL, 0, &blockBuffer);


      if( captureOutput == _captureAudioOutput ){

            for (int y = 0; y < currentInputAudioBufferList.mNumberBuffers; y++) {
                AudioBuffer audioBuffer = currentInputAudioBufferList.mBuffers[y];
                Float32 *frame = (Float32*)audioBuffer.mData;

                [audiodata appendBytes:frame length:audioBuffer.mDataByteSize];



            }

    [self sendMIxedData:audioData]; // for sending audiodata


}

else {

////// sample buffer to image to NSData

  [self sendMIxedData:audioData:imageData];  // for sending images 

}

反対側では、再びデータを audiobufferlist に変換し、AudioUnit Services で遊んでいます。

static OSStatus playbackCallback(void *inRefCon,
                                 AudioUnitRenderActionFlags *ioActionFlags,
                                 const AudioTimeStamp *inTimeStamp,
                                 UInt32 inBusNumber,
                                 UInt32 inNumberFrames,
                                 AudioBufferList *ioData) {




for (int i=0; i < ioData->mNumberBuffers; i++) { 
    AudioBuffer buffer = ioData->mBuffers[0];


    UInt32 size = min(buffer.mDataByteSize, THIS->tempBuffer.mDataByteSize); 
    memcpy(buffer.mData, THIS->tempBuffer.mData, size);
    buffer.mDataByteSize = size; 

}

    return noErr;
}

ここで tempbuffer は、 NSInputStream からの着信オーディオ データを保存する場所です。問題は、再生されるオーディオが非常に歪んでおり、ロボット的であることです。私はAudioUnitサービスと同時にオーディオを録音および再生する他のプロジェクトでaudiounitservicesをテストしましたが、そこではオーディオが非常にクリアです。しかし、ストリームを介して送信すると、次のようになります。歪んだ。

また、ストリームを介して音声データのみを送信すると、少し明確になりますが、avcapturesession デリゲートから受信した画像と音声データの両方を送信すると、音声が非常に歪んでしまいます。助けてください。私は何を間違っていますか?また、オーディオ/ビデオデータを別々の時間ではなく同時に送信し、反対側で抽出することはできますか?

4

0 に答える 0