2014-01-20 3 views
0
object vdeosource; 
DsDevice device1 = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice)[1]; 
Guid baseIdentifier = typeof(IBaseFilter).GUID; 
device1.Mon.BindToObject(null, null, ref baseIdentifier, out vdeosource); 
IBaseFilter sourceFilter = vdeosource as IBaseFilter; 
graphBuilder.AddFilter(sourceFilter, "Source"); 

hr = captureGraphBuilder.SetFiltergraph(this.graphBuilder); 
DsError.ThrowExceptionForHR(hr); 

mpeg2Demux = (IBaseFilter)new MPEG2Demultiplexer(); 

object cross; 
captureGraphBuilder.FindInterface(FindDirection.UpstreamOnly, null, sourceFilter, typeof(IAMCrossbar).GUID, out cross); 
IAMCrossbar crossbar2 = cross as IAMCrossbar; 
int inputpincount, outputpincount; 
crossbar2.get_PinCounts(out outputpincount, out inputpincount); 
crossbar2.Route(0, 0); 

Если я попытаюсь выполнить рендеринг видео в этот момент, я получаю от 5 секунд замедленные снимки из своего воспроизводящего видео, которое подключается как вход для моей карты захвата. Выход моей карты захвата - mpeg2.не может получить видео в реальном времени с карты захвата

IBaseFilter demuxFilter = (IBaseFilter)new MPEG2Demultiplexer(); 
graphBuilder.AddFilter(demuxFilter, "Mpeg-2 Demultiplexor"); 

IPin sourceFilterOutputPin = DsFindPin.ByDirection(sourceFilter, PinDirection.Output, 0); 
IPin demuxFilterPinIn = DsFindPin.ByDirection(demuxFilter, PinDirection.Input, 0); 

hr = graphBuilder.Connect(sourceFilterOutputPin, demuxFilterPinIn); 
DsError.ThrowExceptionForHR(hr); 

IBaseFilter defaultRenderer = (IBaseFilter)new VideoRendererDefault(); 
hr = graphBuilder.AddFilter(defaultRenderer, "Default Renderer"); 
DsError.ThrowExceptionForHR(hr); 

hr = captureGraphBuilder.RenderStream(null, MediaType.Video, sourceFilter, null, defaultRenderer); 
DsError.ThrowExceptionForHR(hr); 

На данный момент я получаю ошибку, которая говорит, что нет сочетания промежуточных фильтров ... Все, что я хочу знать ли я, используя mpeg2 DeMUX правильно или неправильно?

ответ

1

Перед рендерингом потока вам не нужно подключать источник к демультиплексированию. Это может запутать операцию рендеринга.

Во время операций рендеринга DirectShow попытается использовать фильтры, уже присутствующие на графике, перед тем, как попробовать другие зарегистрированные фильтры, чтобы вы могли добавлять свои фильтры к графику, не подключая их.

Возможно, вам также не хватает соответствующих фильтров преобразования mpeg2 или цветового пространства. Вы имитировали все это с помощью инструмента редактирования графа (например, Graph Studio Next или GraphEdit в Windows SDK)?

+0

Привет, Наконец-то я понял это. Я использовал crossbars и StreamConfig, и, наконец, я получил видеовход. Но теперь я не могу записать его в файл avi. Мой код был прав с моей веб-камерой, но с моей карточкой захвата я получаю файл размером 64 КБ. –

+0

Предложите, чтобы вы попытались построить этот график в Graph Studio Next и опубликовать результаты в следующем шаге. – persiflage

Смежные вопросы