protected override void BuildGraph(string path) { // Build partial graph IPin videoOutput = null, audioOutput = null; { VideoRendererDefault videoRenderer = new VideoRendererDefault(); DSoundRender audioRenderer = new DSoundRender(); try { GraphBuilder.AddFilter(videoRenderer as IBaseFilter, "Default Video Renderer"); GraphBuilder.AddFilter(audioRenderer as IBaseFilter, "Default Audio Renderer"); GraphBuilder.RenderFile(path, null); // Get Connected Pins { IPin videoInput = Util.FindInputPin(videoRenderer as IBaseFilter); videoInput.ConnectedTo(out videoOutput); Util.FreePin(videoInput); IPin audioInput = Util.FindInputPin(audioRenderer as IBaseFilter); audioInput.ConnectedTo(out audioOutput); Util.FreePin(audioInput); } GraphBuilder.RemoveFilter(videoRenderer as IBaseFilter); GraphBuilder.RemoveFilter(audioRenderer as IBaseFilter); } finally { Marshal.ReleaseComObject(videoRenderer); Marshal.ReleaseComObject(audioRenderer); } } // build video grabber if (videoOutput != null) { this.VideoGrabber = BuildGrabber("Video", videoOutput, MEDIATYPE_Video, MEDIASUBTYPE_RGB32, FORMAT_VideoInfo, OnVideoFrame) as ISampleGrabber; this.VideoInfo = GetMediaFormat <VideoInfoHeader>(VideoGrabber); Marshal.ReleaseComObject(videoOutput); } // build audio grabber if (audioOutput != null) { this.AudioGrabber = BuildGrabber("Audio", audioOutput, MEDIATYPE_Audio, MEDIASUBTYPE_PCM, FORMAT_WaveFormatEx, OnAudioFrame) as ISampleGrabber; this.AudioInfo = GetMediaFormat <WaveFormatEx>(AudioGrabber); Marshal.ReleaseComObject(audioOutput); } }
private async void Button_Click(object sender, RoutedEventArgs e) { OpenFileDialog lopenFileDialog = new OpenFileDialog(); lopenFileDialog.AddExtension = true; var lresult = lopenFileDialog.ShowDialog(); if (lresult != true) { return; } IBaseFilter lDSoundRender = new DSoundRender() as IBaseFilter; m_pGraph.AddFilter(lDSoundRender, "Audio Renderer"); int k = 0; IPin[] lAudioRendererPins = new IPin[1]; IEnumPins ppEnum; k = lDSoundRender.EnumPins(out ppEnum); k = ppEnum.Next(1, lAudioRendererPins, IntPtr.Zero); var lCaptureManagerEVRMultiSinkFactory = await CaptureManagerVideoRendererMultiSinkFactory.getInstance().getICaptureManagerEVRMultiSinkFactoryAsync(); uint lMaxVideoRenderStreamCount = await lCaptureManagerEVRMultiSinkFactory.getMaxVideoRenderStreamCountAsync(); if (lMaxVideoRenderStreamCount == 0) { return; } List <object> lOutputNodesList = await lCaptureManagerEVRMultiSinkFactory.createOutputNodesAsync( IntPtr.Zero, mEVRDisplay.Surface.texture, 1); if (lOutputNodesList.Count == 0) { return; } IBaseFilter lVideoMixingRenderer9 = (IBaseFilter)lOutputNodesList[0]; var h = m_pGraph.AddFilter(lVideoMixingRenderer9, "lVideoMixingRenderer9"); IPin[] lVideoRendererPin = new IPin[1]; k = lVideoMixingRenderer9.EnumPins(out ppEnum); k = ppEnum.Next(1, lVideoRendererPin, IntPtr.Zero); IBaseFilter m_SourceFilter = null; m_pGraph.AddSourceFilter(lopenFileDialog.FileName, null, out m_SourceFilter); IEnumPins lEnumPins = null; m_SourceFilter.EnumPins(out lEnumPins); IPin[] lPins = new IPin[1]; while (lEnumPins.Next(1, lPins, IntPtr.Zero) == 0) { IEnumMediaTypes lIEnumMediaTypes; lPins[0].EnumMediaTypes(out lIEnumMediaTypes); AMMediaType[] ppMediaTypes = new AMMediaType[1]; while (lIEnumMediaTypes.Next(1, ppMediaTypes, IntPtr.Zero) == 0) { var gh = ppMediaTypes[0].subType; if (ppMediaTypes[0].majorType == DirectShowLib.MediaType.Video) { k = m_pGraph.Connect(lPins[0], lVideoRendererPin[0]); } } foreach (var item in lPins) { k = m_pGraph.Render(item); } } IMediaControl lIMediaControl = m_pGraph as IMediaControl; k = lIMediaControl.Run(); }
protected override void BuildGraph(string path) { // Build partial graph IPin videoOutput = null, audioOutput = null; { VideoRendererDefault videoRenderer = new VideoRendererDefault(); DSoundRender audioRenderer = new DSoundRender(); try { GraphBuilder.AddFilter(videoRenderer as IBaseFilter, "Default Video Renderer"); GraphBuilder.AddFilter(audioRenderer as IBaseFilter, "Default Audio Renderer"); GraphBuilder.RenderFile(path, null); // Get Connected Pins { IPin videoInput = Util.FindInputPin(videoRenderer as IBaseFilter); videoInput.ConnectedTo(out videoOutput); Util.FreePin(videoInput); IPin audioInput = Util.FindInputPin(audioRenderer as IBaseFilter); audioInput.ConnectedTo(out audioOutput); Util.FreePin(audioInput); } GraphBuilder.RemoveFilter(videoRenderer as IBaseFilter); GraphBuilder.RemoveFilter(audioRenderer as IBaseFilter); } finally { Marshal.ReleaseComObject(videoRenderer); Marshal.ReleaseComObject(audioRenderer); } } // build video grabber if (videoOutput != null) { this.VideoGrabber = BuildGrabber("Video", videoOutput, MEDIATYPE_Video, MEDIASUBTYPE_RGB32, FORMAT_VideoInfo, OnVideoFrame) as ISampleGrabber; this.VideoInfo = GetMediaFormat<VideoInfoHeader>(VideoGrabber); Marshal.ReleaseComObject(videoOutput); } // build audio grabber if (audioOutput != null) { this.AudioGrabber = BuildGrabber("Audio", audioOutput, MEDIATYPE_Audio, MEDIASUBTYPE_PCM, FORMAT_WaveFormatEx, OnAudioFrame) as ISampleGrabber; this.AudioInfo = GetMediaFormat<WaveFormatEx>(AudioGrabber); Marshal.ReleaseComObject(audioOutput); } }