-1

Linuxのcで入力と出力の間に一定の時間遅延がある循環バッファを実装する最良の方法を教えてください。スレッドでバッファに書き込み、別のスレッドで読み取ります。読み取りと書き込みの間の一定の時間差を保存する必要があり、書き込みストリームのビットレートは可変です。ここで、数パケットごとにティンペスタンプを追加して同期し、1ミリ秒ごとにclock_gettimeを使用している別のスレッドからタイムスタンプを取得します。

4

1 に答える 1

1

あなたが提案したように、全体的なアプローチは正しいです。ただし、気をつけなければならないことがたくさんあります -

  1. CBuf にサブミットするソース スレッドと、CBuf から削除するシンク スレッド。

  2. CBuf は、データが失われないように十分な大きさである必要があります。

  3. 破損しないように、両方のスレッドで CBuf をロックする必要があります。

  4. CBuf データにはタイムスタンプが必要です。このタイムスタンプは、伝送ジッターを引き起こさないように十分正確でなければなりません。

  5. シンク スレッドは、アンダー フローにならないように遅延させる必要があります。

  6. ソース スレッドとシンク スレッドは、共通の時間ソースからのみ時間を取得する必要があります。これにより、流入と流出のそれぞれの速度にずれが生じません。

外部のハードウェア システムに送信することを考えている場合、MPEG 送信コンプライアンスには 500 ns が必要なため、1 ミリ秒のタイムスタンプ精度は非常に低くなります。ただし、送信にハードウェア アダプタを使用している場合は、通常は自動的に処理されます。

于 2012-03-23T13:25:19.903 に答える