IMFMediaEngineは、DirectCompositionを使用して常に640x480で実行されます

デビッドサンルイ

IMFMediaEngine使用してビデオストリーム(Smooth Streaming、HLS)を再生し、後でPlayReadyを使用する可能性があります。

TransferVideoFrame使用してビデオをテクスチャに描画すると、すばらしい働きをします。ただし、DirectCompositionを使用するには、PlayReady + DRM + 1080pビデオが必要であることを理解しています。だから私はこれを機能させようとしています。

また、この方法のもう1つの利点は、ビデオフレームのレンダリングがアプリから独立しているため、アプリのUIで途切れたり遅れたりしても、ビデオの再生に影響がないことです。

私はそれを機能させることができますが、残念ながら私が使用しているIDCompositionVisualは常に640x480に制限されてしまいます。したがって、ビデオはそれにダウンスケールする必要があります。次に、これを変換して拡大すると、醜いストレッチ画像が表示されます。

私はこの方法でビジュアルを登録しています:

pMediaAttributes->SetUnknown(MF_MEDIA_ENGINE_PLAYBACK_VISUAL, m_pDcompVideoVisual);

ここに記載されているように:https//msdn.microsoft.com/en-us/library/windows/desktop/hh162850(v = vs.85).aspx

事前にサーフェスを作成しようとしても、ビジュアルでSetContentは何も変更されません。これは、ビデオプレーヤーが独自のサーフェス640x480でオーバーライドするようなものです。単純なプレーヤーに固執し、この問題の実際の解決策を見つけて、MF_MEDIA_ENGINE_EVENT_FORMATCHANGEイベントを受け取ったときにVisualSurfaceのサイズを指定できると本当に便利です。

これは、DirectCompositionサーフェスを指定するためのIMFMediaEngineのオプションであるため、これを機能させる方法が必要です。

シェーンウィーバー

IMFMediaEngineについて私が見たドキュメントに基づくと、IMFMediaEngineProtectedContent-> TransferVideoFrameを使用してDRM保護されたコンテンツを処理できるはずです

保護されたコンテンツの場合、IMFMediaEngine :: TransferVideoFrameメソッドの代わりにこのメソッドを呼び出します。

このようなものは、提供したサンプルのVideoPlayer :: CaptureFrameメソッドに含めることができます。

// Transfer the frame to the texture
auto pIMFMediaEngineUnknown = reinterpret_cast<IUnknown *>(m_pMediaEngine);
IMFMediaEngineProtectedContent *temp = 0;
pIMFMediaEngineUnknown->QueryInterface(IID_PPV_ARGS(&temp));
DWORD flags = 0;
HRESULT ret = temp->TransferVideoFrame(m_pRenderTarget, &videoRect, &targetRect, &borderColor, &flags);
temp->Release();

//HRESULT ret = m_pMediaEngine->TransferVideoFrame(m_pRenderTarget, &videoRect, &targetRect, &borderColor);
assert(ret == S_OK && "Failed to transfer video frame");

1080pで保護されたコンテンツでこれを試してみてください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Wineで640x480のみのゲームを正しく実行するにはどうすればよいですか?

分類Dev

640x480でスタック-NouveauとnVidiaのグラフィックドライバーを並べて実行しますか?

分類Dev

640x480でスタック-NouveauとnVidiaのグラフィックドライバーを並べて実行しますか?

分類Dev

Nvidiaドライバーは更新後にリセットされ、モニターは「不明」になり、640x480でスタックします

分類Dev

Ubuntu 14.04LTSに更新されました。Dell DimensionC521で画面解像度が640x480のままになっている

分類Dev

モニターが接続されていないWindowsサーバーを使用したVNC / Steamゲームストリーミングサービスの解像度はわずか640x480です

分類Dev

ゲストの追加がインストールされた後でも、VMの解像度は640x480を超えることはできません

分類Dev

すべてのソリューションを試しましたが、モニターの解像度が640x480のままです

分類Dev

すべてのソリューションを試しましたが、モニターの解像度が640x480のままです

分類Dev

Debianをフレームバッファ640x480の解像度で起動するように強制することはできません

分類Dev

Nvidiaで最大解像度が640x480なのはなぜですか?

分類Dev

Ubuntu 20.0.4.1 LTSで再起動した後、640x480でスタックする

分類Dev

インストールに関してディスプレイの解像度が640x480のままになっている

分類Dev

Unity EditorでSteamworks.NETを使用すると、steam_appid.txtファイルを変更しても、常にゲームID480が返されます。

分類Dev

x86でMonomkbundleを使用してビルドすると、x64では実行されません

分類Dev

ネストされたクエリは実行されておらず、常にnullを返します。

分類Dev

PHPUnitは常に「テストは実行されていません!」と出力します。MacOS BigSurで

分類Dev

cbindを使用して列の.csvファイルを作成しますが、「X」は常に1行目に表示されます

分類Dev

Swiftのオプションのチェーンは常にiflet構造で実行されますか、それともオプションの疑問符を使用して実行されますか?

分類Dev

Ubuntuの低解像度VGAモニター(640x480または480p)

分類Dev

初めてクラスを使用するとき、静的コードは常に実行されますか?

分類Dev

Python:渡されたときは常にデータをリッスンして実行します

分類Dev

「最終的に」は常にPythonで実行されますか?

分類Dev

BackgroundServiceは常に新しいスレッドで実行されますか

分類Dev

Cookieが設定されている場合は常にJavaScriptの実行を中断します

分類Dev

DebianでEttercapを実行できません(GTK +の初期化に失敗しました。Xは実行されていますか?)

分類Dev

Goglandテスト設定は常に./で実行されます

分類Dev

Applescript:アプリは常に入力で実行されます

分類Dev

plymouthdは常に5%で実行されます

Related 関連記事

  1. 1

    Wineで640x480のみのゲームを正しく実行するにはどうすればよいですか?

  2. 2

    640x480でスタック-NouveauとnVidiaのグラフィックドライバーを並べて実行しますか?

  3. 3

    640x480でスタック-NouveauとnVidiaのグラフィックドライバーを並べて実行しますか?

  4. 4

    Nvidiaドライバーは更新後にリセットされ、モニターは「不明」になり、640x480でスタックします

  5. 5

    Ubuntu 14.04LTSに更新されました。Dell DimensionC521で画面解像度が640x480のままになっている

  6. 6

    モニターが接続されていないWindowsサーバーを使用したVNC / Steamゲームストリーミングサービスの解像度はわずか640x480です

  7. 7

    ゲストの追加がインストールされた後でも、VMの解像度は640x480を超えることはできません

  8. 8

    すべてのソリューションを試しましたが、モニターの解像度が640x480のままです

  9. 9

    すべてのソリューションを試しましたが、モニターの解像度が640x480のままです

  10. 10

    Debianをフレームバッファ640x480の解像度で起動するように強制することはできません

  11. 11

    Nvidiaで最大解像度が640x480なのはなぜですか?

  12. 12

    Ubuntu 20.0.4.1 LTSで再起動した後、640x480でスタックする

  13. 13

    インストールに関してディスプレイの解像度が640x480のままになっている

  14. 14

    Unity EditorでSteamworks.NETを使用すると、steam_appid.txtファイルを変更しても、常にゲームID480が返されます。

  15. 15

    x86でMonomkbundleを使用してビルドすると、x64では実行されません

  16. 16

    ネストされたクエリは実行されておらず、常にnullを返します。

  17. 17

    PHPUnitは常に「テストは実行されていません!」と出力します。MacOS BigSurで

  18. 18

    cbindを使用して列の.csvファイルを作成しますが、「X」は常に1行目に表示されます

  19. 19

    Swiftのオプションのチェーンは常にiflet構造で実行されますか、それともオプションの疑問符を使用して実行されますか?

  20. 20

    Ubuntuの低解像度VGAモニター(640x480または480p)

  21. 21

    初めてクラスを使用するとき、静的コードは常に実行されますか?

  22. 22

    Python:渡されたときは常にデータをリッスンして実行します

  23. 23

    「最終的に」は常にPythonで実行されますか?

  24. 24

    BackgroundServiceは常に新しいスレッドで実行されますか

  25. 25

    Cookieが設定されている場合は常にJavaScriptの実行を中断します

  26. 26

    DebianでEttercapを実行できません(GTK +の初期化に失敗しました。Xは実行されていますか?)

  27. 27

    Goglandテスト設定は常に./で実行されます

  28. 28

    Applescript:アプリは常に入力で実行されます

  29. 29

    plymouthdは常に5%で実行されます

ホットタグ

アーカイブ