Дорогие все,
Потратив много часов на то, чтобы понять, как работает DirectShow, я не нашел ни одного простого примера, как воспроизводить медиа, без каких-либо модификаций, просто играть. Но мне удалось сделать это в конце. Сейчас я кратко расскажу о том, как работает DirectShow. Чтобы воспроизвести что-либо (аудио или видео), вы должны сначала открыть их, распаковать (поскольку большинство из них используют какое-то сжатие для экономии места на диске), а затем отправить их на устройство, которое будет воспроизводить их. Конечно, в зависимости от форматов мультимедиа и т. Д., Может быть сделано больше шагов, но это простейшее объяснение системы. Все эти задачи выполняются фильтрами, а набор связанных фильтров составляет график фильтра. Может быть, это трудно понять, но я думаю, что, посмотрев этот пример, вы получите более четкое представление об этом.
И сказать, что для некоторых форматов вам не нужно делать все, потому что фильтр графа делает это за вас. Он создает и подключает все необходимые фильтры и запускает их для вас.
Я забыл упомянуть, что я использовал библиотеку DirectShow.net, которая является открытым проектом SourceFourge, и которая действует как своего рода оболочка для DirectShow от Microsoft. Это очень полезно, потому что изначально DirectShow ограничен для использования только в C ++, но с DirectShow.net вы можете использовать его с C #, VB и, как говорится, «теоретически с любым языком .net». Принципы DirectShow.net такие же, как DirectShow, поэтому обучение начинается с одной веб-страницы: Веб-страница Microsoft . Чтобы использовать DirectShow.net в своем проекте, вы просто скачиваете библиотеку из SourceForge, открываете проект , добавляете ссылку на него и добавляете using DirectShowLib;
. А также посетите их форум. В конце концов, имейте в виду, что вы изучаете принципы на веб-странице Microsoft или говорите, как все работает, но, используя DirectShow.net, вы учитесь на примерах или говорите, как использовать инструменты, которые вам нужны для выполнения различных задач. Образцы и библиотеку можно скачать по этой ссылке
Вот пример кода для воспроизведения mp3 файла:
class Example{
///....
IGraphBuilder gb, gb1;
IMediaControl mc, mc1;
IVideoWindow vw;
private void button1_Click(object sender, RoutedEventArgs e)
{
gb = (IGraphBuilder) new FilterGraph();
mc = (IMediaControl)gb;
//mc = gb as IMediaControl;//you can use this way instead of casting
mc.RenderFile("C:\\test.mp3");
mc.Run();
gb1 = (IGraphBuilder)new FilterGraph();
mc1 = (IMediaControl)gb1;
vw = (IVideoWindow)gb1;
vw.SetWindowPosition(0, 0, 320, 240);
mc1.RenderFile("C:\\test.avi");
mc1.Run();
}
}
Вы можете указать любой файл в любом месте на компьютере, но я сделал это так, чтобы было проще. Это простейшие примеры воспроизведения файлов, и для добавления любых других элементов управления вам необходимо узнать, как работает DirectShow.
Надеюсь, это поможет. :)