Как извлечь изображения из Motion Jpeg Stream из IP-камеры? - PullRequest
1 голос
/ 10 февраля 2012

Я использую GET nphMotionJpeg для получения потока Motion Jpeg с IP-камеры Panasonic.Содержание ответа описано в приведенном ниже документе.

(2) Data reception 
    "HTTP/1.0 200 OK\r\n" 
    "Content-Type: multipart/x-mixed-re place; bound ary=--myboundary..." 
    "...--myboundary.Content-type: image/jpeg..." 
    JPEG binary data No. 1 (Hexadecimal notation="FFD8...... ........................ ..FFD9") 
    "...--myboundary.Content-type: image/jpeg..." 
    JPEG binary data No. 2 (Hexadecimal notation="FFD8...... ........................ ..FFD9") 
    : 
    : 
    "...--myboundary.Content-type: image/jpeg..." 
    JPEG binary data No. N (Hexadecimal notation="FFD8...... ........................ ..FFD9") 

    * Above mentioned  Content-type: From FFD8(following image/jpeg) to "--my boundary" (just before FFD9) 
    is 1 JPEG data file. 

    (3) Image displaying/saving 
    From the data above, extract JPEG  data, and display the extracted consecutively or save it. 
    A viewer that supports the above data is required to view images. 

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

Это очень трудно обрабатывать, когда размер изображения отсутствует.

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

Можете ли вы предложить мне простой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 30 марта 2012

Используйте Gstreamer. Смотрите мой полный пост, связанный Мартином Беккетом выше.

gst-launch souphttpsrc location="http://[ip]:[port]/[dir]/xxx.cgi" do-timestamp=true is_live=true ! multipartdemux ! jpegdec !  videoflip method=vertical-flip ! jpegenc !  multifilesink location=image-out-%05d.jpg
0 голосов
/ 12 февраля 2012

Некоторые [лучшие] IP-камеры предоставляют Content-Length подзаголовок вместе с каждым видеокадром JPEG, однако этот заголовок не является обязательным, и это становится проблемой в вашем случае: у вас нет заранее длины данных JPEG.

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

Кроме того, некоторые старые камеры Panasonic (например, BL-C140) и Axis (например, 213 PTZ) также форматируют многочастичный ответ MIME неправильно, что приводит к путанице в части --границы.

...