DirectShow導入
以下のコマンドを走らせると、QuartzTypeLib.dllができる。
“C:\Program Files\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\TlbImp.exe” “C:\windows\System32\quartz.dll”
できたら、参照設定に直接追加する。
ちなみに、DirectShowでmp4を再生する場合、
ffdshow
をインストールする。
DirectShowフィルタのみチェックでOK。
Haali Media Splitter
をインストールする。
Disable MPC internal Matroska splitter
のチェックを外す。
GraphEdit
DirectShowを確認できるソフトだが、Microsoft SDKs\WIndows\V7.1\Bin\
には見つからなかった。最終的にGraphStudioNextというのが近いらしく、これを利用することに。
非公式だが、以下からだとgraph editが行けるらしい。
http://www.digital-digest.com/dvd/downloads/showsoftware_graphedit_141.html
とりあえず動画の再生
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Runtime.InteropServices; using QuartzTypeLib; namespace TestMovie { public partial class Form1 : Form { private FilgraphManager fgm = null; private IMediaControl imc = null; private IVideoWindow ivw = null; private IMediaEventEx ime = null; private IBasicVideo ibv = null; private IMediaPosition imp = null; public Form1() { InitializeComponent(); button1.Click += new EventHandler(FileOpen); } private void ComRelease() { if (fgm != null) Marshal.ReleaseComObject(fgm); if (ibv != null) Marshal.ReleaseComObject(ibv); if (ivw != null) Marshal.ReleaseComObject(ivw); } private void FileOpen(object sender, EventArgs e) { ComRelease(); OpenFileDialog fd = new OpenFileDialog(); if (DialogResult.OK == fd.ShowDialog()) { try { fgm = new FilgraphManager(); fgm.RenderFile(fd.FileName); ibv = (IBasicVideo2)fgm; ivw = (IVideoWindow)fgm; int h = 0; int w = 0; ibv.GetVideoSize(out w, out h); fgm.Run(); } catch (Exception exp) { MessageBox.Show(exp.Message); ComRelease(); } } } } } |