Прямая трансляция с помощью DirectShow и Windows Media Format SDK
Сначала немного предыстории:
Я занимаюсь разработкой приложения Silverlight 3 и хочу добавить поддержку потокового вещания (веб-камера + микрофон в качестве входных данных). К сожалению, Silverlight не может получить доступ к веб-камере или самому микрофону, поэтому мне нужно создать отдельное приложение для создания медиапотока. Я предполагаю, что Silverlight лучше всего будет работать с технологией Microsoft, поэтому я хочу использовать формат ASF с кодированием WMV/WMA.
После некоторых исследований я думаю, что смогу:
- Кажется, что с помощью DirectShow можно захватить как вход веб-камеры, так и микрофон, а затем объединить его в один "поток".
- Для кодирования потока мне, вероятно, нужно передать его в библиотеки Windows Media Format SDK (документация MSDN описывает, как использовать DirectShow с WM ASF Writer).
- Я думаю, что тогда будет возможно использовать что-то вроде "Network Sink" для трансляции потока ASF (без записи его на HDD).
- Я предполагаю, что подключение большого количества клиентов к потоку было бы довольно тяжелым по пропускной способности, поэтому мне, вероятно, следует отправить поток на сервер и транслировать его оттуда. Я просто не знаю, возможно ли использовать комбинацию ASF Reader/Writer, чтобы "пропустить" поток через сервер. Я также не знаю, смогу ли я использовать многоадресную рассылку для достижения аналогичного результата.
Я планирую использовать C#, хотя это, вероятно, не имеет большого значения, так как мне все равно придется использовать некоторые оболочки для библиотек C++ (например, DirectShow.Net или SlimDX).
К сожалению, у меня практически нет опыта работы с медиапотоками. Итак, мой первый вопрос: возможно ли потоковое вещание, как я описал?
И если это возможно, это разумный способ или я должен рассмотреть возможность использования некоторых других библиотек / фреймворков?
1 ответ
Хотя использование DShow и / или WMF SDK обеспечит вам максимальную гибкость, если ваша цель - передавать потоковое видео / аудио на Silverlight, вы можете использовать что-то вроде Windows Media Encoder 9 или новый Expression Encoder. Оба поддерживают потоковую передачу веб-камеры и микрофона в точку публикации Windows Media Server или могут размещать поток на локальном порту. Оба имеют SDK, который доступен через.NET (WME использует COM-взаимодействие, а Encoder имеет собственный.NET API). Этот поток совместим с Silverlight и Windows Media Player.