Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Бардак: Motion JPEG (M-JPEG) и тег VIDEO

С утра, складывая носковый пасьянс (не сошёлся, три (!!!) разных носка) — жена постирала чёрное, я задумался о формате M-JPEG. Если коротко, это формат видео, каждый кадр которого — JPEG. Очень простой формат, достаточно распространённый и его поддерживают основные браузеры — «Firefox», «Сафари», «Хром», «Опера», не поддерживает только Internet Explorer (даже девятый).

M-JPEG (51.09КиБ)

Таким образом, вопреки всем разговорам, у нас уже есть единый потоковый видеоформат, de facto, причём есть давно. Правда, плохенький (напоминаю — каждый кадр целый JPEG) и проигрываемый немного по-разному (обредший нового адепта «Хром», тормозит меньше всех). Впрочем, чтобы как-то обелить формат, у него есть и достоинства — каждый стоп-кадр у него довольно качественный, потому M-JPEG любят в камерах охраны.

Бардак заключается в том, что тег VIDEO не поддерживает формат Motion JPEG ни в одном из браузеров. Это многое говорит о том как производители браузеров определяют вектор развития их детища. В погоне за модой забывают наводить порядок и править баги (красный круглый камень в дырочкой в чей-то огород).

Воспроизводится M-JPEG через тег IMG, я даже небольшой пример накидал за 15 минут (нажмите круглую блямбу справа внизу картинки для воспроизведения).

При помощи тега CANVAS, M-JPEG и метода «stop» у окна можно даже сделать плеер, плохой, но работоспособный. Я попробовал, но результат мне не понравился. В частности, потому что тег IMG не умеет управлять видеопотоком, стоп-кадр нужно делать при помощи CANVAS, а сделать его можно только после остановки видеопотока (метод «stop» у окна нам в этом поможет) и плеер между остановкой видео и появлением стоп-кадра секунду не показывает ничего.

Можно, кстати, вспоминить, что Internet Explorer с какой-то бородатой версии поддерживает DYNSRC у тега IMG, причём там-то этот тег имеет богатое API для управления видео, в котором есть всё, что сделать полноценный плеер.

Ещё более кстати, что этот плеер будет поддерживать видео в формате AVI и кодеки установленные в системе, так что если у вас в системе есть кодек для M-JPEG, можно просто гнать видео в этом контейнере, IE его должен понять. То есть, можно и Internet Explorer обучить понимать Motion JPEG.

13 комментариев
vladon (vladon.ru) 2010

я когда с похмелья тоже о всякой фигне думаю ))

motion-jpeg хорош именно для таких сфер как камеры охраны, в остальном он только плох

Евгений Степанищев (bolknote.ru) 2010

Комментарий для vladon.ru:

motion-jpeg хорош именно для таких сфер как камеры охраны, в остальном он только плох

Не спорю, но тем не менее, единый формат видео есть.

jankkhvej (jankkhvej.blogspot.com) 2010

Это не _видео_ формат и это «всё объясняет». Кстати, не знал, что он не работает в IE.

jankkhvej (jankkhvej.blogspot.com) 2010

Я имею в виду конечно же то, что в википедии обозначено как http://en.wikipedia.org/wiki/Mjpeg#M-JPEG_over_HTTP
Обычные видеофайлы с кодированием MJPEG браузерами не воспроизводятся же.

Евгений Степанищев (bolknote.ru) 2010

Комментарий для jankkhvej.blogspot.com:

А, ну да. Это стримовый M-JPEG. Такие подробности дела не меняют.

jankkhvej (jankkhvej.blogspot.com) 2010

Комментарий для Евгения Степанищева:

Чтобы проиграть видео в браузере через этот «формат» надо побить его на кадры, и организовать поток с границами между кадрами через MIME. Ни один вебсервер этого не умеет сам по себе.
В то же время для вещания через тег <VIDEO> достаточно любого сервера и простого файла в оригинальном формате.
Вот и вся разница.

Евгений Степанищев (bolknote.ru) 2010

Комментарий для jankkhvej.blogspot.com:

Ни один вебсервер этого не умеет сам по себе.

А что это доказывает? Ни один сервер сам по себе не умеет WebSockets, скажем. Ну и что? Или, вот, gzip’ить сам по себе тоже ни один веб-сервер не умеет, всё модулями. Не было потребности стримить M-JPEG, вот и нет модуля. Появится потребность — напишут.

В то же время для вещания через тег <VIDEO> достаточно любого сервера и простого файла в оригинальном формате.

Это совершенно не повод не помещать видеоформат в тег VIDEO.

lexako 2011

нашёл хитрый способ вещания mjpeg через тэг video
\<video poster=» http://x.x.x.x:8080%22%5C%3E
Your browser does not support the VIDEO tag and/or RTP streams.
\</video\>
firefox работает на ура =)

Евгений Степанищев (bolknote.ru) 2011

Комментарий для lexako:

А какой FF поддерживает mJPEG в VIDEO?

lexako 2011

а FF и не умеет, тут фишка в poster= это как бы картинка перед запуском видео, вот и оказалось, что вещания-то и нет, один постер =) для вещания надо src=

Евгений Степанищев (bolknote.ru) 2011

Комментарий для lexako:

А! Круто, спасибо!

lexako 2011

Комментарий для Евгения Степанищева:

....Полноэкранный режим, что естесственно не работает..

Благодарный 2014

Спасибо! Помогло! Однако возник вопрос. Как остановить поток? подставляю в poster пустое или левое значение, а в сети в браузере все равно пингует поток