0
私は自分のvb.netプログラムにウェブカメラストリームをキャプチャしようとするためにダイレクトショーを使用しています。私は、行を変更する場合DirectShow VB.netは録画フォーマットを変更できません
Private Sub CaptureVideo()
Dim hr As Integer = 0
Dim sourceFilter As IBaseFilter = Nothing
Try
GetInterfaces()
hr = Me.CaptureGraphBuilder.SetFiltergraph(Me.GraphBuilder)
Debug.WriteLine("Attach the filter graph to the capture graph : " & DsError.GetErrorText(hr))
DsError.ThrowExceptionForHR(hr)
sourceFilter = FindCaptureDevice()
hr = Me.GraphBuilder.AddFilter(sourceFilter, "Video Capture")
Debug.WriteLine("Add capture filter to our graph : " & DsError.GetErrorText(hr))
DsError.ThrowExceptionForHR(hr)
hr = Me.CaptureGraphBuilder.RenderStream(PinCategory.Preview, MediaType.Video, sourceFilter, Nothing, Nothing)
Debug.WriteLine("Render the preview pin on the video capture filter : " & DsError.GetErrorText(hr))
DsError.ThrowExceptionForHR(hr)
Dim pSink As DirectShowLib.IFileSinkFilter = Nothing
Dim pMux As DirectShowLib.IBaseFilter = Nothing
hr = Me.CaptureGraphBuilder.SetOutputFileName(DirectShowLib.MediaSubType.Avi, "c:\video\myvid1.avi", pMux, pSink)
Debug.WriteLine("Set File : " & DirectShowLib.DsError.GetErrorText(hr))
DirectShowLib.DsError.ThrowExceptionForHR(hr)
hr = Me.CaptureGraphBuilder.RenderStream(DirectShowLib.PinCategory.Capture, DirectShowLib.MediaType.Video, sourceFilter, Nothing, pMux)
Debug.WriteLine("Render the capture pin on the video capture filter : " & DirectShowLib.DsError.GetErrorText(hr))
DirectShowLib.DsError.ThrowExceptionForHR(hr)
Marshal.ReleaseComObject(sourceFilter)
SetupVideoWindow()
rot = New DsROTEntry(Me.GraphBuilder)
hr = Me.MediaControl.Run()
Debug.WriteLine("Start previewing video data : " & DsError.GetErrorText(hr))
DsError.ThrowExceptionForHR(hr)
Me.CurrentState = PlayState.Running
Debug.WriteLine("The currentstate : " & Me.CurrentState.ToString)
Catch ex As Exception
MessageBox.Show("An unrecoverable error has occurred.With error : " & ex.ToString)
End Try
End Sub
しかし:HERESに働くサブルーチンの実行は
:
hr = Me.CaptureGraphBuilder.SetOutputFileName(DirectShowLib.MediaSubType.Asf, "c:\video\myvid1.wmv", pMux, pSink)
に
hr = Me.CaptureGraphBuilder.SetOutputFileName(DirectShowLib.MediaSubType.Avi, "c:\video\myvid1.avi", pMux, pSink)
を私は黒い画面とエラーが出ます
基本的に私はあなたがしようとして、あなたがRenderStream
を使用して接続することができます前に、WM ASF Writer
を設定する必要があります(のDivX/XviDのようなものが細かすぎるだろう)の代わりに、非圧縮のAVIのWMVに記録すること
おかげ
私はすでにそれをやっていると思っていました。私はそのリンクを読んだことがありますが、それは本当に理解できません。私に与えることのできるポインタはありますか? – TMB87
「プロファイルの設定の詳細については、「DirectShowでASFファイルを作成する」を参照してください。 http://msdn.microsoft.com/en-us/library/windows/desktop/dd375008%28v=vs.85%29.aspxこれは 'SetOutputFileName'の後で' RenderStream'の前に ' IConfigAsfWriter :: ConfigureFilterUsingProfile' http://msdn.microsoft.com/en-us/library/windows/desktop/dd312023%28v=vs.85%29.aspxあなたの新しく追加されたASFライターを設定するために。たとえば、ビデオのみをキャプチャする場合は、ビデオオンリープロファイルを適用する必要があります。 –