Videostream auf dem Server (PC) von Bildern, die der Roboter über UDP gesendet hat

Hmm. Ich fand das vielversprechend:

http: //sourceforge.net/projects/mjpg-streamer

In Ordnung. Ich werde versuchen zu erklären, was ich versuche, klar und ausführlich.

ch habe einen kleinen humanoiden Roboter mit Kamera und WLAN-Stick dies ist der Roboter). Die durchschnittliche WLAN-Übertragungsrate des Roboters beträgt 1769 KB / s. Der Roboter verfügt über eine 500-MHz-CPU und 256-MB-RAM und ist daher nicht ausreichend für ernsthafte Berechnungen (außerdem werden auf dem Roboter bereits einige Module für Bewegung, Vision, Sonar, Sprache usw. ausgeführt).

Ich habe einen PC, von dem aus ich den Roboter steuere. Ich versuche, den Roboter durch den Raum laufen zu lassen und ein Live-Stream-Video von dem zu sehen, was der Roboter auf dem PC sieht.

Was ich schon gearbeitet habe. Der Roboter läuft so, wie ich es möchte, und nimmt Bilder mit der Kamera auf. Die Bilder werden über das UDP-Protokoll an den PC gesendet, auf dem sie empfangen werden (ich habe dies überprüft, indem ich die eingehenden Bilder auf der Festplatte gespeichert habe).

Die Kamera gibt Bilder zurück, die im YUV442-Farbraum 640 x 480 Pixel groß sind. Ich sende die Bilder mit verlustbehafteter Komprimierung (JPEG), weil ich versuche, die bestmögliche FPS auf dem PC zu erzielen. Ich mache die Komprimierung zu JPEG auf dem Roboter mit PIL-Bibliothek.

Meine Fragen

Könnte mir jemand bitte einige Ideen geben, wie man die eingehenden JPEG-Bilder in einen Live-Videostream konvertiert? Ich verstehe, dass ich dafür einen Video-Encoder brauche. Welchen Video Encoder empfehlen Sie? FFMPEG oder was anderes? Ich bin sehr neu im Streamen von Videos, daher möchte ich wissen, was für diese Aufgabe am besten ist. Ich würde es vorziehen, Python zu verwenden, um dies zu schreiben, daher würde ich einen Video-Encoder oder eine Bibliothek mit Python-API vorziehen. Aber wenn die Bibliothek eine gute Befehlszeilen-API hat, muss sie sich nicht in Python befinden.

Was ist die beste FPS, die ich daraus machen kann? Angesichts der durchschnittlichen WLAN-Übertragungsrate von 1769 KB / s und der Abmessungen der Bilder? Sollte ich eine andere Komprimierung als JPEG verwenden?

Ich freue mich über Codebeispiele. Links zu Artikeln, die erklären, wie das geht, sind ebenfalls in Ordnung.

Einige Codebeispiele. So sende ich JPEG-Bilder vom Roboter zum PC (verkürztes vereinfachtes Snippet). Dies läuft auf dem Roboter:

# lots of code here

UDPSock = socket(AF_INET,SOCK_DGRAM)

  while 1:
    image = camProxy.getImageLocal(nameId)
    size = (image[0], image[1])
    data = image[6]
    im = Image.fromstring("YCbCr", size, data)
    s = StringIO.StringIO()
    im.save(s, "JPEG")

    UDPSock.sendto(s.getvalue(), addr)

    camProxy.releaseImage(nameId)

  UDPSock.close()

  # lots of code here

Hier erhalte ich die Bilder auf dem PC. Dies läuft auf dem PC:

  # lots of code here

  UDPSock = socket(AF_INET,SOCK_DGRAM)
  UDPSock.bind(addr)

  while 1:
    data, addr = UDPSock.recvfrom(buf)
    # here I need to create a stream from the data
    # which contains JPEG image

  UDPSock.close()

  # lots of code here

Antworten auf die Frage(4)

Ihre Antwort auf die Frage