2012-05-09 10 views
12

Ich muss eine Android-App erstellen, um einen Live-TV-Feed anzuzeigen. Die App soll Live-Videostreams von einem Multicast eines DVB-Gateways abspielen, je nach Gateway-Anbieter kann sie UDP oder RTP streamen. Ich habe vlc auf meinem Computer eingerichtet, um UDP und RTP zu streamen, und mir die Finger gebrochen, um den Android-Player dazu zu bringen, sie zu zeigen. Nach einer Weile fand ich heraus, dass Android nur HTTP/S und RTSP Livestreams unterstützt. Ich habe alle FFMPEG-Lösungen und verschiedene Media Player bisher erfolglos ausprobiert. Ich bin kein Videoexperte, aber nach meinem Verständnis ist RTSP eine Verkapselung von RTP, kann mein RTP-Feed verpackt und gestreamt werden (sogar über Proxy)? Kennt jemand eine funktionierende UDP-Lösung?UDP oder RTP Streaming-Lösung für Android

dank

ich einen Tunnel zu schreiben begann, die einen lokalen UDP-Stream von Port 1234 auf eine TCP-Verbindung auf Port geht 8888 I mit VLC mich entschieden, sieht die UDP-Nutzlast korrekt, und ich bin in der Lage zu sehen, Der VLC initiiert die HTTP-Verbindung, wenn ich darauf warte, dass der TCP-Listener die Verbindung akzeptiert. aber immer noch gewohnt VLC spielt den resultierenden HTTP-Stream, meinen Code:

public void Bridge() 
    { 
     //endpoints 
     IPEndPoint myRemoteEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234); 

     //communications objects 
     UdpClient myUdpClient = new UdpClient(myRemoteEndpoint); 
     TcpListener myTcpListener = new TcpListener(IPAddress.Any, 8888); 

     //buffer 
     byte[] buffer = new byte[2048]; 

     //start tcp listener 
     myTcpListener.Start(); 
     Socket tcpAcceptedSocket = myTcpListener.AcceptSocket();    

     while (true) 
     { 
      try 
      { 
       //get data from UDP client 
       buffer = myUdpClient.Receive(ref myRemoteEndpoint); 

       //send bytes received from UDP over TCP 
       tcpAcceptedSocket.Send(buffer); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
     } 

     //close sockets 
     myUdpClient.Close(); 
     myTcpListener.Stop(); 

    } 

irgendwelche Gedanken?

+0

ich irgendeinen Code schätzen würde/Implementierungsmuster. danke nochmal – Omriko

+0

"Gibt es keinen anderen?" – Omriko

Antwort

2

Hoffentlich Sie haben dies bereits gelöst?

Mein erster Gedanke war, "wie verlassen Sie diese while (true) Schleife?"

http://developer.android.com/reference/android/net/rtp/package-summary.html

Vielleicht können Sie android.net.rtp Streaming-Video zu fangen verwenden: lol

RTP wurde 12 in API-Ebene auf dem Android SDK hinzugefügt. Es scheint einen signifikanten Mangel an Tutorials in diesem Bereich zu geben, also wenn du das funktionierst, bin ich mir sicher, dass ein kurzer Bericht die großen G-Suchergebnisse hochfliegen könnte; ganz zu schweigen von den plakaten von 600+ anderen fragen über stackoverflow, die in einer "android udp rtp" suche auftauchen.

Aus der Blog-o-Kugel:

http://burcudogan.com/2011/06/05/android-rtp-implementation-is-based-on-udp/

Und ich in einem Stecker für WebRTC werfen würde, weil es sieht vielversprechend aus:

http://www.html5rocks.com/en/tutorials/webrtc/basics/

+1

Shane danke für die Links, da ich zu dem Zeitpunkt keine Lösung hatte, kaufte ich den MPEG2TS über UDP-Broadcaster (deutlich billiger ...) und schrieb einen Proxy-Code, der das Medium aus dem Stream holt, in eine Datei puffert und " Herunterladen "oder progressives Streaming der Datei vom Client. Es ist keine Lehrbuchlösung für das Problem, aber wir haben es in Gang gesetzt. Ich hoffe, Google wird uns in Zukunft etwas Liebe zeigen und zusätzliche Protokolle unterstützen. Danke noch einmal! – Omriko

+0

Froh, dass Sie es funktioniert haben, und vielen Dank für Ihre Erfahrungen! – CodeShane

+0

Können Sie mit welchem ​​Gerät verknüpfen? Ich bin an etwas ähnlichem interessiert. – egfconnor

Verwandte Themen