Suchen Sie für die Schnellste video-encoder mit den wenigsten lags zu streamen, webcam-streaming auf ipad
Ich bin auf der Suche nach der schnellsten Weise zu Kodieren eine webcam-stream, die angezeigt werden, die in einem html5-video-tag. Ich bin mit einem Pandaboard: http://www.digikey.com/product-highlights/us/en/texas-instruments-pandaboard/686#tabs-2 für die hardware. Verwenden können, gstreamer, cvlc, ffmpeg. Ich werde ihn zu fahren eines Roboters, so müssen die geringste Menge an Verzögerung im video-stream. Qualität muss nicht groß sein, und es nicht benötigen audio. Auch ist dies nur für einen client-also Bandbreite ist kein Problem. Die beste Lösung, so weit ist es mit ffmpeg mit einer mpjpeg gibt mir um 1 Sek verzögert. Alles besser?
ffmpeg.org/trac/ffmpeg/wiki/StreamingGuide#Latency listet einige Hinweise/Hinweise für die Latenz mit ffmpeg
InformationsquelleAutor kelly | 2012-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bin ich gebeten worden, dieses viele Male, so ich werde versuchen und beantworten Sie diese etwas allgemein und nicht nur für mjpeg. Sehr geringe Verzögerungen in einem system erfordert ein bisschen system engineering-Aufwand und auch Verständnis für die Komponenten.
Einige einfache top-level-Optimierungen, die ich denken kann, sind:
Sicherstellung der codec konfiguriert ist, für die geringste Verzögerung. Codecs haben (vor allem die embedded-system-codecs) einen low-delay-Konfiguration. Aktivieren Sie es. Wenn Sie bei Verwendung von H. 264, die es am meisten brauchen. Die meisten Menschen erkennen nicht, dass durch die standard-Anforderungen H. 264 Decoder müssen Puffer frames, bevor es angezeigt wird. Dies kann bis zu 16 für Qcif und bis zu 5 frames bei 720p. Das ist eine Menge von Verzögerungen bei den ersten frame aus. Wenn Sie nicht mit H. 264 noch tun, damit Sie nicht haben, B-Bilder aktiviert. Dies fügt Verzögerung immer das erste Bild aus.
Da Sie über mjpeg, ich glaube nicht, das ist für Sie viel.
Encoder wird auch ein rate-control-delay. (Genannt init-Verzögerung oder vbv-buf-Größe). Legen Sie es auf die kleinsten Werte, die Ihnen eine akzeptable Qualität. Das wird auch eine Verringerung der Verzögerung. Denken Sie an dieses als bitstream Puffer zwischen encoder und decoder. Wenn Sie mit x264 wäre die vbv Puffer-Größe.
Einige einfache weitere Konfigurationen: so wenig ich Bilder wie möglich (große intra-Periode).
I-Bilder sind riesig, und fügen Sie die Verzögerung über das Netzwerk senden. Dies ist vielleicht nicht sehr sichtbar in Systemen, in denen Ende-zu-Ende-Verzögerung ist im Bereich von 1 Sekunde oder mehr, aber wenn Sie entwerfen Systeme, die Ende-zu-Ende Verzögerung von 100ms oder weniger, diese und mehrere andere Aspekte ins Spiel kommen. Auch sicherstellen, dass Sie mit einer low-latency-audio-codec aac-lc (und nicht heaac).
In Ihrem Fall zu erhalten, um niedrigere Latenzen würde ich vorschlagen, Weg von mjpeg und verwenden Sie mindestens mpeg4 ohne B-Bilder (Simple profile) oder am besten ist H. 264 baseline-Profil (x264 gibt eine zerolatency-option). Der einfache Grund, den Sie erhalten niedriger die Latenz ist, erhalten Sie niedrigeren bitrate post-Kodierung, Daten zu senden, und Sie gehen können, um die volle framerate. Wenn Sie halten müssen mjpeg-haben Sie in der Nähe, was Sie bekommen können, ohne erweiterte features Unterstützung von Codecs und system mit dem open-source-Komponenten, wie Sie ist.
Ein weiterer Aspekt ist die übertragung der Inhalte an die display-Einheit. Wenn Sie udp verwenden, wird es reduzieren die Latenz ziemlich viel im Vergleich zu tcp, obwohl es sein kann, lossy-in Zeiten je nach Netzwerk-Bedingungen. Sie haben erwähnt, dass html5-video. Ich bin neugierig, wie Sie tun live-streaming einer video-tag in html5.
Gibt es andere Aspekte, kann auch optimiert werden, die würde ich in die Kategorie "advanced" und erfordert, dass das system Ingenieur, zu versuchen, verschiedene Dinge aus
Was ist die Netzwerk-Pufferung in der OS? Das Betriebssystem puffert die Daten vor dem senden Sie es aus performance-Gründen. Das zwicken zu bekommen, eine gute balance zwischen Leistung und Geschwindigkeit.
Verwenden Sie CR oder VBR? Während die CBR ist ideal für low jitter können Sie auch aufgestellter vbr, wenn der codec bietet.
Können Ihren decoder starten die Dekodierung teilweise frames? So müssen Sie nicht sorgen zu machen über die Gestaltung der Daten, bevor es an den decoder. Einfach weiter pushen der Daten auf den decoder so bald wie möglich.
Können Sie tun, field-Codierung? Hälften der Zeit von frame-Codierung, bevor man das erste Bild aus.
Können Sie tun, Scheiben Codierung mit callbacks, wenn ein slice verfügbar ist, zu senden über das Netzwerk sofort?
Im sub-100 ms Latenz Systeme, die habe ich in alle der oben genannten sind, verwendet. Einige der Funktionen möglicherweise nicht verfügbar in open-source-Komponenten, aber wenn Sie es wirklich brauchen und sind begeistert, Sie könnte gehen Sie vor und setzen Sie um.
BEARBEITEN:
Ich merke Sie nicht wollen, eine Menge der oben für eine ipad-streaming-Lösung und es sind Einschränkungen, weil der hls auch die Latenz, die Sie erreichen können. Aber ich hoffe, es wird sich als nützlich erweisen, in anderen Fällen, wenn Sie müssen jede Art von low-latency system.
AAC-LC scheint 100+ ms langsamer als AAC-LD (20+ ms Latenz) und AAC-LD ist langsamer als Opus (<20 ms)
InformationsquelleAutor av501
Hatten wir ein ähnliches problem, in unserem Fall war es notwendig zu Zeit auf externe Ereignisse und synchronisieren Sie Sie mit dem video-stream. Wir haben versucht, mehrere Lösungen, aber die hier beschrieben wurde das problem gelöst und extrem geringe Latenz:
Github-Link
Es nutzt gstreamer transcode, mjpeg, welche dann an einem kleinen python-streaming-server. Dies hat den Vorteil, dass der tag statt, so kann es betrachtet werden, die von den meisten modernen Browsern, einschließlich dem iPhone.
Wie Sie wollen, die <video> tag, eine einfache Lösung ist die Verwendung von http-launch. Dass
hatte die niedrigste Latenz von allen Lösungen, die wir versucht, so könnte es für Sie arbeiten. Seien Sie gewarnt, dass ogg/theora funktioniert nicht auf Safari oder IE, so dass diejenigen, die Ziel-Mac-oder Windows wird sich ändern müssen, um das Rohr zu verwenden, MP4-oder WebM.
Andere Lösung, sieht vielversprechend aus, gst-streaming-server. Wir konnte einfach nicht genug Dokumentation, um es Wert zu verfolgen. Ich würde dankbar, wenn jemand könnte Fragen, eine stackoverflow-Frage, wie es sein sollte verwendet!
haben Sie sich überlegt WebRTC?
InformationsquelleAutor sgbirch