public RtspPlayer(EDecoderType decoderType, EVideoRendererType videoRendererType) { _decoderType = decoderType; _videoRendererType = videoRendererType; _d3dImage.IsFrontBufferAvailableChanged += IsFrontBufferAvailableChanged; _image.Source = _d3dImage; Loaded += RtspPlayer_Loaded; Content = _image; }
public DirectShowSession(RtspPlayer player, String rtspUrl, IntPtr hwnd, EDecoderType decoderType, EVideoRendererType videoRendererType) { _player = player; _rtspUrl = rtspUrl; _hwnd = hwnd; _decoderType = decoderType; _videoRendererType = videoRendererType; _workerThread = new Thread(WorkerThread); _workerThread.Start(); }
private IBaseFilter GetRendererFilter(EVideoRendererType videoRendererType) { switch (videoRendererType) { case EVideoRendererType.EnhancedVideoRenderer: var evr = new EnhancedVideoRenderer(); var evrFilter = (IBaseFilter)evr; // Initialize the EVR renderer with our custom video presenter var evrPresenter = EVRPresenter.Create(); ((IMFVideoRenderer)evr).InitializeRenderer(null, evrPresenter.VideoPresenter); // Configure the presenter with our hWnd var displayControl = (IMFVideoDisplayControl)evrPresenter.VideoPresenter; displayControl.SetVideoWindow(_hwnd); _customPresenter = evrPresenter; _customPresenter.NewSurfaceEvent += _player.NewSurface; _customPresenter.NewFrameEvent += _player.NewFrame; return(evrFilter); case EVideoRendererType.VideoMixingRenderer: var vmr = new VideoMixingRenderer9(); var vmrFilter = (IBaseFilter)vmr; var vmrPresenter = VMR9Presenter.Create(); // Initialize the VMR renderer with out custom video presenter var filterConfig = (IVMRFilterConfig9)vmr; filterConfig.SetRenderingMode(VMR9Mode.Renderless); filterConfig.SetNumberOfStreams(1); var surfaceAllocatorNotify = (IVMRSurfaceAllocatorNotify9)vmr; surfaceAllocatorNotify.AdviseSurfaceAllocator(IntPtr.Zero, vmrPresenter.SurfaceAllocator); vmrPresenter.SurfaceAllocator.AdviseNotify(surfaceAllocatorNotify); _customPresenter = vmrPresenter; _customPresenter.NewSurfaceEvent += _player.NewSurface; _customPresenter.NewFrameEvent += _player.NewFrame; return(vmrFilter); } return(null); }
private IBaseFilter GetRendererFilter(EVideoRendererType videoRendererType) { switch (videoRendererType) { case EVideoRendererType.EnhancedVideoRenderer: var evr = new EnhancedVideoRenderer(); var evrFilter = (IBaseFilter)evr; // Initialize the EVR renderer with our custom video presenter var evrPresenter = EVRPresenter.Create(); ((IMFVideoRenderer)evr).InitializeRenderer(null, evrPresenter.VideoPresenter); // Configure the presenter with our hWnd var displayControl = (IMFVideoDisplayControl)evrPresenter.VideoPresenter; displayControl.SetVideoWindow(_hwnd); _customPresenter = evrPresenter; _customPresenter.NewSurfaceEvent += _player.NewSurface; _customPresenter.NewFrameEvent += _player.NewFrame; return evrFilter; case EVideoRendererType.VideoMixingRenderer: var vmr = new VideoMixingRenderer9(); var vmrFilter = (IBaseFilter)vmr; var vmrPresenter = VMR9Presenter.Create(); // Initialize the VMR renderer with out custom video presenter var filterConfig = (IVMRFilterConfig9)vmr; filterConfig.SetRenderingMode(VMR9Mode.Renderless); filterConfig.SetNumberOfStreams(1); var surfaceAllocatorNotify = (IVMRSurfaceAllocatorNotify9)vmr; surfaceAllocatorNotify.AdviseSurfaceAllocator(IntPtr.Zero, vmrPresenter.SurfaceAllocator); vmrPresenter.SurfaceAllocator.AdviseNotify(surfaceAllocatorNotify); _customPresenter = vmrPresenter; _customPresenter.NewSurfaceEvent += _player.NewSurface; _customPresenter.NewFrameEvent += _player.NewFrame; return vmrFilter; } return null; }