投稿日 | : 2004/09/27(Mon) 13:48 |
投稿者 | : りっとっと |
Eメール | : |
URL | : |
タイトル | : Re: DirectShowでタイムシフト |
カメラ関係(動画関係)はプログラミングしたことがありませんので正しい返答はできませんが、
マイクロソフトのプログラムを見て処理概要を見てみると、
1.ストリームバッファシンクの初期化
2.ストリームバッファソースの初期化
3.ストリームバッファソースの実行
4.ストリームバッファシンクの実行
という流れですよね。
つまり、ストリームバッファソースを実行してできる"C:\Example.wmv"ファイルを
ストリームバッファシンクでコントロールを行うという手順となっております。
ですので、ストリームバッファシンクの実行は、ストリームバッファソースの実行より後
に行わなければならないかと思います。
YASさんのプログラムを見てみますと、Form_Load
Set mobjMCSink = New FilgraphManager
Dim objFGSink As IGraphBuilder
Set objFGSink = mobjMCSink
Dim objSBESink As New MSVidStreamBufferSink
Call objFGSink.AddFilter(objSBESink.SBESink, "SBESink")
objSBESink.SinkName = "c:\temp.avi"
Call RenderOutPin(mobjMCSink, AddFilter(mobjMCSink, "microsoft dv camera and vcr"))
objSBESink.NameSetLock
mobjMCSink.Run '★
となっており、ストリームバッファシンクの初期化及び実行を行っていますが、
ストリームバッファソースの実行が行われていないのにもかかわらず
(★のところで)ストリームバッファシンクを実行していることになりますので、
ここがうまくいかない原因ではないでしょうか。
Form_Load時では、ストリームバッファシンクの初期化のみを行い、
Command1_Clickで、
MSVidCtlSrc.Run
mobjMCSink.Run
という感じでやってみてはいかがでしょうか。
あくまでも私が受け取った印象での返答ですので、うまくいかないかもしれません。