2009-12-01 11 views
6

Ich werde eine Anwendung in C++ erstellen, die Strom von Fotos erstellt und dann sendet sie als Video-Stream zu einer anderen Anwendung. irgendwelche Ideen über wie kann ich anfangen? was ich meine ist, welche Bibliotheken soll ich verwenden und was die Codierung? Ich denke an MJPEG und UDP oder RTP als Protokoll .... jede Hilfe würde sehr geschätzt werden.Video-Streaming mit C++

Antwort

5

Wenn Ihre Eingabedaten nur eine Reihe zufälliger Bilder sind, nicht Video, werden Sie kein "Video-Streaming" durchführen. Du wirst nur eine Reihe voller Bilder senden. Es ist nicht notwendig, die Videokodierungstechnologie zu verwenden, sondern einfach die Übertragung der Bilder zu ermöglichen. Video-Encoder verlassen sich darauf, dass jeder Frame verschiedene Beziehungen zum vorherigen Frame hat, wie es im tatsächlichen Video üblich ist. Für die Eingabe von zufälligen Bildern werden sie nicht so viel komprimieren können und eine Einzelbildkomprimierung (z. B. JPEG/PNG/was auch immer) wird sehr wahrscheinlich bereits auf Ihre Eingabedaten angewendet.

Wahrscheinlich am einfachsten, den Inhalt jeder Datei zusammen mit dem ursprünglichen Dateinamen zu senden und den empfangenden Client die Datei auf der Festplatte neu erstellen und vorhandene diskorientierte Bibliotheken zum Öffnen und Decodieren des Abbilds verwenden.

Sie sollten wahrscheinlich nur TCP für diese verwenden, nichts in Ihren Anforderungen, die angeben, dass Sie die komplizierteren und fehleranfälligen UDP/RTP-basierten Lösungen verwenden müssen.

+2

Die Ausnahme ist "Motion JPEG" (MJPEG), das ist eigentlich nur eine Folge von JPEG-komprimierten Bildern mit jeweils einer kleinen Kopfzeile. Meine Canon Digitalkamera hat Videos in diesem Format aufgenommen. –

+0

Der Unterschied zwischen mehreren Bildern und Videostreams (mit Ausnahme der Art der Komprimierung) besteht darin, dass Sie im Videostream eine Zeitsynchronisierung durchführen. –

0

Verwenden Sie ffmpeg library für die Codierung Ihres Streams und verwenden Sie RTP/RTSP-Stack, um sie zu streamen.

5

Für den Streaming-Teil können Sie Live555 verwenden. Es sollte alles abdecken, was Sie brauchen. Das lässt immer noch das Problem der Generierung eines MJpeg Stream. Ich kann nur hier vermuten, FFMpeg könnte ehat Sie suchen (wie ich sehe, deckt es auch Streaming, so dass Sie nur diese benötigen). Ich denke, dass MJpeg sehr für Ihre Anwendung geeignet ist. Was TCP oder UDP betrifft, hängt davon ab, wie Sie es verwenden möchten. UDP macht Sinn wenn du deinen Stream Multicast machen willst, ansonsten würde ich TCP bevorzugen, weil es zuverlässiger ist.

Hoffe, dass einige nützliche Tipps sind.