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

До сих пор я успешно инициировал RTSP-разговор с камерой, и она отправляла мне UDP-пакеты с полезной нагрузкой RTP. Но я не уверен, куда идти дальше.

Я очень рад проделать эту работу, я бы просто признателен за несколько указателей / подробный обзор шагов, чтобы я мог разобрать проект!

1
SuddenMoustache 27 Мар 2016 в 19:31

2 ответа

Лучший ответ

Здесь нет прямого ответа на вопрос OP, потому что его вопрос довольно широк, и без дополнительной информации, которая относится к тому, что OP намеревается делать с этой информацией, трудно дать точный ответ. Что я могу сделать здесь, так это предложить OP шаги, которые могут быть предприняты, и какие проблемы следует учитывать.

OP заявил:

До сих пор я успешно инициировал RTSP-разговор с камерой, и она отправляла мне UDP-пакеты с полезной нагрузкой RTP. Но я не уверен, куда идти дальше.

Теперь, когда у вас установлена связь с камерой и вы можете получать пакеты данных через видеопоток, теперь необходимо понимать, что такое полезная нагрузка RTP или как интерпретировать эти данные. Итак, на этом этапе вам нужно будет провести исследование протокола RTP, который, как мне кажется, является разновидностью сетевого протокола. После того, как вы написали свою структуру и функции для успешной работы с этим протоколом, нужно разбить пакеты UPD на полезные байты информации. Обычно во многих случаях, когда дело доходит до обработки графических, видео или аудиоданных либо непосредственно из файла, либо из объекта потока, они обычно сопровождаются каким-либо типом информации заголовка. Затем необходимо понять эту информацию заголовка, которая является нормальной в форме структуры, которая дает информацию о типе содержимого, которое содержит этот файл или поток, чтобы вы знали, сколько байтов информации нужно извлечь из него.

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

Необходимые шаги могут различаться в зависимости от ваших потребностей и того, что вы собираетесь делать с информацией: вы пытаетесь записать свойства или общую информацию о видеоконтенте в файл, такую как: его тип сжатия, его тип аудио - видеокодека , его разрешение и информацию о частоте кадров, его байтовую скорость и т. д.? Или вы пытаетесь записать сам видеоконтент в файл, который ваше приложение будет использовать для воспроизведения или редактирования? Все зависит от ваших намерений.

Данные сжаты, и в этом случае мне нужно их распаковать?

На этом этапе, когда вы успешно смогли интерпретировать протокол RTP и проанализировать пакеты данных, понимая информацию об их заголовках и сохраняя ее в надлежащей структуре, возникает вопрос использования этой информации заголовка для определения того, что на самом деле находится в этом потоке. объект. Например, в соответствии с PDF-файлом о свойствах видеокамеры, которую вы предоставили, сжатие видео может быть сохранено в 2 типах, H.264 или MJPEG, это вам нужно будет определить по информации, которая была предоставлена ​​в заголовке, отсюда вам придется разветвлять свой код и иметь возможность читать и анализировать каждый тип сжатия или принимать тот, с которым вы готовы работать, и игнорировать другой. Далее следует сжатие звука, если вас беспокоит звук, и доступные типы: AAC (только кодирование), G.711 A-Law и G.711 U-Law, и здесь применяются те же механизмы. Как только вы сможете обойти сжатие аудио и видео, вам понадобится жизненно важная информация о самой видеоинформации, например, какое разрешение и частота кадров (размеры буфера) были сохранены из информации заголовка, чтобы вы знали, сколько байтов нужно прочитать из поток и как далеко переместить указатель в потоке. Если вы заметили разрешение и частоту кадров, для каждого типа сжатия доступны разные допустимые форматы:Can't load full resultsTry againRetrying...Retrying...

  • H.26
    • 1920 x 180 (2,1 МП) при 30 кадрах в секунду (1080p)
    • 1280 x 720 при 60 кадрах в секунду (720p) *
    • 720 x 480/576 @ 30/25 кадров в секунду (D1)
    • 704 x 480/576 при 30/20 кадрах в секунду (4CIF)
    • 352 x 240/288 @ 30/25 кадров в секунду (CIF)
  • MJPEG
    • 720 x 480/576 @ 30/25 кадров в секунду (D1)
    • 740 x 480/578 при 30/25 кадров в секунду (4CIF)
    • 352 x 240/288 @ 30/25 кадров в секунду (CIF)

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

  • Однопоточный H.264 до 1080p (1920 x 1080) при 30 кадрах в секунду
  • Двойной поток H.264 и MJPEG
    • H.264: программирование основного потока до 1280 x 720 при 25/20 кадров в секунду.
    • MJPEG: дополнительный поток, программируемый до 720 x 576 @ 25/20 кадров в секунду.

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

Нужно ли мне делать какие-то другие модификации?

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

Где я могу узнать, что мне нужно сделать специально для этой камеры?

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

UDP

  • Поищите в Google UDP-сокеты для программирования на С ++ для Linux или Winsock.

RTP

  • Поищите в Google пакеты RTP для программирования на c ++

Сжатие видео

  • Выполните поиск в Goggle информации о сжатии и структуре H.26 и MJPEG в объектах потока.

Сжатие звука

  • Выполните поиск в Google для каждого из AAC (только кодирование), G.711 A-Law, G.711 U-Law, если вас также интересует звук.

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

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

Общие шаги заключаются в следовании научному подходу к текущей проблеме. Обычно это:

  • Оценка ситуации
  • Создайте гипотезу или тезис о ситуации.
  • Соберите известные факты
  • Определите неизвестные
  • Создайте модель, которая показывает взаимосвязь между известным и неизвестным.
  • Выполняйте как исследования, так и эксперименты
  • Запись или журнал событий и данных
  • Анализируйте данные
  • Делать вывод

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

2
Francis Cugler 27 Мар 2016 в 18:46

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

Вероятно, для этого можно использовать openRTSP, который также может вывод в файл. Для этого подхода вам придется написать код NO . Правильная реализация RTP, RTSP и RTCP сложна и требует много работы. Если у вас есть требования, которым openRTSP не соответствует, вы можете использовать библиотеки live555 для RTSP / RTP. / RTCP и напишите минимальный код, чтобы что-то сделать с полученным видео. Список рассылки очень отзывчивый при условии, что вы задаете «хорошие» вопросы и сначала обязательно прочитаете FAQ.

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

Вам не нужно этого знать, если вы используете openRTSP. Если вы используете библиотеки live555 напрямую, вам будут передаваться целые видеокадры, которые вам затем придется либо декодировать, либо записывать в файл самостоятельно, в зависимости от того, чего вы хотите достичь. Если вам НЕОБХОДИМО нужно / хотите узнать о форматах полезной нагрузки RTP и RTP, прочтите соответствующие RFC, например RFC2326, RFC3550, RFC6184.

Данные сжаты, и в этом случае мне нужно их распаковать?

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

Где я могу узнать, что мне нужно сделать специально для этой камеры?

Если вы просто хотите сохранить видео, в идеале вам не нужно ничего знать о камере, кроме стандартов, которые она реализует (что вы уже делаете).

2
Ralf 28 Мар 2016 в 08:21