it-swarm.com.de

Live-Stream-Video von einem Android Telefon zu einem anderen über WiFi

Ich habe seit Tagen im Internet nach Möglichkeiten gesucht, eine Video-Streaming-Funktion von einem Android Telefon zu einem anderen Android Telefon über eine WiFi-Verbindung zu implementieren, aber ich kann ' Ich habe Android Entwickler nach Beispielcode, Stackoverflow, Google, Android Blogs, aber nichts. Alles, was ich finden kann, sind irgendwelche von 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, von denen eines auf dem Roboter montiert wird und eines 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 aus), 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? Auch ist es sehr schwer zu tun, weil ich nie mit Videostreaming gearbeitet habe, hart ich bin ziemlich gut in beiden Java und Android) Entwicklung. Wie soll ich/decodiere den Stream, wie starte ich die Verbindung, muss ich mit UDP anstelle von TCP/IP arbeiten? Ich weiß wirklich nicht, wo ich anfangen soll, ohne Beispielcode. Ich bin mir ziemlich sicher, dass dies erreicht werden kann. I Ich kann einfach nichts Nützliches finden, um mich in die richtige Richtung zu bewegen.

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.

112
androidu

Wenn Sie die Aufnahme- und Wiedergabefunktionen in Ihrer App nicht benötigen, ist die Verwendung von Standard-Streaming-App und -Player eine vernünftige Wahl.

Wenn Sie sie jedoch in Ihrer App benötigen, müssen Sie nach MediaRecorder API (für die Server-/Kamera-App) und MediaPlayer (für Client/Player) suchen app).

Schneller Beispielcode für den Server:

// this is your network socket
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
mCamera = getCameraInstance();
mMediaRecorder = new MediaRecorder();
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// this is the unofficially supported MPEG2TS format, suitable for streaming (Android 3.0+)
mMediaRecorder.setOutputFormat(8);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
mediaRecorder.setOutputFile(pfd.getFileDescriptor());
mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();

Auf der Spielerseite ist es etwas knifflig, Sie könnten dies versuchen:

// this is your network socket, connected to the server
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(pfd.getFileDescriptor());
mMediaPlayer.prepare();
mMediaPlayer.start();

Leider gefällt Ihnen der Mediaplayer in der Regel nicht, so dass Sie eine Reihe von Optionen haben: entweder (a) Daten vom Socket in eine Datei speichern und (nachdem Sie ein bisschen Daten haben) mit dem Mediaplayer aus einer Datei spielen oder (b) einen winzigen http erstellen Proxy, der lokal ausgeführt wird und die GET-Anforderung von mediaplayer akzeptieren kann, mit HTTP-Headern antwortet und dann Daten vom Remote-Server auf diesen kopiert. 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:

Live-Video von Telefon zu Telefon über Buchse fd streamen

MediaPlayer ruckelt beim Start der MP3-Wiedergabe

53
Alex I

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 sie dann über das Netzwerk an den Client gesendet. Der Client 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 ungefähr 8-10 Bilder pro Sekunde zu erhalten (nur ungefähr, ich habe an Bluetooth gearbeitet). Das wird also wie ein kontinuierliches Video aussehen, 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.

9
Arveen

Sie können IP Webcam oder DLNA verwenden. Zum Beispiel werden Samsung-Geräte mit einer App namens AllShare ausgeliefert, mit der DLNA-fähige Geräte im Netzwerk freigegeben und darauf zugegriffen werden können. Ich denke, IP-Webcam ist die beste Wahl. Sie sollten in der Lage sein, den erstellten Stream mit MX Video Player oder ähnlichem zu öffnen.

8
ldam

Sie können die Android VLC es kann streamen und Video abspielen, wenn Sie mehr indagieren möchten, können Sie deren GIT überprüfen analysieren, was sie tun. Viel Glück!