Подтвердить что ты не робот

Захват видео + Загрузка + Обработка + Потоковая передача -.NET & С#

Мы пытаемся найти любые технологии/библиотеки, доступные в стеке .NET(даже обертки поверх DLL сторонних разработчиков), которые помогут нам создать приложение, которое может

  • 1 - Захват изображения с пользовательского видеоустройства
  • 2 - Загрузите его в реальном времени на сервер
  • 3 - обработать видео (на сервере) - например: добавление водяного знака в видео
  • 4 - Передайте его обратно пользователю/другим пользователям

Предпочтительно временная задержка/латентность между этапами 2 и 4 должна быть минимальной

Первое требование (захват) кажется довольно прямым. Задача заключается в определении подходящего способа загрузки, обработки и потоковой передачи. Любые действительные предложения или идеи?

Недавно появилась библиотека FFmpeg от acrsoss, и у нее есть обертка С#. Может ли FFmpeg использоваться для обработки?

4b9b3361

Ответ 1

Я бы так поступил:

  • Используйте серебристый свет или вспышку для захвата входа видеокамеры, например. как подробнее здесь.
  • Вы можете отправить байтовый поток через сокет, который слушает ваш сервер.
  • На стороне приема просто используйте программу приема сокетов как программу-маршрутизатор с подключенным рядом слушателей. Между работниками и маршрутизатор-программой, например. AMQP с RabbitMQ. Отправлять асинхронные сообщения (например, с реактивными расширениями), например. кодирование потока к кролику - node, которое затем может либо довести все сообщения до одного компьютера в составе сеанса разговора/сеанса или чередования между доступными рабочими. Здесь руководство. По мере кодирования видео он асинхронно транслируется по шине сообщений. Согласно испытаниям Intel, сама шина должна хорошо работать при высоких пропускных способностях, но им пришлось использовать режим чередующихся каналов tcp (они тестировались на гигабитном LAN). Другие пользователи здесь предложили FFlib. Вы также можете посмотреть, как рабочие конвертируются в webM, но если FFlib работает, это может быть намного проще. Каждый работник публикует над AMQP следующую кодированную часть видео. Программа, запускающая сервер, например. программа маршрутизатора, о которой я говорил раньше, начинает отправлять клиенту (см. № 4).
  • Имейте клиентскую программу, например. silverlight/flash connect (например, через тот же сокет, который вы открыли для клиентских данных сервера или через HTTP), и прочитать байтовый поток с декодером. Отобразить вывод.

Ответ 2

VideoLab от Mitov может выполнить все это и бесплатно для личного использования (не так бесплатно для коммерческого использования, но цена не слишком тяжелая).

Я купил и использую версию Delphi и знаю, что она работает очень хорошо, поэтому я уверен, что версия .NET будет делать то, что вам нужно.

Эта задача не тривиальна (как видно из отсутствия ответов здесь), поэтому ожидаем значительного сражения с DirectX/Microsoft Media Encoder, но с помощью этого инструментария и некоторой помощи от автора вы будете в конечном итоге.

http://www.mitov.com/html/videolab.html

Ответ 3

Кажется, что Splicer может обрабатывать статическое видео и преобразовывать его - я не уверен в обработке загруженного в реальном времени видео - http://splicer.codeplex.com/

Ответ 4

Взгляните на Video.Show от Vertigo. Это веб-сайт с открытым исходным кодом для пользовательского видеоконтента. Он использует Expression Encoder для обработки сжатия/видео. Это не совсем то, что вам нужно, но это хороший старт!

Ответ 5

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

Он должен иметь все, что вам нужно:

Интеллектуальное кодирование/интеллектуальная рекомпрессия для WMV, если источником также является WMV, и нет выполняются кадровые операции [4], редактирование разрезов, последовательная пакетная кодировка, Живая кодировка с веб-камер и DV камкордеры

Поддержка формата декодирования/импорта, поскольку DirectShow

Плавная потоковая передача (720p + видео с использованием HTTP) с оптимизированным клиентом (Silverlight) и сервером (IIS с гладкая потоковая передача)

Публикация WebDAV, публикация плагинов для потоковой передачи Silverlight, Amazon S3

Импорт наложений XAML, созданных в Выражение Дизайн и настройка их время, анимация, непрозрачность, размещение и цикл

События запуска JavaScript

Windows Media 11 SDK и VC-1 SDK интеграция, собственный декодер MPEG-2

Добавление подписи к видео с использованием SAMI или W3C Временной формат текста

Предварительный просмотр и сравнение кодирования настройки в режиме реального времени

Захват экрана

Объектная модель для механизма кодирования, SDK можно загрузить отдельно

Ответ 6

Вопрос кроток в деталях (это веб-сервер, какой os является сервером? и т.д.), но я возьму удар, основанный на том, что, как я думаю, вы пытаетесь сделать.

Одна вещь, которую вы могли бы рассмотреть, - это сделать захват и процесс за один раз. Если пользователь запускает ваше клиентское приложение, выполните захват и обработку через DirectShow. Затем все, что вам нужно сделать, это загрузить видео, и вы можете пропустить весь процесс сервера. Это предполагает, что "пользователь" находится под вашим контролем - что это не случайный человек, загружающий видео, а работник или кто-то, которому доверяют другие.

Если это не так, то ffmpeg, безусловно, можно использовать для водяного видео на вашем сервере. Тебе действительно не нужны "обертки". Вы можете просто вызвать его как приложение командной строки из своего серверного приложения и дождаться его завершения.

Процесс действительно не такой сложный... его детали, которые будут иметь значение (например, что означает "поток" для вас? Вы действительно имеете в виду "поток", или это через http? Thats огромный тема там)