Я просто пытаюсь прочитать видеопоток с IP-камеры (Basler BIP-1280c).
Поток, который я хочу получить, сохраняется в буфере на камере, имеет длину 40 секунд и декодируется в MJPEG.
Теперь, если я получаю доступ к потоку через веб-браузер, он показывает мне 40 секунд без проблем.
Но на самом деле мне нужно приложение, которое способно загружать и сохранять поток самостоятельно.
Доступ к камере осуществляется через http, поэтому я использую libcurl
для доступа к ней. Это отлично работает, и я также могу скачать поток без каких-либо проблем. Я решил сохранить данные потока в файл * .avi (надеюсь, это правильно…?).
Но теперь проблема: я могу открыть видео (пробовал с Totem Video Player и VLC), а также просмотреть все, что было записано - НО это слишком быстро. Все видео длится около 5 секунд (вместо 40). Есть ли в MJPEG что-нибудь в заголовке, куда помещать информацию, такую как общая длина видео или fps? Я имею в виду, что для видеоплееров не хватает какой-то информации, чтобы они проигрывали ее быстро?
Обновление:
Как и предлагалось в ответах, я открыл файл с помощью шестнадцатеричного редактора, и обнаружил, что это:
--myboundary..Content-Type: image/jpeg..Content-Length: 39050.........*Exif..II*...............V...........................2...................0210................FrameNr=000398732
6.AOI=(0800x0720)@(0240,0060)/(1280x0720).Motion=00000 (no)
[00000 | 00000 | 00000 | 00000 | 00000].Alarm=0000 (no) .IO
=000.RtTrigger=0...Basler..BIP2-1280c..1970:01:05 23:08:10.8
98286......JFIF.....
. ............................ ....&"((
Этот заголовок повторяется во всем файле (за ним следует много байтов двоичных данных). Это на самом деле нормально, так как я прочитал в руководстве к камере, что все изображения MJPEG получают этот заголовок.
Более интересны следующие элементы: JFIF
в последней строке. Как и предлагалось в ответах, возможно, это индикатор формата файла. Но afaik JFIF - это один формат изображения, такой же как jpg. Так может ли это означать, что весь видеофайл представляет собой просто несколько «безмозглых» картинок? И мой игрок просто предполагает, что он должен показывать эти картинки один за другим, не зная о частоте кадров?