7

エンコードされた PCM バッファを含むソケットから一連の UDP パケットを受信して​​います。それらをデコードした後、すぐに再生したい int16 * オーディオ バッファーが残ります。

意図したロジックは次のようになります。

init(){
   initTrack(track, output, channels, sample_rate, ...);
}

onReceiveBufferFromSocket(NSData data){
   //Decode the buffer
   int16 * buf = handle_data(data);

   //Play data
   write_to_track(track, buf, length_of_buf, etc);
}

ただし、バッファの再生に関係するすべてについてはわかりません。Android では、AudioTrack オブジェクトを作成し、サンプル レート、フォーマット、チャネルなどを指定してセットアップし、バッファを使用して「書き込み」メソッドを呼び出すだけでこれを実現できます (私が望むように)上記の疑似コードで可能ですが、iOSでは不足しています。

オーディオ ファイル ストリーム サービスを使用してみましたが、音が出ないので何か間違っていると思います。それらの機能だけでは実際には再生されないような気がします。また、Audio Queue Services についても理解しようとしましたが (これは私が求めているものに近いと思います)、その使用法に関する単純なコード サンプルを見つけることができませんでした。

特にコード例の形で、どんな助けでも大歓迎です。

4

2 に答える 2

7

着信 UDP データを保持するには、何らかのタイプのバッファーを使用する必要があります。 これは、私が使用した簡単で優れた循環バッファーです。

その後、バッファからデータを再生するには、Audio Unit フレームワークを使用できます。 これが良い例のプロジェクトです

注: 最初のリンクには、Audio Unit を使用して再生する方法も示されています。

于 2013-01-21T23:49:33.167 に答える
3

audioQueue サービスも使用できます。ffmpeg を使用してストリームをデコードする場合は、何らかのパケットの並べ替えを行っていることを確認してください。これにはオプションがあります。

それ以外の場合、Audio Queue は簡単に設定できます。

https://github.com/mooncatventures-group/iFrameExtractor/blob/master/Classes/AudioController.m

もう少し複雑ですが、AudioUnits を使用することもできます。

于 2013-01-22T16:48:15.940 に答える