問題タブ [ms-media-foundation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ms-media-foundation - 複数のメディア ファイルを 1 つの出力に連結/メディア ファンデーション イベントを聞く
Microsoft Media Foundation を使用してメディア ファイルをトランスコードおよび操作するアプリケーションを作成しましたが、同じアプリケーションでメディア ファイルを連結/結合する必要があります。
このようなことを行うことに関する既存のドキュメントはありますか? ポインタ/ヒントはありますか?これを行う既存のコードはありますか?
そうでない場合は、ConcatenatingMediaSource (連結している一連のソースをラップするソース) のようなカスタム メディア ソースを作成または検索する必要があると思いますが、これがこれを達成するための最良の方法であるかどうかはわかりません。 .
編集:私が関心を持つ必要がある関連イベントはMEEndOfPresentationのようです-これは、ソース(またはおそらく私の埋め込まれたソースの1つ)がすべてのストリームの終わりに達したことを示しています.
MSDN ドキュメントには、ラップされたソースがこのイベントを発生させた場合、ソースに新しい PresentationDescriptor を設定できると記載されています。おそらく、次の埋め込みソースの PresentationDescriptor を返すことができるでしょうか?
現在、個々のソースのイベントを実際に聞く方法について頭を悩ませています。これを行う方法は明確ではありません (少なくとも、主に JVM のコードを書いている人にとっては)。
編集: SequenceSourceを使用したいと思います。これは API の一部ですが、文書化されていないようです。
metadata - カスタム ファイル タイプを mpeg-4 にトランスコードする
カスタム ヘッダーとそれに続く UYVY タイプの YUV 形式で構成されるカスタム ビデオ ファイルがあります。ヘッダー タグには画像の場所に関する特別な情報が含まれているため、それらを保持する必要があります。
現在、Microsoft Media Foundation H.264 エンコーダーを使用して mpeg-4 ファイルを作成するために、UYVY を YUY2 に変換していますが、メタデータを保存する方法がわかりません。
Microsoft Media Foundation を使用して、新しくエンコードされた mp4 ファイルにカスタム メタデータを保存するにはどうすればよいですか? IPropertyStore では、カスタム XML ファイルを使用してカスタム メタデータを処理する方法について説明していますが、これを行う方法の例を見つけることができません。
ありがとう!
c# - C++ COM DLL から C# アプリケーションへのコールバック
これを機能させるために私が試みたすべての手順を公開したいので、これは長い投稿になるでしょう :)
Media Foundation API を使用してビデオを表示する VideoPlayer クラスを含む C++ COM dll があります。
VideoPlayer クラスは、IDL ファイルを使用して定義されます。
このクラスは、IDirect3DSurface9 オブジェクト内のビデオ フレームを出力するカスタム プレゼンター ( WPFMediaKitプロジェクトに基づく) を内部的に使用します。
カスタム プレゼンターには、次のように定義されているタイプ IEVRPresenterCallback のコールバックが必要です。
ご覧のとおり、IDL ファイルでは定義されていませんが、ヘッダー ファイルで宣言されています。
VideoPlayer クラスに新しい関数を追加する必要があります。これにより、呼び出し元の C# コードが、カスタム プレゼンターに設定される IEVRPresenterCallback から継承するクラスのインスタンスを渡すことができます。
この行を VideoPlayer の IDL ファイルに追加しようとしました。
しかし、私はエラーが発生します:
エラー MIDL2025: 構文エラー: "IEVRPresenterCallback" の近くに型指定が必要です
IDL に何もインポートしていないので、これは正常だと思います。IEVRPresenterCallback はヘッダー ファイルで定義されているため、これは正常です。
ヘッダー ファイルをインポートしようとしましたが、IEVRPresenterCallback 定義の MIDL_INTERFACE マクロがエラーを生成します。
エラー MIDL2025: 構文エラー: インターフェイス名、DispatchInterfaceName、CoclassName、ModuleName、LibraryName、ContractName、または "MIDL_INTERFACE" の近くの型指定が必要です
次に、インターフェイスを前方宣言しようとしましたが、次のエラーが発生しました。
エラー MIDL2011: 未解決の型宣言: IEVRPresenterCallback [プロシージャ 'RegisterCallback2' のパラメータ 'p_PresenterCallback' (インターフェース 'IVideoPlayer') ]
私の最後の試みは、RegisterCallback の定義を変更し、IEVRPresenterCallback の代わりに IUnknown へのポインターを持ち、関数の宣言で、ポインターを正しいインターフェイスにキャストすることでした。
これにより、C++ dll が正しくコンパイルされます。
C# アプリケーションでは、次のようにコールバックを設定しました。
私が得る問題は、カスタム プレゼンターがコールバックを呼び出しているにもかかわらず、C# の PresentSurfaceCB 関数に戻らないことです。
私は今完全に立ち往生しており、問題がどこにあるのか、それを解決する方法もわかりません:(
何か案は?
前もって感謝します
c++ - Media Foundation SDK を使用したライブ ストリーミング
Media Foundation を使用してエンコードしているデータを、WMV ファイルに書き込む代わりにネットワーク経由でストリーミングする簡単な方法はありますか?
ms-media-foundation - Windows Media Center に新しい WMF ファイルを認識させるにはどうすればよいですか?
「新しい」コンテナ形式のビデオをデコードするための MFT を作成する初期段階にいます。Media Foundation SDK の MPEG1Source サンプルを使用しており、mpeg1 サンプルがあります。両方の拡張子を「.test」に変更し、dll を登録しました。
Windows Media Player はファイルを開くことができます (私のブレークポイントがヒットし、ビデオが再生されます)。ブレークポイントにヒットしません。dll を読み込もうとしているようにも見えません (Visual Studio は、出力ウィンドウに読み込まれている dll を報告しません)。
これは 64 ビット Windows 7 です。dll はネイティブ 64 ビットです。
Media Center が新しいファイルの種類を認識する前に、追加の登録が必要ですか?
directshow - MFアプリでフレームレートコンバーターDMOを使う方法
メディア ファンデーション アプリケーションでフレーム レート コンバーター DSPを使用したいと考えています。「SourceReader」を使用してビデオ ファイルを読み取ります。DMO を MF と統合してフレームレート変換を行う場所と方法を教えてください。新しいフレーム レートを取得するために DMO にフィードするサンプル (圧縮/非圧縮) の種類を理解していないようです。DMO はフレーム レートをどのように変更しますか? 新しいサンプルに新しいタイムスタンプを付与しますか? その使用法を示すコード例はありません。助けてください、私は立ち往生しています。
ありがとう、モッツ
media - Media Foundation:コンテナなしでH264フレームをデコードして表示する
シナリオは次のとおりです。私のWindowsクライアントアプリは、カスタムの方法(独自のプロトコル)で、コンテナーなしでネットワークソースからH264エンコードされたフレームを取得します。フレームのフォーマットは既知です。フレームをデコードしてビデオを表示する必要があります。HDストリーミング中は再生が完璧である必要がありますが、他のシナリオでは低遅延のオプションがあります。
現在、ffmpegのlibavcodecを使用してフレームをデコードし、StretchBltを使用して手動で画面に表示しています。Media Foundationへの移行を検討していますが、私にはわかりません。コンテナを使用しないソースを使用することは可能ですか?もしそうなら、私はカスタムのものを作成する必要がありますか?
MediaFoundationを使用する代わりの方法も歓迎します。私が現在使用している方法の主な問題は、特にHDビデオのパフォーマンスが十分でないことです。
c++ - 「通常の」IDirect3D9Surface からオフスクリーン プレーン サーフェスを取得する方法
私は Media Foundation でメディア プレーヤーに取り組んでいます。DXVA-HD で後処理を使用しようとしています。しかし、HD デバイスを使用して VideoProcessBltHD を実行しようとすると、E_INVALIDARGS で失敗します。私が疑問に思っているのは、入力として提供している ID39Surface で何らかの形で正しく機能していないということです。「IMFMediaBuffer」から入力サーフェスを取得しています (これは、SourceReader からサンプルを読み取って取得します)。
次のようにサーフェスを抽出しています: CHECK_HR (hr = MFGetService( video_buffer, MR_BUFFER_SERVICE, __uuidof(IDirect3DSurface9), (void**)&pSurface) );
ただし、MSDN の DXVA-HD の例では、VideoProcessBltHD は正常に動作します。
一方、サンプル コードの IDirect3DSurface9 サーフェスは、オフ スクリーンのプレーン サーフェスです。「私のサーフェス」(ビデオ データを含む) をオフスクリーン プレーン サーフェスとしてビデオ プロセッサに渡し、「blt 操作」を成功させるにはどうすればよいですか?
どんな助けでも大歓迎です。
ありがとうモッツ
rtsp - RTSP サーバーからのオーディオ ストリームのレンダリング
カメラからクライアントに A/V ストリームを再ストリーミングする RTSP サーバーがあります。
クライアント側では、MF を使用してストリームを再生しています。
ビデオは正常に再生できますが、サーバーからオーディオを再生できません。ただし、vlc を使用して再生すると、A/V の両方を再生できます。
現在、私は IMFMediaStream を実装しており、カスタマイズしたメディア ストリームを作成しています。また、オーディオ用に個別の IMFStreamDescriptor を作成し、必要なすべての属性を追加しました。を実行すると、すべてうまくいきますが、RequestSample メソッドが呼び出されません。
私が間違っているのか、それとも MF でオーディオを再生する他の方法があるのか を教えてください。
ありがとう、
プラテック
windows - エンコード h264 をファイル以外のバイト配列に書き込む方法
MSDN チュートリアルを使用して RAW RGB32 フレームを h264 ビデオにエンコードしていますが、この最初の部分は問題なく動作します。( http://msdn.microsoft.com/en-us/library/ff819477%28v=VS.85%29.aspx )
しかし、私ができると思うことが 1 つあります。出力エンコードされたビデオをファイル以外の BYTE 配列に書き込みたいだけです。約 400 の異なる Web ページとすべての Media Foundation ドキュメントを読みましたが、表示されません。どうやってするか !!
私はさまざまな方法を試しました.MFCreateTempFileを使用して生活し、IMFByteStreamを操作しましたが、何もすることはありません!
私はそれを試してみた後: http://msdn.microsoft.com/en-us/library/windows/desktop/ms698913%28v=VS.85%29.aspx しかし、私のバッファは空です!
私を助けてください !!目が離せません!!