Как визуализировать видео и аудио в файл, используя DirectShowNet в C #? - PullRequest
0 голосов
/ 07 ноября 2010

Я обнаружил аудио и видео устройства и построил График захвата, но в последнем фильтре я не могу отрендерить их обоих.

            DsDevice dev = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice)[0];
            hr = m_FilterGraph.AddSourceFilterForMoniker(dev.Mon, null, dev.Name, out capFilter);
            Marshal.ThrowExceptionForHR( hr );

            DsDevice audioDv = DsDevice.GetDevicesOfCat(FilterCategory.AudioInputDevice)[0];
            hr = m_FilterGraph.AddSourceFilterForMoniker(audioDv.Mon, null, audioDv.Name, out audioFilter);
            Marshal.ThrowExceptionForHR(hr);

            asfWriter = ConfigAsf(capGraph, szOutputFileName);

            hr = capGraph.RenderStream(null, MediaType.Audio, audioFilter, null, asfWriter);
            Marshal.ThrowExceptionForHR(hr);
            hr = capGraph.RenderStream(null, MediaType.Video, capFilter, null, asfWriter);
            Marshal.ThrowExceptionForHR( hr );

Это фрагмент кода, который я пробую. Должен ли я выбрать другой MediaType?

1 Ответ

2 голосов
/ 15 ноября 2010

Я разработчик директ-шоу на C ++, я не знаком с DirectShow.net, поэтому не могу комментировать ваш код.

Но у меня большой опыт работы с DShow ...

Чтобы записать видео и аудио медиапотоки в файл, вам нужен фильтр мультиплексора.

Из ваших фильтров источника, как видео, так и аудио контакты должны быть подключены к фильтру мультиплексора (мультиплексора),Оттуда (однополюсный) выход фильтра мультиплексора будет подключаться к фильтру File Writer .

Фильтры мультиплексирования зависят от используемых типов носителей.То, что вы не можете подключить оба потока к своему фильтру мультиплексора, может указывать на то, что он не поддерживает один (или оба) типа мультимедиа.

В этом случае выполните пару тестов - например, отрендерируйте тольковидео поток на диск, а затем рендеринг только аудио диск.По крайней мере, один из них не будет работать - это тип мультимедиа-нарушителя.

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

Надеюсь, это хоть немного поможет!

...