メディア ファンデーション トポロジで使用しようとしている、以下に示す 2 台のカメラがあります。ここに私のトポロジの要約があります:
ウェブカメラ --> MJPG デコーダー --> カスタム MFT --> H264 エンコーダー --> MP4 ファイル シンク
これに関する問題は、生成された MP4 ファイルに、MP4 コンテナーと H264 ストリームの両方について、長さとタイム スケールのタグが正しくないことです。これは MP4Box や YAMB などのツールで簡単に修正できますが、最終的な目標はビデオをストリーミングすることです。
私が特定した潜在的な原因の 1 つは、カメラ ソースによって生成されたサンプルが時間 0 で開始されないことです。 v=vs.85).aspx#live_sources、ライブ ソースのタイムスタンプは 0 から開始する必要があります。
この行に沿って、サンプルのタイムスタンプを「修正」するために次のことを試みました。
- を使用して、カスタム MFT のサンプル時間を再ベース化しました
IMFSample::SetSampleTime
。 MEMediaSample
およびイベントに関連付けられたタイムスタンプをキャッチして修正する、IMFMediaSource および IMFMediaStream オブジェクトのラッパーを作成しましたMEStreamTick
。
どちらの場合も、メディア セッションはエラー0xC00D4A44
( MF_E_SINK_NO_SAMPLES_PROCESSED
) をスローし、結果の MP4 ファイルは "mdat" アトム宣言の後で突然終了します。
カメラ
- ロジクール BCC950 ConferenceCam
- Thinkpad W520 内蔵カメラ
使用されているシステム (どちらも同じ問題があります):
- Windows 7 プロフェッショナル x64
- ウィンドウズ 8 x86
質問:
- ビデオの長さ/時間スケールが正しくないために見落とした他の原因はありますか?
- そうでない場合、サンプルのタイムスタンプを再ベース化する正しい方法はありますか?