問題タブ [directshow]
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.
c++ - DirectDraw に関する質問 - アプリケーションを通常の Windows アプリケーションとして実行する
ビデオ録画用のアプリケーションを開発しており、ビデオ プレビューにロゴと録画タイマーを重ねたいと考えています。
フルスクリーン アプリケーションを実行しようとしましたが、すべて正常に動作しました。次に、アプリケーションを通常の Windows アプリケーションとして実行しようとしましたが、エラーが返されました。
アプリケーションを通常の Windows アプリとして実行するように変更する方法がある場合は、以下のコードを見てもらえますか?
c# - IStreamBufferMediaSeeking setPosition がレンダリングされないようです
2 つの DirectShow グラフを作成しました。1 つは Hauppauge HD-PVR からキャプチャし、StreamBufferSink に保存します。2 つ目は を使用しStreamBufferSource
、出力を MPEG-2 Demultiplexer に送信し、ビデオを ArcSoft Video Decoder に送信してから、ウィンドウレス モードでセットアップされた Video Mixing Renderer 9 に送信します。
これはすべて、データのプレビューには問題なく機能します。IStreamBufferMediaSeeking.SetPositions
メソッド ( からインターフェイスを取得する)を使用しStreamBufferSource
て再生位置を変更するときに、ストリームの先頭以外の場所に設定すると、ビデオがフリーズして更新が停止します。呼び出すGetCurrentPosition
とIStreamBufferMediaSeeking
、位置がストリーム上で移動していることがわかりますが、ビデオは追従していません。
プログラミングには C# と DirectShowLib-2005 を使用しています。
何が間違っているか、または何が間違っているかを理解する方法についてのアイデアはありますか?
c# - 遅延フィルターを使用しているときに DirectShow グラフ フレームが束ねられないようにする方法は?
SampleGrabber フィルターが何らかの処理を行っている DirectShow グラフがあります。処理には最大 50 ミリ秒かかるため、多くの場合、再生速度が遅くなります。加工のON/OFFが可能です。
私の問題は、処理がしばらくオンになっている場合、オフにすると、ビデオが特定のポイントに達するまでできるだけ速く再生されることです。おそらく、この時点でフレーム時間がストリーム時間と一致し、ラグがなくなります。
処理をオフにすると再生が通常の速度になるように、これを防ぐにはどうすればよいですか? データの処理中にストリーム クロックをオフにすることはできますか? それとも、SampleGrabber フィルターから出てくるサンプルに再びタイムスタンプを付けて、余分なラグを追加するのでしょうか?
これを行う適切な方法を知っている人はいますか?
編集:
以下の回答に示すように、サンプル時間を変更する方法を使用しましたが、サンプルのタイムスタンプのシークと計算に問題がありました。
独自の基準クロックを実装し、処理に時間がかかりすぎる場合はクロックを停止する方がよい方法を見つけました。
mfc - FilterGraphレンダラーの所有者を設定するにはどうすればよいですか?
DirectShowレンダラーをホストしたいCViewがあります。
私は元のコードを書きませんでした。単にコードをクリーンアップしてVS2005に移動しています。これには特定のサードパーティツールのアップグレードが必要だったので、DX/DirectShowを完全に理解せずにコードを少し変更しようとしています。
問題は、実行するとアプリがハングすることです
m_pDockWndはCViewです。プレビューモードではこれを実行できますが、キャプチャモードでは実行できません。キャプチャモードでは、アプリがハングします。
レンダリングウィンドウを所有していない場合は、問題はありません(ただし、キャプチャウィンドウはデスクトップによって所有されているため、機能しません)。
また、キャプチャウィンドウには、デスクトップが所有しているときにビジーカーソルが表示されます。おそらく、実際には機能していませんが、少なくともアプリがハングしていません。ハングとは、アプリがユーザー入力に応答しないが、バックグラウンドスレッドは引き続き実行されることを意味します。
更新:古いバージョンのDirectX(2006年8月)を使用していました。Vista SDKにパッケージ化されたDirectShowのものに対してコンパイル/リンクしましたが、サイコロはありません。
multithreading - ロックせずにスレッドから別のスレッドにデータを出力する方法は?
DirectShow アプリケーションを開発しています。デッドロックの問題が発生しました。この問題は、スレッドから呼び出されたコールバック関数でロックを取得したことが原因のようです。これは、MSDN フォーラムで質問したクエストです。
ここで、そのスレッドでロックを取得することを避ける必要があります。しかし、問題は、オーディオを別のスレッドに出力する必要があることです。どうすればロックせずにデータを別のスレッドに入れることができますか?
win32 sdk の PostMessage を使用して別のスレッドにデータを投稿できると言う人がいます。ただし、メッセージを取得するには、Windows プログラムを実行する必要があります。私のプログラムは Python C++ 拡張モジュールです。メッセージをプルするループを追加するのは非常に難しい場合があります。したがって、ロックせずにスレッド間でデータを渡す別の方法を考えています。(実際には...プロデューサースレッドはロックできませんが、コンシューマースレッドはロックできます。)
ロックするかしないか、それが問題だ。
では、問題はどのように行うかです。
ありがとう。
- - - 編集 - - -
デッドロックが発生した理由はわかっていると思いますが、それは DirectShow の問題ではない可能性があります。
メインスレッドは Python が所有しており、stop を呼び出します。つまり、GIL を保持します。そしてスレッドリターンでDirectShowのコールバック待ちを停止。ただし、コールバックは GIL を取得します。
このように見えます
メイン(GILを保持) -> 停止(コールバックを待機) -> コールバック(GILを待機) -> GIL(メインスレッドで保持)
くそ!そのため、マルチスレッドはあまり好きではありません。何はともあれ、助けてくれてありがとう。
windows - DirectShowでリソースからビデオを再生するにはどうすればよいですか?
ダイアログのコントロールでいくつかのビデオの1つを再生するようにアプリケーションを拡張しています。ウィンドウレスのサンプルから始めて、これを機能させましたが、ビデオはメインの実行可能ファイルとは別のファイルである必要があります。
パッケージングの観点からの理想的なシナリオは、ビデオがリソースとして実行可能ファイルに含まれることです。私はこれについて少しグーグルをしました、そしてかなりの量の「誰かがこれをするべきです」、そしてAsyncサンプルへのいくつかのポインタがありますが、そこから私が望む場所に到達する方法は明確ではありません。
誰かがこれを行う簡単な方法を知っていますか?これはコーナーケースではないようですが、これが箱に入っていなかったことに少し驚いています。
windows - Windows でのビデオ キャプチャのための DirectShow の代替手段
現在ビデオ キャプチャに DirectShow を使用しているプログラムの更新を検討しています。DirectShow はうまく機能しているように見えますが、調査すべきより強力な、または最新の SDK または API があるかどうか疑問に思っていました。役立ついくつかの機能は、次のようなものです。
- キャプチャ中に一貫したフレームレート (NTSC のフレーム間で 33ms) を提供します。
- DirectShow 互換のキャプチャ デバイスで作業します。
- お客様のPCに追加のライセンスをインストールする必要はありません。
- ビデオの同時プレビューとハードウェア エンコードを可能にします。
- C++/MFC アプリケーションに統合できる。
私はLeadTools Multimedia Capture SDKとVisioForge Capture SDKとMicrosoft Media Foundationを調べましたが、これらの代替手段の 1 つに時間やお金を投資する前に、他の人が何をうまく使用しているかを知りたかっただけです。これが商用製品かオープンソース製品かは気にしません。
編集: 特定の問題を解決しようとする試みには感謝していますが、この質問は DirectShow の代替案に関するものでした。そのため、特定の問題への参照をすべて削除しました。それを解決するには、別の質問を待つ必要があります。
windows-mobile - Windows Mobile で URL から mp3 を再生する方法
Windows Mobile 5 で URL から mp3 ファイルを再生する方法を探しています。
wmplib.WindowsMediaPlayer.url プロパティを使用して見つけた例は、デバイス上のファイルでは機能しますが、http: url では機能しないようです。関数は例外をスローせずに成功したようですが、オーディオは再生されません。player.settings.volume = 100 を試し、player.controls.play も呼び出しました。この方法は、Windows デスクトップ アプリケーションでは機能しますが、モバイル デバイスでは機能しません。
DirectShow を使用するもう 1 つのオプションは単純ではありません。私が調べたさまざまな Web サイトによると、Windows Mobile には Mpeg1 (または mp3) スプリッター/パーサー フィルターが含まれていません。2 つのサンプル フィルターのソース コードを見つけましたが、どちらも Windows Mobile 用に正常にコンパイルできません。
Windows Mobile 用のプリコンパイル済み、できれば無料の mp3 パーサー/スプリッター フィルター、またはソースからサンプルの 1 つをコンパイルできるように Visual Studio プロジェクトをセットアップするための明確な手順を知っている人はいますか?
video - DirectShow: BITMAPINFOHEADER と ISampleGrabber が異なるサイズを返す
BITMAPINFOHEADER
構造によって報告され、RichFLV などの多くの FLV メタデータ エディターによって検証された400 x 171 ピクセルの特定の FLV (VP6/LAME) ファイルがあります。
ただし、ISampleGrabber
結果のサンプル (ピクセルあたり 3 バイト) を使用してそこからサンプルを取得すると、予想どおり 205,200 バイト (400 x 171 x 3) ではなく、204,000 バイト (400 x 170 x 3) しかありません。
400 x 170 相当のデータのみを 400 x 171 オブジェクトのコンストラクターに押し込もうとしていると、Bitmap
かなり動揺して A/V 例外が発生します。
これをハックして、「近いが期待どおりではない」サンプルサイズを検出できますが、その過程で垂直方向の高さの 1 ピクセルがどこに移動したかを知りたいです。私の推測では、幅/高さの奇数値をサポートせず、それを削除している危険なフィルターですが、これを確認する簡単な方法がわかりません。
何が起こっているのか、それを確認する方法を知っている人はいますか?
(PS: 私は C/C++ 開発者ではないので、過度の使用を伴う解決策は避けてください)