[Wiki] Motion JPEG
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] [...]
Neue Kategorie – Wiki
Moin moin,
nur um eventueller Verwunderung vorzuwirken, möchte ich euch hiermit darauf aufmerksam machen, dass es hier demnächst eine neue Kategorie mit vielleicht etwas merkwürdigen Artikeln geben wird.
Die Kategorie wird den Namen “Wiki” tragen und nach und nach mit Artikeln befüllt, denen im Gegenteil zu allen anderen Artikeln, die ihr hier so lesen könnt, vollständig meine persönliche Note fehlen wird.
Die Artikel im Wiki sollen reine Know-how Artikel sein. Sie sind zwar alle von mir selbst geschrieben, aber jedoch frei von Kommentaren meinerseits.
Wenn ihr euch nun fragt, was das soll, kann ich das gut verstehen, doch auch dem möchte ich hiermit gleich Abhilfe schaffen. Ein paar Mal kam es schon vor, dass ich in meinen Artikeln und Snippets ein paar Techniken und Begriffe vorausgesetzt habe, die dem ein oder anderen nicht ganz geläufig waren. Um diese Artikel nun nicht bis ins Unendliche aufzublähen, werde ich zu bestimmten Themen Wiki-Artikel anlegen, in denen ihr euch das nötige Hintergrundwissen für meine anderen Artikel aneignen könnt.
Konkret sieht das zum Beispiel wie folgt aus. Ich werde demnächst einen Artikel veröffentlichen, der euch zeigt, wie ihr Bilder eurer Webcam Live als Video ins Internet streamen könnt. Hierzu werden wir die MJPEG-Kodierung verwenden. Da ich davon ausgehe, dass sich die Ersten gerade am Kopf kratzen, wird es einen Wiki-Artikel zum Thema MJPEG geben. So einfach ist das.
Und nun genug des Offtopic und viel Spaß beim weiteren Stöbern in meinem Blog.
Viele Grüße,
Raffi
