Кодирование кадров веб-камеры с помощью H.264 в .NET - PullRequest
1 голос
/ 03 марта 2012

Я хочу выполнить следующую процедуру:

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

Это будет прямая трансляция.

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

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

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

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

Как можно кодировать серию изображений в H264 с помощью API x264 C?

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

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

Я знаю, что есть протокол RTMP, но видеопоток всегда будет виден одному перозону в одно и то же время, а RTMP более ориентированпоток для многих людей.Кроме того, я уже работал с приложением Adobe Flash, которое я сделал, но было слишком медленным.

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

Я надеюсь, что впо крайней мере, кто-то может указать мне (/ на?) правильное направление.

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

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

Много-много-много заранее большое спасибо.

1 Ответ

2 голосов
/ 04 марта 2012

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

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

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

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

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

...