2012-01-25 2 views
2

Я просто пытаюсь прочитать видео Stream из IP-камеры (Basler BIP-1280c). Поток, который я хочу сохранить, сохраняется в буфере на камере, имеет длину 40 секунд и декодируется в MJPEG.MJPEG Видео с IP-камеры слишком быстро

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

Доступ к камере осуществляется через http, поэтому я использую libcurl для доступа к ней. Это прекрасно работает, и я также могу загрузить поток без каких-либо проблем. Я решил сохранить данные потока в файл * .avi (надеюсь, что это правильно ...?).

Но теперь к проблеме: я могу открыть видео (пробовали с помощью Totem Video Player и VLC), а также просмотреть все записанные - НО это слишком быстро. Все видео длится как 5 секунд (вместо 40). Есть ли в MJPEG что-нибудь в заголовке, куда помещать информацию, такую ​​как общая длина видео или fps? Я имею в виду, что для видеоплееров не хватает информации, чтобы они играли так быстро?

Update:

Как было предложено в ответах, я открыл файл с двоичным редактором и то, что я нашел это:

--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. Так может ли это даже означать, что весь видеофайл - это просто «безмозглые» прикованные картинки? И мой игрок просто предполагает, что он должен показывать эти фотографии один за другим, не зная о частоте кадров?

+0

Проверьте значение частоты вращения, указанное вами для файла avi. Рассчитайте, сколько кадров вы написали в avi, а затем подсчитайте, что должно быть с частотой кадров, чтобы воспроизвести их все в течение 40 секунд. –

+0

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

+0

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

ответ

6

Существует не один формат для использования с MJPEG. Материал из Википедии:

[...] нет ни одного документа, который определяет один точный формат, который общепризнанный в качестве полной спецификации «Motion JPEG» для использования в любых условиях.

Форматы различаются в зависимости от поставщика. Мой совет будет внимательно проверять загружаемый файл. Проверьте, действительно ли это контейнер AVI. (Некоторые камеры могут отправлять фреймы, завернутые в контейнер MIME).

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

Вы также можете найти этот проект полезным: http://mjpeg.sourceforge.net/

Edit:

Согласно вашим данным выборки камера посылает кадры, упакованные в контейнер MIME. (Первая строка - это граница, затем заголовки, пока вы не встретите пустую строку, а затем данные файла, затем следуйте за границей и т. Д.).

Это файлы JPEG в виде заголовка: image/jpeg. JFIF - the standard file format для хранения данных в формате JPEG.

Я рекомендую вам:

  1. Извлеките содержимое файла на несколько файлов JPEG (с munpack, например), то
  2. use ffmpeg or mplayer создать файл фильма из серии JPEGs.

Таким образом, вы также можете указать желаемую частоту кадров.

Это может усложнить ситуацию, если камера динамически сжимает AOI (область интереса), то есть может отправлять только меньшую часть изображения, где происходило изменение. Но сначала проверьте, работает ли простой подход.

+0

У вас есть предложения, как я могу попытаться определить, какой формат контейнера? И не MIME формат для Mail? Или он также используется для передачи видео? Или я получаю что-то совершенно неправильное? // edit: Я действительно пытался открыть его с помощью «Avidemux» (http://avidemux.sourceforge.net/), но он не откроется ... поэтому я думаю, что камера не сохраняет его в правильном формате avi. .? – Toby

+1

@Toby Откройте файл в шестнадцатеричном редакторе. Вероятно, первые четыре байта скажут вам формат. MIME также является форматом контейнера (но не особенно для мультимедиа). Он способен инкапсулировать многие файлы в один. – vbence

+0

Извините, мне потребовалось столько времени, чтобы ответить, но я был болен ... Ну, я открыл файл сейчас с помощью гекседитора, и хорошо, что я вижу, это, прежде всего, Header Stuff от моей IP-камеры. Затем за ним следует «JFIF».Поэтому я предполагаю, что это описание формата ... но JFIF - это обычный формат изображения ... так ли может быть, что в моем файле нет видеоинформации? – Toby

1

на un * x системах (linux, osx, ...), вы можете использовать инструмент cmdline file, чтобы сделать (как правило, хорошее) представление о формате файла.

1

--myboundary является показателем того, что поток является обычным M-JPEG, передаваемым как многостраничный контент по HTTP. Нет хорошо известного формата файла, который может содержать этот поток «как есть» и быть воспроизводимым (то есть, если вы переименуете его в AVI, он не должен воспроизводиться).

Сам формат представляет собой последовательность (boundary, subheader, JPEG image), (boundary, subheader, JPEG image), ... и т. Д. В потоке нет штампов времени, поэтому скорость воспроизведения полностью зависит от проигрывателя.

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