Бардак: 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.
3 июля 2010 13:01

vladon (vladon.ru)
3 июля 2010, 20:41

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

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

bolk (bolknote.ru)
3 июля 2010, 22:56, ответ предназначен vladon (vladon.ru):

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

jankkhvej (jankkhvej.blogspot.com)
4 июля 2010, 17:28

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

jankkhvej (jankkhvej.blogspot.com)
4 июля 2010, 17:37

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

bolk (bolknote.ru)
5 июля 2010, 11:08, ответ предназначен jankkhvej (jankkhvej.blogspot.com):

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

jankkhvej (jankkhvej.blogspot.com)
5 июля 2010, 22:07, ответ предназначен bolk (bolknote.ru):

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

bolk (bolknote.ru)
5 июля 2010, 23:40, ответ предназначен jankkhvej (jankkhvej.blogspot.com):

Ни один вебсервер этого не умеет сам по себе.
А что это доказывает? Ни один сервер сам по себе не умеет WebSockets, скажем. Ну и что? Или, вот, gzip'ить сам по себе тоже ни один веб-сервер не умеет, всё модулями. Не было потребности стримить M-JPEG, вот и нет модуля. Появится потребность — напишут.
В то же время для вещания через тег <VIDEO> достаточно любого сервера и простого файла в оригинальном формате.
Это совершенно не повод не помещать видеоформат в тег VIDEO.

lexako (инкогнито)
31 января 2011, 17:33

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

bolk (bolknote.ru)
31 января 2011, 20:55, ответ предназначен lexako

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

lexako (инкогнито)
1 февраля 2011, 08:15

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

bolk (bolknote.ru)
1 февраля 2011, 10:39, ответ предназначен lexako

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

lexako (инкогнито)
1 февраля 2011, 11:44, ответ предназначен bolk (bolknote.ru):

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

Благодарный (инкогнито)
28 октября 2014, 14:43

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

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)