問題タブ [dspack]

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.

0 投票する
1 に答える
623 参照

delphi - DirectShowフィルターが通話中にSkype5.xをクラッシュさせます。4.x、グラフ編集およびその他のプログラムで正常に動作します

DSPACKコンポーネントライブラリを使用してDelphi6で記述されたDirectShowプッシュソースビデオフィルターがあります。フィルタを使用しているSkypeクライアントが5.x以降でない限り、Skype通話中にフィルタは正常に実行されます。5.xでは、Skypeクライアントがハングするまで非常に遅くなり、データ実行防止の警告や一般的なMicrosoftの「このプログラムがクラッシュしました」ダイアログボックスなど、さまざまな悪いクラッシュが発生します。すぐにクラッシュする場合もあれば、通話開始から約30秒以上後にクラッシュする場合もあります。

次のコンテキストでは、エラーなしでビデオフィルターを実行することもできます。

  • Skypeで使用するビデオデバイスを選択するときに表示されるビデオフィルタープレビューウィンドウでSkype5.xを使用します(通話ではなく、[ビデオオプションの選択]ダイアログページで)。
  • Skype 4.xクライアント(通話中および通話中に完全に実行されます)
  • グラフ編集
  • DSPACKTVideoWindowインスタンス
  • ウェブカメラフィードを利用する他のプログラム

私はWebでいくつかの調査を行い、Skype5.xとクラッシュに関するかなりの数の苦情を見つけました。私が読んだスレッドは、5.7ベータ版のダウンロードを提案しました。私はそれを試しましたが、役に立ちませんでした。動作は少し良くなりますが、それでもクラッシュします。

必要最低限​​のテストとして、FillBuffer()メソッドを変更して、通常Skypeに中継する外部ビデオストリームの代わりに、起動時にロードする静的ビットマップを配信するようにしました。それでもクラッシュします。また、FastMM4を設定してプッシュソースフィルターDLLを実行し、FillBuffer()呼び出しとメディアサンプルをダウンストリームピンに配信する呼び出しごとにフルメモリスキャンを実行しようとしました。エラーは一切ありません。

Skypeは明らかに他のWebカメラドライバーと連携するか、Webで大きな抗議が発生する可能性があるため、フィルターが気に入らないことを何をしている可能性がありますか?

更新:さらにテストしたところ、奇妙なことに遭遇しました。元々、私のフィルターでのGetMediaType()呼び出しには4つの形式がありました。私はそれを1つの形式にノックダウンしました。圧縮がBI_RGBに設定された24ビットです。これは、外部で受信してからSkypeに渡すものだからです。ログイン後にDirectShowフィルタースキャンを実行すると、Skypeからすぐに障害が発生し始め、GetStreamCaps()の呼び出し中に障害が発生しました。Skypeにはデバッグ防止コードがあるため、すべての行の後にGetStreamCaps()呼び出しにトレースメッセージを入念に追加し、そのメディア形式変数に最初にアクセスしようとしたときに発生することを発見しました(以下を参照)。)。SkypeがDirectShowフィルターに渡すメモリ領域にアクセスできないようです。以前の4つに対して提供するメディア形式が1つしかないために、障害がより早く発生する理由は不明です。

これは私の側のまったくの推測ですが、Skypeと私のフィルターの間で何らかの奇妙なメモリエリアアクセス権限エラーが発生している可能性はありますか?Skypeが、通話を開始する前にデータ実行防止エラーを報告することがあり、他の一般的なクラッシュもあるという事実から、何かエキゾチックなことが起こっているのではないかと思います。コードブロックとしてマークされた領域に書き込もうとすると、DEPエラーが発生します。Skypeが私に渡すポインターが、私が書き込めない奇妙な場所や保護された場所を指しているようです。

要約すると、SkypeがGetStreamCaps()を呼び出すときにDirectShowフィルターにアクセスするたびに、通話を開始する前に、またはビデオデバイスの選択画面にアクセスする前に、エラーが100%発生するようになりました。関連するコードスニペットは次のとおりです。

更新2:コードに問題がありますが、何がわかりません。Graph Editは、SkypeのようにGetStreamCaps()を呼び出しません。さらにいくつかのトレースステートメントを追加しましたが、上記のコードでは、DSPACK CreateMediaType()呼び出しによって返されるメディアタイプオブジェクトにNIL pbFormatフィールドがあるため、高速障害を説明していることがわかりました。適切に構成されたpbFormatフィールドを取得するために私が何をする必要があるかを誰かが知っている場合は、私に知らせてください。以下は、CreateMediaType()操作を実行するDSPACKのコードです。

0 投票する
1 に答える
1246 参照

delphi - DSPack: PushSource を videocap に接続する方法は?

フィルターを使用してキャプチャしたいのですがPushSource、それを「videocap」サンプルに「接続」する必要があります。このフィルターはスタンドアロン フィルターではないため、キャプチャ デバイスとして列挙することはできません。また、そのように変換したくありません。

0 投票する
0 に答える
791 参照

delphi - dspack、pushsource 使い方は?

カスタム Directshow フィルターを使用/インストールしてフィルターを登録する方法などのトピックを見ましたが、使用方法のコードはありません。そのフィルタ(pushsource、pushdesktop)を実際に使用してAVIに保存する方法のサンプルを誰かに見せてもらえますか?

0 投票する
1 に答える
4682 参照

delphi - TVideoWindowに表示せずにDelphi/DSPackを使用してフレームをキャプチャするにはどうすればよいですか?

DSpackには、DirectShow互換のビデオデバイスを再生し、ビデオフレームを同時にキャプチャするためのサンプルコードがあります。TVideoWindowは、ビデオ(Firgure-1)を表示するためにFilterGraphに接続されています。TVideoWindowを削除すると、オペレーティングシステム(Windows)は自動的にActiveMovieを起動し、別のウィンドウにビデオを表示します(図-2)。

DSPackを使用して、GUIコンポーネントを使用せずに、またビデオを表示せずにビデオフレームをキャプチャする方法はありますか?

DSPackフォーラムには、NullRendererフィルターについての言及がいくつかありますが、その使用方法に関するドキュメントや例はありません。GraphEditで直接ビデオレンダラーをヌルレンダーに手動で置き換えると、それを達成できるようです(図-3)。

コード内ですべての操作を行うことにより、図3に示す結果をどのように達成できますか?DSPackは、ヌルレンダラーを作成する方法を説明していません。

図1

図-2

図-3

これは私がやったことです(これまでのところ)

ReassignSampleGrabberOutput直前に以下に電話してくださいfilterGraph.Play;

0 投票する
1 に答える
608 参照

delphi - TSysDevEnum.GetMoniker を使用せずに既知のビデオ キャプチャ ソースで TFilter を初期化する方法は?

TSysDevEnum.GetMoniker(...) を使用せずに、既知のビデオ キャプチャ ソースで TFilter オブジェクトを作成/初期化することは可能ですか?

ビデオ キャプチャ ソースの名前とその他の詳細は既にわかっており、GraphEdit Filter Browser で取得できます。その意図は、TFilter の初期化を高速化し、それをプログラムで FilterGraph にアタッチすることです。

0 投票する
1 に答える
2225 参照

delphi - DsPackコンポーネントによってビデオファイルからフレームビットマップを取得するにはどうすればよいですか?

DsPackコンポーネントによってビデオファイルからビットマップを取得することは可能ですか?

この場合、私はこのコードを使用しています。しかし、スクリーンショットを撮ることはできません画像:

このコードを修正することは可能ですか?

0 投票する
0 に答える
617 参照

delphi - How to Prevent Black Background When Resizing a DSPack TVideoWindow

Is there a way to prevent the black background when resizing the window while a video is playing?

I've tried setting the TVideoWindow.Color and the TVideoWindow.Canvas.Color to white but every time the window is resized a black background appears during the resize action.

This also happens for a brief split second when a new video is loaded.

0 投票する
1 に答える
1197 参照

delphi - DSPack を使用してビデオをループするにはどうすればよいですか?

Delphi 2010 内から DSPack を使用する非常に単純なプログラムがあります。TFilterGraph と TVideoWindow を含むフォームがあります。ビデオはうまく再生され、レンダリングされます。ビデオが終了したときに最初にループバックする方法を理解できないようです。

DSPack を使用してビデオを自動的にループさせるにはどうすればよいですか?

コード

DFM

0 投票する
1 に答える
2225 参照

delphi - DSPack を使用して MemoryStream からビデオをレンダリングするにはどうすればよいですか?

Delphi 2010 内で TFilterGraph と TVideoWindow を使用して、ファイル システムからビデオをレンダリングできます。ファイル システムから直接ではなく、MemoryStream からビデオをレンダリングしたいと考えています。コンセプトは次のとおりです。

  1. ビデオをデータベース blob フィールドに保存します。
  2. blob (ビデオ) を MemoryStream に読み込みます。
  3. DSPack を使用してブロブ (ビデオ) をレンダリングします。

ファイルの代わりに MemoryStream を使用するように FilterGraph に指示するにはどうすればよいですか?

0 投票する
1 に答える
765 参照

delphi - DSpack と Delphi7 を使用してビデオ ファイルのプロパティを決定する

ビデオの長さなど、ビデオ ファイル (MP4 など) からさまざまなプロパティを特定したいのですが、マルチメディアを扱った経験がありません。

ありがとう

マイク