2017-01-04 4 views
1

Ich entwickle gerade einen Drohnen-Simulator in Unity 5 und ich habe 4 Unity-Kameras in meiner Szene. Ich arbeite jetzt an einer Lösung zu Stream der Bildschirm einer virtuellen Kamera in Unity, zu meinem Android-Smartphone, in Echtzeit. Ich dachte über diese Schritte:Unity 5 - Stream Unity-Kamera zu Smartphone

  1. die Bildschirmpixel auf einen leeren Texture2D Lesen Texture2D.ReadPixels

  2. Encode die Texture2D mit EncodeToJPG oder EncodeToPNG

3. Senden mit die codierten Bytes zum Gerät (über einen Socket zum Gerät; oder mit this WebRTC Lösung)

  1. Auf dem Gerät: die Bytes in ein Bild lesen (eine Kombination aus ByteArrayInputStream und BitmapFactory zum Beispiel unter Verwendung)

ich schon fertig, die ersten beiden Schritte. Jetzt habe ich keine Ahnung, wie man mit Sockets arbeitet, also benutze ich WebRTC. Aber wie kann ich den JavaScript-Code in meinem Unity-Projekt implementieren? Kann mir jemand dabei helfen?

Ich fand auch eine WebRTC API in einem Forum, aber meine Netzwerkfähigkeiten sind nicht gut genug. Kann mir vielleicht jemand sagen, wo ich die Peer-to-Peer-Verbindung in diesem Code erstelle?

Forum: https://forum.unity3d.com/threads/unitypeerjs-simple-webrtc-support-for-unity-webgl.310166/

-Code (WebRTC-API für die Einheit):https://www.pastiebin.com/embed/5880b2815c96a

+0

Das erste, was ich dachte, als ich Ihre Frage las, war, eine einfache Client/Server-Anwendung zu erstellen. Also muss Ihre Client-Anwendung nur eine Verbindung zum Server herstellen und die Server-Kamera freigeben. Es sollte einfacher zu machen –

+0

Welche Art von Kamera verwenden Sie?Wenn Sie eine Action-Kamera haben, die das Video über WiFi streamt, können Sie den Stream wahrscheinlich direkt mit einem der im Store verfügbaren Video-Player (z. B. VLC-Suche) oder dem in der Betaversion 5.6 verfügbaren VideoPlayer lesen. – Vancete

+0

Vielen Dank für Ihre Antworten. @Vancete Was meinst du, welche Kamera? In meiner Szene sind derzeit 4 Unity-Kameras und eine davon, ich möchte gleichzeitig mein Smartphone senden. – murcoder

Antwort

0

Sie werden nicht in der Lage sein, codiert JPGs mit Unity zu streamen. Ein Hauptgrund ist, dass der JPEG-Dekodierungsprozess den Haupt-Thread blockiert, bis das JPEG dekodiert ist und die resultierenden Pixeldaten auf die GPU hochgeladen werden - dies verursacht auf allen Plattformen erhebliche Leistungsprobleme. Derzeit gibt es auch keine vollständige kugelsichere Variante, um ein Video von einer beliebigen Videosenke zu streamen - somewhere on the Unity Roadmap is to enable video streaming from the builtin video player.

As of Dec 2017

Wenn Ihr Android-App nicht Unity abhängig ist, können Sie mit HLS oder MPEG-Dash als Streaming-Variante - Sie werden unabhängig einen Videopuffer benötigen, die so klein wie 5 sein können - 10 Frames. Eine Variante wäre, Videobilder direkt in FFMPEG zu poolen, was es ermöglicht, sie als HLS-Stream zu demuxen. Andere Varianten, wenn Sie keine sehr großen Entfernungen zwischen dem Quellgerät und dem Android-Gerät haben, wären RTC- oder RTSP-Streams.

Wenn Sie immer noch auf Unity auf Android bestehen, können Sie Glück mit diesem Asset haben: https://www.assetstore.unity3d.com/en/#!/content/56355 (sie bieten Ihnen eine kostenlose und eine reduzierte Version) - wir verwenden es in der Produktion ziemlich viel und es ermöglicht Ihnen das System -Standgeber in Unity.

Je nach Anwendungsfall würde JPEG2000 funktionieren, für das dann nur ein Browser benötigt wird. Mit JPEG2000 können Sie grundsätzlich einen offenen Socket behalten, der JPEG-Daten ausgibt. (Unity unterstützt das auch nicht.)