live555 オーディオとビデオの同期

live555 オーディオとビデオの同期

testOnDemandRTSPServer.cpp を通じて実装され、コードの一部を変更するだけで済みます。

具体的なアイデア:

オーディオ + ビデオのストリーミングは簡単です。「addSubsession()」を 2 回呼び出すだけです (ビデオ ソースに対して 1 回、オーディオ ソースに対して 1 回)。(このようにして、「ServerMediaSession」オブジェクトには 2 つの「ServerMediaSubsession」オブジェクト (ビデオ用とオーディオ用) が含まれます。)

ただし、オーディオ/ビデオ同期が適切に機能するには、各ソース (ビデオとオーディオ) がフレームごとに正しい "fPresentationTime" 値を生成する必要があり、これらは "壁時計" 時間、つまり「gettimeofday()」を呼び出しても、取得される時刻は同じです。

知らせ

テストに使用する h264 と mp3 は、できるだけ同じ mp4 から抽出する必要があります。同期の問題を確認します。

特定の操作を抽出します。

Mp4 ファイル抽出の詳細 H.264 および MP3 ファイル_longfyk のブログ - CSDN ブログ

抽出した既製のファイル:

オーディオとビデオの同期 h264-live555 (水龍陰)-ライブ ブロードキャスト技術ドキュメント リソース-CSDN ライブラリ

オーディオとビデオの同期テスト mp3-live555 (Shuilongyin) リソース - CSDN ライブラリ

特定のコード (testOnDemandRTSPServer.cpp を変更)

#include "liveMedia.hh"

#include "BasicUsageEnvironment.hh"
#include "announceURL.hh"

UsageEnvironment* env;

// To make the second and subsequent client for each stream reuse the same
// input stream as the first client (rather than playing the file from the
// start for each client), change the following "False" to "True":
//单播、组播开关,false为单播,true为组播,单播每个链接接入时都会重新播放,组播的话会随着上一个接入流的位置进行播放
//经过实测,组播模式各链接同步流畅,延迟很小。
Boolean reuseFirstSource = false;

// To stream *only* MPEG-1 or 2 video "I" frames
// (e.g., to reduce network bandwidth),
// change the following "False" to "True":
Boolean iFramesOnly = False;

static void announceStream(RTSPServer* rtspServer, ServerMediaSession* sms,
			   char const* streamName, char const* inputFileName); // forward

おすすめ

転載: blog.csdn.net/qq_45865950/article/details/132753061