Ich habe seit Tagen im Internet gesucht, wie man eine Video-Streaming-Funktion von einem Android-Telefon auf ein anderes Android-Telefon über eine WiFi-Verbindung implementiert, aber ich kann anscheinend nichts Nützliches finden. Ich suchte bei Android-Entwicklern nach Beispielcode, Stackoverflow, Google, Android-Blogs, aber nichts. Alles, was ich finden kann, sind Telefon-zu-Desktop- oder Desktop-zu-Telefon-Lösungen für das Streaming, aber nichts, was ich in meiner Implementierung ausleihen kann.
Ich muss einen Roboter mit einem Arduino ADK steuern, also verwende ich zwei Telefone, eines, das am Roboter montiert wird, und eines, das den Videostream vom Roboter empfängt. Ich erwähne dies, weil ich versuche, die kleinste Verzögerung zwischen der Sendezeit und der Sendezeit zu erreichen.
Ich schreibe 2 Apps, eine Master-App zur Steuerung des Roboters (vom Handheld-Telefon), die die Slave-App steuert und den Stream empfängt, und die zweite Slave-App, die auf dem Roboter-Telefon ausgeführt wird und die Motoren / Aktuatoren steuert / Streaming zur Master-App. Ich kann leider keine Apps von Drittanbietern verwenden. Ich muss den Videostream-Code in meine 2 Apps integrieren.
Welche Möglichkeiten gibt es dafür? Es ist auch sehr schwer zu tun, weil ich nie mit Videostreaming gearbeitet habe. Ich mache es sowohl in der Java- als auch in der Android-Entwicklung ziemlich gut. Wie soll ich den Stream codieren / decodieren, wie initiiere ich die Verbindung, muss ich mit UDP anstelle von TCP / IP arbeiten? Ich weiß wirklich nicht, wo ich anfangen soll, ohne Beispielcode irgendwo. Ich bin mir ziemlich sicher, dass dies erreicht werden kann. Ich kann einfach nichts Nützliches finden, um in die richtige Richtung zu starten.
Ich bin über Spydroid gestolpert, aber es verwendet VLC auf einem Desktop, also ist es nicht gut für mich.
EDIT: Schauen Sie sich Cagney Moreaus Blog an . Er geht auf Details zur Umsetzung ein.
quelle
Antworten:
Wenn Sie die Aufnahme- und Wiedergabefunktion in Ihrer App nicht benötigen, ist die Verwendung der Standard-Streaming-App und des Players eine vernünftige Wahl.
Wenn Sie sie jedoch in Ihrer App benötigen, müssen Sie sich die MediaRecorder- API (für die Server- / Kamera-App) und MediaPlayer (für die Client / Player-App) ansehen .
Schneller Beispielcode für den Server:
Auf der Spielerseite ist es etwas schwierig, Sie könnten dies versuchen:
Leider mag Mediaplayer dies nicht, so dass Sie einige Optionen haben: entweder (a) Speichern von Daten von Socket zu Datei und (nachdem Sie ein bisschen Daten haben) Spielen mit Mediaplayer von Datei zu Datei oder (b) Erstellen eines winzigen http Proxy, der lokal ausgeführt wird und die GET-Anforderung des Mediaplayers akzeptieren, mit HTTP-Headern antworten und dann Daten vom Remote-Server auf diesen kopieren kann. Für (a) würden Sie den Mediaplayer mit einem Dateipfad oder einer Datei-URL erstellen, für (b) geben Sie ihm eine http-URL, die auf Ihren Proxy verweist.
Siehe auch:
Streamen Sie Live-Videos von Telefon zu Telefon mit Socket fd
MediaPlayer ruckelt zu Beginn der MP3-Wiedergabe
quelle
setDataSource(MediaDataSource)
anstelle von verwendenFileDescriptor
. Durch die ImplementierungMediaDataSource
können Sie Ihr eigenes Netzwerk lesen und puffern, ohne in eine temporäre Datei schreiben zu müssen.Ich habe einmal an so etwas gearbeitet, aber ein Video zu senden und es in Echtzeit abzuspielen, ist eine sehr komplexe Sache. Ich schlage vor, Sie arbeiten nur mit PNGs. In meiner Implementierung habe ich PNGs mit der Host-Kamera erfasst und dann über das Netzwerk an den Client gesendet. Dieser zeigt das Bild an, sobald es empfangen wurde, und fordert das nächste Bild vom Host an. Da Sie über WLAN verfügen, ist die Kommunikation schnell genug, um etwa 8-10 Bilder pro Sekunde zu erhalten (nur Annäherung, ich habe an Bluetooth gearbeitet). Das sieht also wie ein kontinuierliches Video aus, aber mit viel weniger Aufwand. Für die Kommunikation können Sie UDP-Sockets (schneller und weniger komplex) oder DLNA (nicht sicher, wie das funktioniert) verwenden.
quelle
Sie können IP Webcam oder DLNA verwenden. Zum Beispiel werden Samsung-Geräte mit einer App namens AllShare geliefert, die DLNA-fähige Geräte im Netzwerk freigeben und darauf zugreifen kann. Ich denke jedoch, dass IP Webcam Ihre beste Wahl ist. Sie sollten in der Lage sein, den von ihm erstellten Stream mit dem MX Video Player oder ähnlichem zu öffnen.
quelle
Sie können den Android VLC überprüfen, der Videos streamen und abspielen kann. Wenn Sie mehr indagieren möchten, können Sie deren GIT überprüfen , um zu analysieren, was sie tun. Viel Glück!
quelle