Как сделать многоадресный поток записанным с помощью DirectShow?

У меня есть требование построить очень простой потоковый сервер. Он должен иметь возможность захватывать видео с устройства и затем передавать его через многоадресную рассылку нескольким клиентам в локальной сети.

Эта часть захвата довольно проста (в C #) благодаря библиотеке, написанной с помощью DirectShow.Net ( http://www.codeproject.com/KB/directx/directxcapture.aspx ).

Вопрос, который у меня сейчас есть, как это сделать? Это та часть, на которой я застрял. Я не уверен, что делать дальше или какие шаги предпринять.

11.12.2008 22:22:47
В каком формате сжат ваш поток, или это не имеет значения?
wimh supports Monica 12.12.2008 09:12:35
У нас есть три формата, на которые мы ориентируемся. MPEG-2, MPEG-4 и h.264. Нам нужно, чтобы он работал с одним из этих форматов. MPEG-2 - это, пожалуй, наша лучшая ставка, но босс хочет h.264.
Chris Holmes 12.12.2008 18:36:03
Определенный формат можно передавать только на проигрыватель Windows Media, но не на другие проигрыватели. Я обнаружил, что WMV / ASF работает лучше всего для потоковой передачи.
faulty 13.12.2008 10:30:49
3 ОТВЕТА

Для этого вам нужно настроить / написать какой-нибудь сервер потокового видео.

Я использовал VideoCapX для той же цели в моем проекте. Документация и поддержка не на высшем уровне, но это достаточно хорошо. Он использует потоковую технологию WMV. Поток называется MMS- потоком. Вы можете просмотреть его с помощью любого большинства медиаплееров. Я тестировал с Windows Media Player, Media Player Classics и VLC. Если вы хотели бы увидеть его возможности без написания какого-либо кода, взгляните на U-Broadcast , он использует VideoCapX для работы за сценой.

Я использую DirectShow.Net почти 2 года, и мне все еще трудно писать потоковый сервер из-за сложности технологии DirectShow.

Помимо WMV, вы можете взглянуть на Helix Server или Apple Streaming Server. Последний не является бесплатным, как и WMV Streaming Server от Microsoft.

Вы также можете взглянуть на VLC или Windows Media Encoder, чтобы осуществлять потоковую передачу прямо из приложения. Но до сих пор я обнаружил, что U-Broadcast делает оба вышеперечисленных. VLC имеет некоторые проблемы совместимости с кодеком и воспроизведением с не VLC плеера, WME имеет проблемы с запуском устройства захвата.

Удачи

ПРИМЕЧАНИЕ: я не связан с VideoCapX или его компанией, я просто счастливый пользователь.

1
12.12.2008 11:34:48
VideoCaptureX выглядит только для захвата, а не для потоковой передачи. VLC ужасно сломан; Постеры форума утверждают, что потоковая передача не работает в последней версии. Кодировщик Windows Media не может выполнять многоадресную передачу.
Chris Holmes 12.12.2008 19:54:08
VideoCapX делает потоковую передачу. Я использую версию 6.3. Извините, я только что понял, что вы имеете в виду "многоадресная передача". Ну, видео поток поддерживает несколько подключенных клиентов. Он не может быть действительно «многоадресным», потому что для реальной многоадресной передачи потребуется очень жесткая настройка сети, и все соединения должны начинаться вместе.
faulty 13.12.2008 10:29:01
Возможно, вы захотите изучить саму концепцию многоадресной рассылки. en.wikipedia.org/wiki/IP_Multicast
faulty 13.12.2008 10:32:43

Нет доступных фильтров, которые вы можете подключить и использовать.

Вам нужно сделать три вещи здесь:

  1. Сжатие видео в MPEG2 или MPEG4
  2. Смешайте это в транспортный поток MPEG
  3. Трансляция это

Для первой части доступно множество кодеков, и некоторые устройства могут даже выводить сжатое видео.

Часть 3 тоже довольно проста.

Основная проблема связана со второй частью, поскольку MPEG Transport Stream запатентован. Он лицензируется так, что вы не можете разрабатывать свободное программное обеспечение на его основе (VLC и FFMPEG нарушают эту лицензию), и вам придется заплатить несколько сотен долларов только за получение копии спецификации.

Если вам нужно его развивать, вам необходимо:

  • Получите копию ISO / IEC 13818-1-2000 (вы можете скачать ее в формате PDF со своего сайта), она описывает транспортный поток MPEG
  • Разработайте фильтр рендеринга, который принимает элементарные потоки MPEG и смешивает их в транспортный поток.

Это должно быть средство визуализации, поскольку Транспортный поток не является фильтром преобразования. Существуют какие-то внешние данные (таблицы распределения программ и эталонные часы), которые необходимо отправлять на регулярной основе, и для этого нужно иметь рабочий поток.

2
15.01.2009 22:29:55

http://www.codeproject.com/KB/directx/DShowStreamingServer.aspx может помочь, и http://en.wikipedia.org/wiki/VLC_media_player#cite_note-14

VLC также «должен» иметь возможность потоковой передачи с любого устройства.

0
12.11.2010 20:52:17