Motion JPEG, kurz auch MJPEG genannt, ist ein Video-Codec, bei dem jeder Frame einzeln im JPEG-Format gespeichert wird.
Im Gegenteil zu MPEG komprimierten Videos, bei denen unter anderem auch die Unterschiede zwischen den einzelnen Einzelbildern gespeichert werden, wird bei MJPEG komprimierten Videos jedes Einzelbild separat im JPEG-Format gespeichert. Dies bringt Vor- sowie Nachteile mit sich.
Zum einen gibt es keine Artefaktbildung bei schnellen Szenen/bewegten Bildern, zum anderen macht sich dies aber auch in der Dateigröße bemerkbar, die bei MJPEG komprimiertern Videos um einiges höher ist, als bei anderen Video-Kodierungen.
(Bei SVHS-Qualität kommen ca. 25 MBit/s bei Nutzung von MJPEG zustande.)
MJPEG kodiertes Videomaterial findet man heutzutage meistens nur noch im IP-Cam Bereich.
(IP-Cam = Netzwerkkamera)
Für Netzwerkkameras ist die MJPEG Kodierung ideal, da sie relativ wenig Rechenleistung braucht und der von der Kamera erstellte Videostream in jedem gebräuchlichen Browser abgespielt werden kann.
Desweiteren können aber auch Geräte wie iPhone, iPad, Sonys Playstation 3 oder die Nintendo Wii mit Material im MJPEG-Format umgehen.
Wie ist ein MJPEG Stream strukturiert?
Da MJPEG kodierte Videos meistens über das HTTP-Protokoll verschickt werden und in einem Webbrowser angesehen werden sollen, benötigen Sie einen speziellen MIME-Type namens “multipart/x-mixed-replace“.
Danach folgt eine weitere spezielle Zeichenfolge, die so aussieht: “;boundary=–boundary”
Was hinter dem “boundary=” steht, kann vom Programmierer frei festgelegt werden. Es ist der Trenner, der später im Videostream sagt, wann ein neues Einzelbild im Datenstrom auftaucht.
Ein simpelster MJPEG Stream könnte wie folgt aussehen:
HTTP/1.0 200 OK Server: code-bude.net beispiel server Cache-Control: no-cache Cache-Control: private Content-Type: multipart/x-mixed-replace;boundary=--boundary --boundary Content-Type: image/jpeg Content-Length: [länge des bildes in bytes] [jpeg bytes schreiben] --boundary Content-Type: image/jpeg Content-Length: [länge des bildes in bytes] [jpeg bytes schreiben] [...]