Захват видео + выгрузка + обработка + потоковая передача обратно - .NET & C # - PullRequest
12 голосов
/ 29 июля 2010

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

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

Предпочтительно, задержка / задержка между шагами 2 и 4 должна быть минимальной

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

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

Ответы [ 6 ]

13 голосов
/ 05 августа 2010

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

  1. Используйте серебряный свет или вспышку для захвата входа видеокамеры, например, как подробно здесь .
  2. Вы можете отправить поток байтов через сокет , который прослушивает ваш сервер.
  3. На принимающей стороне просто используйте принимающую сокеты программу в качестве программы роутера с подключенным количеством слушающих работников. Между рабочими и роутером-программой, например AMQP с RabbitMQ . Отправлять асинхронные сообщения (например, с реактивными расширениями), например, поток , кодирующий к узлу кролика, который затем может пересылать все сообщения на один компьютер как часть разговора / сеанса пользователя или чередовать между доступными работниками Вот инструкция . Поскольку видео кодируется, оно асинхронно передается по шине сообщений обратно. Согласно тестам Intel, сама шина должна хорошо работать при высокой пропускной способности, но им пришлось использовать режим чередования каналов tcp (они тестировались на гигабитной сети). Другие пользователи предложили FFlib . Возможно, вы также захотите, чтобы работники конвертировались в webM , но если FFlib работает, это может быть намного проще. Каждый работник публикует через AMQP следующий кодированный фрагмент видео. Программа, работающая на сервере, например программа роутера, о которой я говорил ранее, начинает отправку клиенту (см. № 4)
  4. иметь клиентскую программу, например, Silverlight / флэш-соединение (например, через тот же сокет, который вы открыли для данных клиент-> сервер или через HTTP) и считывание потока байтов с помощью декодера. Визуализируйте вывод.
3 голосов
/ 31 июля 2010

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

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

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

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

2 голосов
/ 07 августа 2010

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

В нем должно быть все необходимое:

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

Поддержка формата декодирования / импорта благодаря DirectShow

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

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

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

События триггера JavaScript

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

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

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

Снимок экрана

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

2 голосов
/ 05 августа 2010

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

2 голосов
/ 30 июля 2010

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

1 голос
/ 05 августа 2010

Вопрос довольно короток в деталях (это веб-сервер, что такое сервер? И т. Д.), Но я сделаю удар, основываясь на том, что, как мне кажется, вы пытаетесь сделать.* Одна вещь, которую вы могли бы рассмотреть, это сделать захват и обработку одновременно.Если пользователь запускает ваше клиентское приложение, сделайте так, чтобы он выполнял захват и обработку через DirectShow.Тогда все, что вам нужно сделать, это загрузить видео, и вы можете пропустить весь процесс сервера.Это предполагает, что «пользователь» находится под вашим контролем - что это не какой-то случайный человек, загружающий видео, а сотрудник или кто-то другой, кому доверяют.

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

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

...