Vorwort
Wenn ein bestimmter Pfad oder Weg von vielen benutzt wird, wird er auch breiter und besser ausgebaut.
Das selbe Prinzip trifft auch in der Computerwelt zu. In diesem Fall redet man vom Programmpfad oder code path. Ein viel benutzter code path ist besser getestet und in der Regel auch besser unterstützt.
Seit einiger Zeit beschäftige ich mich mit der Video/Audiokommunikationsproblematik unter Linux (aber ich bin kein Kernentwickler von irgend welchen betroffenen Teil des code path). Kurz gesagt, das Problem des Linux ist gleichzeitig sein Vorteil, also die bunte Auswahl von Programmen und Pfaden. Als ich beschlossen hatte, etwas zu der Lösung des Problemes beizutragen, mußte ich mich entscheiden welchen Weg ich gehen will.
Wenn man die Route meiner Wahl beschreiben will, dann sieht es folgendermassen aus:
Webcam -> kernel-uvcvideo -> kernel-v4l2 -> gst-v4l2 -> gst-vp8enc -> gst-rtpvp8pay -> telepathy - empathy -> gst-rtpvp8depay -> vp8dec -> display
Wenn man der Pfadlogik immer noch folgt, kommt man zu der Schlußfolgerung, daß jede einzelne Stufe dieses Weges auch anderswo angewendet sein sollte. Die folgende Skizze soll es besser reflektieren:
Mit grün habe ich die Teile markiert die ich mehr oder weniger gut getestet habe und manchmal auch erweitert.
Als Kerncodec meines Weges hab ich den vp8 genommen. Aus folgenden Grund: Für ein Videochat kämen drei Codecs in Frage: x264, theora und vp8. x264 wird in der Regel bei google talk eingesetzt. Der aber kommt nicht in Frage wegen der Lizenzdiskrepanzen. Also man mußte es immer nach installieren und so weiter... Den Zug mit Theora haben wir schon verpaßt. Vp8 wird immer noch intensiv von google gepflegt und man soll die Gelegenheit nutzen um nicht die gleichen Fehler wie mit Theora zu machen. Das Problem mit dem Vp8 Codec ist folgender: Weil viele glauben, dass ausschließlich google daran arbeitet, wird es für Adoption und Erweiterung zu wenig gemacht, wenn überhaupt. Google arbeitet nur an libvpx, der Library selbst. Die Integration in die Opensource Projekte ist dem Opensource überlassen. Deswegen ist die Lage von vp8 nicht so optimal. Nun um die Lage mit Videochat zu verbessern habe ich beschlossen so viel wie möglich zu tun um vp8 in den Alltag zu bringen.
Mein erstes Ziel war alle dvd die ich besitze als webm/vp8 zu speichern. Dadurch wurden einige Bugs entdeckt und einige Erweiterungen entstanden. Alle sind herzlich eingeladen diesen Pfad auch zu nutzen. Dafür wird man aber die neueste Version der gstreamer brauchen.
Hier ist ein Beispiel wie man ein Backup von einer DVD macht. (ich trage keine Verantwortung für illegale Nutzung): zu erst soll man am besten einen dvd dump machen. Der wird nur einige Minuten dauern und wird ungefähr 4 GB groß:
mplayer dvdnav://1 --dumpstream
Viele modernen dvds kann man nur mit dvdnav abspielen (ein älteres, anscheinend nicht mehr gepflegtes plugin für mplayer). Die Nummer die danach folgt wird oft vertuscht, deswegen soll man zu erst ohne - -dumpstream testen ob es geht.
Manchmal befindet sich das Hauptvideo irgendwo im dvdnav://64, also testen.
Danach kommt der Inhalt aus meinen Skript:
gst-launch filesrc location=stream.dump ! mpegpsdemux name=demux webmmux name=mux ! filesink location=out_audio.webm demux.audio_80 ! a52dec mode=2 ! audiorate tolerance=50000000 ! audioconvert ! audioresample ! audio/x-raw-float,rate=44100,channels=2 ! taginject tags="language-code=eng" ! queue ! vorbisenc ! mux. demux.audio_81 ! a52dec mode=2 ! audiorate tolerance=50000000 ! audioconvert ! audioresample ! audio/x-raw-float,rate=44100,channels=2 ! taginject tags="language-code=ger" ! queue ! vorbisenc ! mux.hier wandeln wir zwei Audiospuren gleichzeitig und fügen die Tags zu, die die Sprache bezeichnen.
gst-launch filesrc location=stream.dump ! mpegpsdemux name=demux demux.video_e0 ! mpeg2dec ! ffmpegcolorspace ! videorate ! vp8enc threads=3 multipass-mode=1 bitrate=1500000 ! fakesinkhier machen wir einen ersten Durchgang für Video
gst-launch filesrc location=stream.dump ! mpegpsdemux name=demux webmmux name=mux ! filesink location=out_video.webm demux.video_e0 ! mpeg2dec ! ffmpegcolorspace ! videorate ! vp8enc threads=3 multipass-mode=2 bitrate=1500000 auto-alt-ref-frames=1 speed=0 max-keyframe-distance=360 min-quantizer=0 max-quantizer=60 lag-in-frames=16 minsection-pct=5 maxsection-pct=800 ! queue ! mux.Hier machen wir den zweiten Pass. Es wird viele Stunden dauern. Danach haben wir zwei Dateien: out_audio.webm und out_video.webm Die sollen wir zusamen mischen mit folgenden Befehl:
mkvmerge --webm -o out.webm out_audio.webm out_video.webm
Achtung nur neueste Software nutzen, sonst trifft man alle alte Bugs die ich schon beseitigt hatte.
Bei Ubuntu 11.10 mitgelieferte gstreamer, libvpx und mkvtoolnix sind veraltet.
PS: Nutzen sie nie das “quality†Option des vp8enc und setzensie immer “bitrate†für DVDs und meisten anderen Sachen!
MfG Oleksij Rempel (Alexey Fisher)