Получение видео + Загружающий + Обрабатывающий + Передающий потоком назад-.NET и C#

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

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

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

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

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

12
задан amazedsaint 29 July 2010 в 13:34
поделиться

6 ответов

Я бы сделал это следующим образом:

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

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

2
ответ дан 2 December 2019 в 06:44
поделиться

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

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

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

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

3
ответ дан 2 December 2019 в 06:44
поделиться

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

2
ответ дан 2 December 2019 в 06:44
поделиться

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

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

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

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

1
ответ дан 2 December 2019 в 06:44
поделиться

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

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

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

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

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

Публикация WebDAV, плагины публикации для Silverlight Streaming, Amazon S3

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

Триггерные события JavaScript

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

Добавление титров к видео с помощью SAMI или W3C Timed Text format

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

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

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

2
ответ дан 2 December 2019 в 06:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: