0

現在、RTPを使用してオーディオ(8kHzのAAC-HBR)とビデオ(H264)をストリーミングしています。両方のフィードは個別に正常に機能しますが、まとめるとかなり速く同期が外れます(15秒未満)。

オーディオRTPヘッダーのタイムスタンプをインクリメントする方法がわかりません。2つのRTPパケット間の時間差(約127ms)または1/8000の一定のインクリメント(0.125ms)である必要があると思いました。しかし、どちらもうまくいきませんでした。代わりに、私はなんとかスイートスポットを見つけることができました。パケットごとにタイムスタンプを935ずつインクリメントすると、約1分間同期が維持されます。

4

3 に答える 3

1

AACフレームサイズは1024サンプルです。(1/8000)* 1024=128ミリ秒ずつインクリメントしてみてください。または、パケットに複数のAACフレームがある場合は、その倍数になります。

それは役に立ちますか?

于 2012-12-06T08:49:28.290 に答える
0

アンドロイドのIMHOビデオとオーディオの非同期は、それらが異なるメディアレコーダーから取得された場合、戦うのは困難です。それらは異なる開始フレームをキャプチャするだけであり、(見たところ)非同期の大きさを調べて飛行中のオーディオまたはビデオのタイムスタンプで調整する方法はありません。

于 2013-04-26T19:48:34.410 に答える
0

少し遅れましたが、私の答えを出すことを考えました。

オーディオRTPパケットのタイムスタンプ==RTPパケットに含まれるオーディオサンプルの数。

AACの場合、各フレームは1024サンプルで構成されているため、RTPパケットのタイムスタンプは1024増加する必要があります。

2つのRTPパケットのクロック時間の差=(1/8000)* 1024 = 128ms、つまり、送信者は128msの差でrtpパケットを送信する必要があります。

他のサンプリングレートからのもう少しの情報:

44100hzでサンプリングされたAACは、1秒で44100サンプルの信号を意味します。したがって、1024サンプルは(1000ms / 44100)* 1024 = 23.21995 msを意味します。したがって、2つのRTPパケット間のタイムスタンプ= 1024ですが、rtpセッションの2つのRTPパケット間のクロック時間の差は23.21995msである必要があります。

他の例と相関させようとしています:

たとえば、G711ファミリ(PCM、PCMU、PCMA)の場合、サンプリング周波数=8kです。したがって、20msパケットにはサンプル== 8000/50 == 160が含まれている必要があります。したがって、RTPタイムスタンプは160ずつ増加します。2つのRTPパケット間のクロック時間の差は20msである必要があります。

于 2018-10-22T09:43:18.483 に答える