2016-04-06 9 views
2

Haali Muxer(mp4形式)に渡されるデータの2つの入力ストリームがあります。Haaliへの非同期ストリームの多重化

現在、これらはDirectShowグラフの中でクロックなしで直接Haaliにストリームします。同期したマルチプレクサにこれらを書き込もうとしなければならないのか、ビデオデータストリームが停止する前に停止するオーディオデータのストリームをうまく受け入れるかどうか、私は疑問に思った。 (私は検索後にオーディオを再生しない出力ファイルに関する問題がありますが、なぜこれが起こるのか分かりません)

Haaliマルチプレクサとの多重化については、ドキュメントの方法ではあまり見つけられません。このフィルタの情報を探すのに最適な場所ですか?

+0

ストリームを同期トラックとして使用する単一のMP4が必要ですか?またはMP4を別にする? @ RomanR。 –

+0

シングルmp4の場合、2つのストリームは1つのビデオと1つのオーディオが一緒に多重化されています。現時点ではクロックがありません(または、graphstudionextのように表示されます)。 – gbjbaanb

答えて

2

ストリームを1つのMP4ファイルに多重化するには、マルチプレクサ(Haali、GDCL、mp4v2ライブラリのラッパー、Media Foundationシンクなど)ソースはトラックとして書き出されます。

フィルタグラフクロックは関係ありません。クロックはプレゼンテーションのためのもので、ファイルライターは受信データを受け入れ、できるだけ早く書き込みます。すでに行っているように、時計を削除する方が正確ですが、標準時計を持っていることは違いはありません。

データは、個々のメディアサンプル、メディアストリームの一部のタイムスタンプを使用して同期されます。マルチプレクサは、すべてのストリームの内部キューを構築し、元のストリームデータがインターリーブされるような方法で、単一のファイルを構築するためにストリームからデータを消費します。一方のストリームがあまりにも多くのデータを供給している場合、すなわち、別のストリームがデータをゆっくりと供給している間にデータが早すぎる場合、マルチプレクサは、この特定のストリームに対するさらなるデータ受信を、それぞれの処理コール(IPin::Receive)ストリームは追加入力を提供します。最終的に、異なるストリームからのデータのマッチングがデータタイムスタンプであるときに、どのマルチプレクサが調べるか。

結果のMP4ファイルで同期データを取得するには、ペイロードデータにタイムスタンプが正しく設定されていることを確認する必要があります。マルチプレクサは残りの部分を処理します。

これは、タイムスタンプがストリーム内で単調に増加し、キーフレーム/スプライスポイントがそれぞれ示されることも含みます。それ以外の場合、マルチプレクサによっては直ちにエラーが発生し、他のものは出力ファイルを生成しますが、再生の問題が発生する可能性があります(特にシーク)。

+0

歓声 - これは私が見ているものです、私のデータはタイムスタンプされており、マルチプレクサにインタリーブされていますが、最終的に私のオーディオストリームは止まりますが、ビデオストリームは続きます。私は私のタイムスタンプを見ます、ありがとう。 – gbjbaanb

+0

オーディオが突然停止した場合(ストリームの終了を知らずにフリーズした場合)、マルチプレクサは最新のオーディオまでビデオを受け入れ続け、さらに内部キューを埋めることが期待されます。新しいオーディオが到着するまで、ビデオレッグはブロックされ、データまたはストリーム終了通知が送られます。その後、ビデオは追加の入力を受け入れることがあります。実際には実装固有のものであり、マルチプレクサがこれを正確に行わなければならないという厳しいルールはありませんが、典型的かつ合理的なことです。 –

+0

出力に再生可能な(少なくとも何らかの形で)オーディオファイルが残っている場合は、内部にあるフレーム/メディアサンプルを確認できます。また、何が起こっているのかを確認する必要があります。 –

関連する問題