0

audioqueue を満たすために 3 つの audioQueueBufferRef があり、データが十分に速く来るとすべてがうまく機能します。しかし、データがなくなったときに、outputCallback がバッファを埋めるように要求することがあります。この場合、私は何かをエンキューせず、コールバックはもう呼び出されません。(正常 ?)

これの後、私は2つのバッファで実行し、後で(別のラグの後)1つのバッファで実行し、最後にバッファにコールバックがなくなり、音が出なくなります。

空の audioQueueBufferRef を配列に格納し、入力するデータがあるときにそれらを呼び出そうとしました。しかし、データが十分に速く到着しないため、バッファは残っている少量のデータを「食べる」だけで、サウンドが遅れます。

埋めるデータが少なくなったときの最善の方法は何ですか?

私が見つけた最善の方法は、コールバックなしでバッファーを停止させ、すべてのバッファーが空になるまで残りのバッファーにジョブを実行させることです。この後、AudioQueue を停止し、いくつかのデータを保存して、もう一度再生します。AudioqueueStop() を呼び出す必要があることに注意してください。これは、すべてのバッファーが空で、それらを補充すると、サウンドが出ないためです。これは正常ですか?

一般的に、私はそれを良い方法で行いますか、それともより良いアプローチがありますか? そして、すべての audioqueueBufferRef が死んでいることを検出するコールバックはありますか (コールバックを実行せずに) ? 2.

4

2 に答える 2

0

設定した頻度でコールバックが呼ばれると思いますが、データが間に合わない場合は異常音です。あなたのデータはネットワークからのものですか?私はあなたと同じ条件を満たしました。私の解決策は、無音である 1 つのパケット データを記録することです。入力するオーディオ データがない場合は、代わりに無音データを使用します。

于 2013-12-01T14:20:55.007 に答える