2015-06-10 3 views
5

Ich benutze WebRTC in einem Szenario, in dem der Client-Videostream auf einem Drittanbieterserver https://tokbox.com/ aufgezeichnet wird. Ich würde gerne ein Wasserzeichen in das aufgenommene Video einfügen.Wie ändert man den Inhalt der WebRTC MediaStream Videospur?

Untersuchung brachte mich zu dieser Seite http://w3c.github.io/webrtc-pc/#mediastreamtrack und es scheint, dass es technisch möglich ist, da es sagt, dass:

Ein Mediastream mit getUserMedia erworben() ist standardmäßig zugänglich zu einer Anwendung. Dies bedeutet, dass die Anwendung auf den Inhalt von Tracks zugreifen, deren Inhalt ändern und dieses Medium an jeden beliebigen Peer senden kann.

Dies ist genau das, was ich brauche, aber ich habe keine Beispiele oder Erklärungen dieser Funktion gefunden. Ich würde gerne einen Rat von WebRTC Experten bekommen.

+0

WebRTC beschäftigt sich nur mit der Erfassung und Verteilung des Inhalts und kümmert sich nicht um die Nachbearbeitung. Das Hinzufügen des Wasserzeichens ist ein Problem, das sich auf den Video-Codec bezieht - VP8 oder VP9. AFAIK gibt es keine Möglichkeit, ein Wasserzeichen hinzuzufügen, ohne das Video zu transkodieren. Aber es könnte einige kommerzielle Lösungen geben, die dies ohne Transcodierung tun, da dies ein allgemeines Problem ist. –

Antwort

6

Sie müssen ein Canvas verwenden, um das Video von getUserMedia zu routen, es dort zu ändern und es dann mithilfe von leinwand.captureStream() wieder in einen MediaStream umzuwandeln. Das ist großartig - außer dass canvas.captureStream(), obwohl in der WG vereinbart, noch nicht in der Spezifikation enthalten ist. (Es gibt eine Pull-Anfrage mit dem vorgeschlagenen Wortschatz, das Mozilla geschrieben hat.)

Soweit Implementierungen: Die erste Implementierung von captureStream() ist gerade in Firefox Nightly (41) gelandet, und es ist immer noch hinter einem Pref bis zu einem oder zwei Bugs Ist repariert. Sie können es mit canvas.capturestream.enabled in about: config aktivieren. Sie können eine Demo unter Mozilla's test page for captureStream() sehen.

Ohne canvas.captureStream() wäre es schwierig; Am besten wäre es, getUserMedia-> canvas-> zu verwenden und dann video.captureStream() (oder captureStreamUntilEnded()) zu verwenden - videocaptureStream wartet jedoch auch auf die formelle Akzeptanz. Mozilla hat seit einiger Zeit video.captureStream(), und ich denke, es funktioniert in FF 38 (aktuelle Version).