2012-03-03 3 views
0

Что я хочу сделать, это следующая процедура:Encode WebCam рамки с H.264 на .NET

  1. Получить кадр из веб-камеры.
  2. Кодировать его с помощью кодера H264.
  3. Создайте пакет с этим фреймом с моим собственным «протоколом», чтобы отправить его через UDP.
  4. Получить его и расшифровать его ...

Было бы потоковым.

Ну, я просто нуждаюсь в помощи со вторым шагом. Im получение изображений камеры с помощью AForge Framework.

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

Я хотел бы обрабатывать кодированные кадры в памяти, а затем создавать пакеты для отправки.

Мне нужно использовать кодер с открытым исходным кодом. Уже судимое с x264 следуя этому примеру

How does one encode a series of images into H264 using the x264 C API?

, но кажется, что это работает только на Linux, или по крайней мере тот, что я думал, что после того, как я увидел, как 50 ошибок при попытке скомпилировать пример с Visual C++ 2010.

Должен прояснить, что я уже много исследовал (1 неделю чтения), прежде чем писать, но не смог найти (простой) способ сделать это.

Я знаю, что есть протокол RTMP, но видеопоток всегда будет отображаться одним peroson при времени (/??), А RTMP более ориентирован на поток для многих людей. Кроме того, я уже транслировался с помощью флеш-приложения adobe, которое я сделал, но было слишком лаги.

Также хотел бы, чтобы вы дали мне совет о том, можно ли отправлять фреймы по очереди или лучше отправлять их в каждом пакете.

Я надеюсь, что хотя бы кто-то мог указать мне (/ at?) Правильное направление.

Мой английский не очень хорошо, может быть, извиняется, пожалуй, бла-бла. : P

PS: doesnt должен быть в .NET, он может быть на любом языке, если он работает в Windows.

Много многого много, спасибо заранее.

+1

Самая большая проблема с H.264 заключается в том, что она обременена патентом, вы должны заплатить лицензионный сбор в MPEG LA. Windows 7 имеет один встроенный через Media Foundation, а не распространяемый. Вы можете получить один из Expression Encoder 4 Pro, издание, которое не является бесплатным. –

+0

если я использую один Windows 7, встроенный, я не должен платить, пока программное обеспечение выпущено для этой ОС? это то, что вы имели в виду? Спасибо за информацию. – Martin

+0

Право, Microsoft выплачивает роялти, пользователь, который купил Win7, компенсирует их. Приятно, когда кто-то другой позаботится о вашей проблеме. –

ответ

1

Вы можете попробовать свой подход с использованием технологии DirectShow от Microsoft. Существует оболочка x564 с открытым исходным кодом, доступная для загрузки по адресу Monogram.

Если вы загружаете фильтр, вам необходимо его зарегистрировать с помощью regsvr32. Я бы предложил сделать несколько быстрых тестов, чтобы выяснить, возможен ли этот подход, использовать инструмент GraphEdit для подключения веб-камеры к кодеру и посмотреть параметры конфигурации.

Также хотел бы, чтобы вы дали мне совет о том, можно ли отправлять кадры по очереди или лучше отправлять их в каждом пакете.

Это действительно зависит от требуемой задержки: чем больше кадров вы упаковываете, тем меньше накладных расходов на заголовок, тем больше латентность, так как вам придется ждать, пока несколько кадров будут закодированы, прежде чем вы сможете их отправить. Для потоковой передачи в реальном времени латентность должна быть сведена к минимуму, а типичными используемыми протоколами являются RTP/UDP. Это означает, что максимальный размер пакета ограничен MTU сети, часто требующим фрагментацию фреймов IDR и отправление в нескольких пакетах.

Мой совет: не беспокоиться о отправке большего количества кадров в один пакет до тех пор, пока у вас не будет причин. Это чаще всего необходимо при потоковой передаче аудио, поскольку размер заголовка (например, IP + UDP + RTP) считается большим по отношению к полезной нагрузке аудио.

+0

Эй, Ральф, спасибо за ответ так быстро. Я протестировал фильтр, как вы сказали с помощью GraphEdit, но после регистрации файла тонов и вставки фотоаппарата и фильтров монограммы и попыток подключения к ним он обнаружил следующую ошибку: «Эти фильтры не могут согласовать соединение. Проверьте тип совместимости входных выводов и выхода pin: S. Это означает, что это не сработает? Я никогда раньше не использовал эту утилиту, возможно, я ошибся. О совете, который я попросил, вы правы, и я тоже забыл, что мне нужно позаботиться о mtu. – Martin

+0

ну, я только что понял, что для него требуется yiv12, а вход камеры - rgb ¬¬. Игнорировать предыдущий комментарий ... я просто попытаюсь найти промежуточный фильтр. – Martin

 Смежные вопросы

  • Нет связанных вопросов^_^