C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: AxWindowsMediaPlayerによる動画制御


(過去ログ 130 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■76882 / inTopicNo.1)  AxWindowsMediaPlayerによる動画制御
  
□投稿者/ シン兄 (1回)-(2015/08/26(Wed) 01:26:15)

分類:[.NET 全般] 

2015/08/26(Wed) 01:28:53 編集(投稿者)

AxWindowsMediaPlayerを使用して、動画を一時停止させたいのですが、うまくいかず知恵を貸してください。

【開発環境】 
 VS2013 C#
 .NET Framework 4.5
 Win7(64)

【プログラム】
private void button1_Click(object sender, EventArgs e)
{

〜中略〜

axWindowsMediaPlayer1.uiMode = "none";
axWindowsMediaPlayer1.URL = @"C:\(略)\test.mp4";
axWindowsMediaPlayer1.Ctlcontrols.currentPosition = TS;
axWindowsMediaPlayer1.Ctlcontrols.play();
//axWindowsMediaPlayer1.Ctlcontrols.stop();
axWindowsMediaPlayer1.Ctlcontrols.pause();
}

【質問】
TSにはある時間(秒)が入っており、ボタン(button1)が押されたら、
test.mp4をTS秒のところで、一時停止した状態で表示するようにしたいのですが、
上記を実行すると再生されたままの状態となり困っています。

Stopを有効、Pauseを無効にすると、動画は全く再生されません。(Play後、すぐにStopしている?)
Pauseだけを実装するなど、色々なパターンを試しましたが、一時停止させることができません。

ちなみに、他のボタン(button2)にPause処理を実装すると、そのボタンを押すことで一時停止させることができますが、
今回はbutton1の処理だけで一時停止させたく、どのように処理させるとよいかご教授頂きたいです。

よろしくお願いいたします。</pre></pre>
引用返信 編集キー/
■76893 / inTopicNo.2)  Re[1]: AxWindowsMediaPlayerによる動画制御
□投稿者/ とおりすがり (2回)-(2015/08/26(Wed) 14:04:34)
AxWindowsMediaPlayerってのはWindow Media Playerのラッパーオブジェクトなんですね。
再生ファイルがmp4ってことは内部的にはDirect Showを呼び出すようです。言語は違い
ますが全く同じ現象でプロジェクトを放り出したくなるくらい悩みました。

たぶんAxWindowsMediaPlayerを使う場合はその現象は回避できません。方法としては
axWindowsMediaPlayer1.Ctlcontrols.currentPositionは読み書き可能なプロパティ
なのでTSより少し前の時間を指定してTSぴったりの時間になったらポーズすると
いう方法で擬似的に結果を得ることができます。
動画のレンダラがVMR-7(Windows Vista以降はサポートされないことになっている)か
VMR-9(確かこれもWindows Vista以降・・・)の場合はcurrentPositionを指定すると
再生中かポーズ中ならその位置にシークして再レンダリング(描画)するのですが
EVR(エンハンスビデオレンダラ)ではシークだけで再レンダリング(描画)しない
ので見た目上どうがんばっても希望位置に移動という結果が得られません。

あと、目的時間前後の全フレームをビットマップとして確保して擬似的に再現するの
かな。プレイステーションでこれをやったことがあります。(ビットマップじゃ
ありませんが。プレステは)

引用返信 編集キー/
■76915 / inTopicNo.3)  Re[2]: AxWindowsMediaPlayerによる動画制御
□投稿者/ シン兄 (2回)-(2015/08/27(Thu) 20:09:30)
No76893 (とおりすがり さん) に返信

とおりすがりさん、ご回答ありがとうございます。

やはり、AxWindowsMediaPlayerを使用する場合は回避できないんですね。
DirectShowLib-2015を使用して制御する形に変更したところ、思い通りに制御できるようになりました。
ありがとうございました。
解決済み
引用返信 編集キー/
■76917 / inTopicNo.4)  Re[3]: AxWindowsMediaPlayerによる動画制御
□投稿者/ とおりすがり (3回)-(2015/08/27(Thu) 22:29:31)
うーん、DirectShowLib-2015ってググってもないんですけど。せめてurlくらい教えてくれても
いいと思うのですが。
結局、自分ではEVRな環境では「思い通りに制御」できてないのですわ。

引用返信 編集キー/
■76931 / inTopicNo.5)  Re[4]: AxWindowsMediaPlayerによる動画制御
□投稿者/ シン兄 (3回)-(2015/08/29(Sat) 00:25:21)
No76917 (とおりすがり さん) に返信
> うーん、DirectShowLib-2015ってググってもないんですけど。せめてurlくらい教えてくれても
> いいと思うのですが。

すみません、DirectShowLib-2005の誤りでした。

参考にしたのは下記です。
初めは2番目のURLにある「QuartzTypeLib」を使おうとしましたが、なぜか.dllを追加しようとするとエラーになってしまい、
1番目のURLにあるVB.NETと照らし合わせながら実装しました。

http://www.ramanet.net/114/vbnet-directshow.html
http://www.independence-sys.com/weblog/item/212

mediaControl.Run()の後に、mediaControl.Pause()を呼んであげると一時停止します。

また、下記のようにすると、任意のタイムスタンプから再生可能です。
IMediaPosition mediaPositon = (IMediaPosition) filterGraph;
mediaPositon.put_CurrentPosition(TS);
引用返信 編集キー/
■76937 / inTopicNo.6)  Re[5]: AxWindowsMediaPlayerによる動画制御
□投稿者/ とおりすがり (4回)-(2015/08/30(Sun) 08:52:09)
ご返答、ありがとうございます。

ただ当方の命題である「任意の時間の停止状態を得る」ってのは結局できていない
ように見えますが、どうです?
Runの直後のPauseも、任意の時間からの再生開始もできるのは当方でも確
認しています。再生開始して停止したら時間がズレるため命題を満たしていません。

やっぱりダメなのかなぁ。
引用返信 編集キー/
■76960 / inTopicNo.7)  Re[6]: AxWindowsMediaPlayerによる動画制御
□投稿者/ シン兄 (4回)-(2015/08/31(Mon) 18:26:00)
No76937 (とおりすがり さん) に返信

> 再生開始して停止したら時間がズレるため命題を満たしていません。
コンマ数秒でもズレてはいけないとなると難しいのかもしれませんね・・・。

> ただ当方の命題である「任意の時間の停止状態を得る」ってのは結局できていないように見えますが、どうです?
私の場合はそこまでシビアである必要はなく、任意のタイミング(+1秒以内くらい)でポーズしてくれれば十分でしたので、気にしていませんでした。
AxWindowsMediaPlayerを使用していたときは、なぜかポーズが全くできませんでしたので、停止(ポーズ)状態を得るという目標は一応達成できています。
となると、とおりすがりさんが初めに言われていたように、任意の時間より少し前の時間を指定するしかないのかもしれないですね・・・。
引用返信 編集キー/
■76969 / inTopicNo.8)  Re[7]: AxWindowsMediaPlayerによる動画制御
□投稿者/ とおりすがり (5回)-(2015/09/01(Tue) 23:08:43)
解決済みのネタにレスしていただき恐縮です。コンマ数秒どころか1フレームでもズレたら
ダメな案件でした。
やはりEVRでは実現できないようですね。ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -