2013-04-05 15 views
7

Für meine App muss ich von einer Decklink-Karte zu einer Android-App streamen (ich muss ein Live-Stream sein, also entweder HLS oder RTSP scheint gute Lösungen zu sein, da meine App Android 3+ zielt). Ich habe VLC mit dem Decklink SDK neu kompiliert, und ich bin in der Lage, Live-Stream zu einem anderen PC über das Netzwerk (aber es funktioniert nur 60 Sekunden mit RTSP).VLC RTSP Livestream zu Android

Hier ist, was ich versucht:

  • HTTP Stream:

    ./vlc -vvv decklink:// --sout 
    '#transcode{vcodec=mp4v,acodec=mpga,vb=56,ab=24,channels=1} 
    :standard{access=http{use-key-frames},mux=ts,dst=:3001/stream.mpeg}' 
    

Es arbeitet in Android VLC 0.0.11, aber nur in WiFi, nicht in 3G. Und ich kann es nicht in meiner App mit einem VideoView spielen. Hier ist der Code, den ich verwendet, und die entsprechenden Fehlermeldungen:

String url = "http://134.246.63.169:5554/stream.mpeg"; 

VideoView videoView = (VideoView) this.findViewById(R.id.videoView); 
videoView.setVideoURI(Uri.parse(url));   
videoView.setMediaController(new MediaController(this)); 
videoView.requestFocus(); 
videoView.start(); 

Fehlermeldungen:

04-08 15:26:46.272: D/MediaPlayer(16349): Couldn't open file on client side, trying server side 
04-08 15:26:46.272: V/ChromiumHTTPDataSource(7680): connect on behalf of uid 1080867789 
04-08 15:26:46.272: I/ChromiumHTTPDataSource(7680): connect to http://134.246.63.169:8554/ @0 
04-08 15:26:46.302: I/AwesomePlayer(7680): AwesomePlayer::AwesomePlayer()in 
04-08 15:26:46.302: I/AwesomePlayer(7680): AwesomePlayer::AwesomePlayer()aftermClient.connect() 
04-08 15:26:46.302: I/AwesomePlayer(7680): setDataSource_l('http://134.246.63.169:5554/') 
04-08 15:26:46.302: W/MediaPlayer(16349): info/warning (701, 0) 
04-08 15:26:46.302: V/ChromiumHTTPDataSource(7680): connect on behalf of uid 10067 
04-08 15:26:46.302: I/ChromiumHTTPDataSource(7680): connect to http://134.246.63.169:5554/ @0 
04-08 15:26:46.342: I/ActivityManager(272): Displayed fr.ifremer.testrtsp/.MainActivity: +183ms 
04-08 15:26:46.382: I/MediaPlayer(16349): Info (701,0) 
04-08 15:27:07.592: E/MediaPlayer(16349): error (1, -2147483648) 
04-08 15:27:07.592: E/MediaPlayer(16349): Error (1,-2147483648) 
  • RTSP:

ich die Codierung verwendeten Optionen empfohlen von Google auf this page, zB:

  • Video-Codec: H264
  • audio codec: AAC
  • Video-Bitrate: 56
  • Audio-Bitrate: 24
  • Tonkanäle: 1
  • Größe: 176x144

    ./vlc -vvv decklink:// --sout-ffmpeg-strict=-2 --sout 
    '#transcode{width=176,height=144,vcodec=h264,acodec=mp4a,vb=56,ab=24,channels=1} 
    :rtp{dst=134.246.63.169,port-video=5554,port-audio=5556,sdp=rtsp://134.246.63.169:5554/stream.sdp}' 
    

Ich kann den Stream im VLC-Desktop abspielen, aber nicht in Android (auch nicht in der Android VLC-Version oder dem Standard-Goo gle Videoplayer: /). Wenn ich keinen Muxer spezifiziere, kann ich es auch als QuickTime abspielen (wenn ich den Muxer, entweder ts oder ps, spezifiziere, habe ich kein Video. Wenn ich einen anderen Muxer versuche, sagt mir VLC, dass ich nur benutzen darf ts oder ps in RTP)

Wenn ich mit dem Google-Video-Player versuchen, erhalte ich diese Meldungen in der locat:

04-08 15:32:45.792: D/MediaPlayer(13688): Couldn't open file on client side, trying server side 
04-08 15:32:45.802: W/MediaPlayer(13688): info/warning (701, 0) 
04-08 15:32:45.812: I/MediaPlayer(13688): Info (701,0) 
04-08 15:32:45.812: D/MediaPlayer(13688): getMetadata 
04-08 15:32:45.812: E/MediaPlayerService(7680): getMetadata failed -38 
04-08 15:32:45.852: I/MyHandler(7680): connection request completed with result 0 (Success) 
04-08 15:32:45.882: I/ARTSPConnection(7680): status: RTSP/1.0 200 OK 
04-08 15:32:45.882: I/MyHandler(7680): DESCRIBE completed with result 0 (Success) 
04-08 15:32:45.882: I/ASessionDescription(7680): v=0 
04-08 15:32:45.882: I/ASessionDescription(7680): o=- 15352003113363922923 15352003113363922923 IN IP4 to63-169.ifremer.fr 
04-08 15:32:45.882: I/ASessionDescription(7680): s=Unnamed 
04-08 15:32:45.882: I/ASessionDescription(7680): i=N/A 
04-08 15:32:45.882: I/ASessionDescription(7680): c=IN IP4 134.246.63.169 
04-08 15:32:45.882: I/ASessionDescription(7680): t=0 0 
04-08 15:32:45.882: I/ASessionDescription(7680): a=tool:vlc 2.0.5 
04-08 15:32:45.882: I/ASessionDescription(7680): a=recvonly 
04-08 15:32:45.882: I/ASessionDescription(7680): a=type:broadcast 
04-08 15:32:45.882: I/ASessionDescription(7680): a=charset:UTF-8 
04-08 15:32:45.882: I/ASessionDescription(7680): a=control:rtsp://134.246.63.169:5554/stream.sdp 
04-08 15:32:45.882: I/ASessionDescription(7680): m=audio 5556 RTP/AVP 96 
04-08 15:32:45.882: I/ASessionDescription(7680): b=AS:24 
04-08 15:32:45.882: I/ASessionDescription(7680): b=RR:0 
04-08 15:32:45.882: I/ASessionDescription(7680): a=rtpmap:96 mpeg4-generic/48000 
04-08 15:32:45.882: I/ASessionDescription(7680): a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=118856e500; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1; 
04-08 15:32:45.882: I/ASessionDescription(7680): a=control:rtsp://134.246.63.169:5554/stream.sdp/trackID=0 
04-08 15:32:45.882: I/ASessionDescription(7680): m=video 5554 RTP/AVP 96 
04-08 15:32:45.882: I/ASessionDescription(7680): b=AS:56 
04-08 15:32:45.882: I/ASessionDescription(7680): b=RR:0 
04-08 15:32:45.882: I/ASessionDescription(7680): a=rtpmap:96 H264/90000 
04-08 15:32:45.882: I/ASessionDescription(7680): a=fmtp:96 packetization-mode=1;profile-level-id=64000b;sprop-parameter-sets=Z2QAC6zZQsTv/AC0ALBAAAADAEAAAAyjxQplgA==,aOvssiw=; 
04-08 15:32:45.882: I/ASessionDescription(7680): a=control:rtsp://134.246.63.169:5554/stream.sdp/trackID=1 
04-08 15:32:45.982: I/ARTSPConnection(7680): status: RTSP/1.0 200 OK 
04-08 15:32:45.982: I/MyHandler(7680): SETUP(1) completed with result 0 (Success) 
04-08 15:32:45.982: I/MyHandler(7680): server specified timeout of 60 secs. 
04-08 15:32:45.992: W/MyHandler(7680): Missing 'source' field in Transport response. Using RTSP endpoint address. 
04-08 15:32:45.992: I/APacketSource(7680): dimensions 176x144 
04-08 15:32:46.012: I/ARTSPConnection(7680): status: RTSP/1.0 200 OK 
04-08 15:32:46.022: I/MyHandler(7680): SETUP(2) completed with result 0 (Success) 
04-08 15:32:46.022: I/MyHandler(7680): server specified timeout of 60 secs. 
04-08 15:32:46.022: W/MyHandler(7680): Missing 'source' field in Transport response. Using RTSP endpoint address. 
04-08 15:32:46.022: W/MyHandler(7680): Server picked an odd RTP port, it should've picked an even one, we'll let it pass for now, but this may break in the future. 
04-08 15:32:46.082: I/ARTSPConnection(7680): status: RTSP/1.0 200 OK 
04-08 15:32:46.082: D/dalvikvm(13688): GC_FOR_ALLOC freed 303K, 7% free 9289K/9927K, paused 35ms, total 36ms 
04-08 15:32:46.092: I/MyHandler(7680): PLAY completed with result 0 (Success) 
04-08 15:32:46.092: I/MyHandler(7680): This is a live stream 
04-08 15:32:48.262: D/AudioHardware(7680): AudioHardware pcm playback is going to standby. 
04-08 15:32:48.262: D/AudioHardware(7680): closePcmOut_l() mPcmOpenCnt: 1 
04-08 15:32:56.092: W/MyHandler(7680): Never received any data, switching transports. 
04-08 15:32:56.112: I/ARTSPConnection(7680): status: RTSP/1.0 200 OK 
04-08 15:32:56.122: I/MyHandler(7680): TEARDOWN completed with result 0 (Success) 
04-08 15:32:56.122: I/MyHandler(7680): connection request completed with result 0 (Success) 
04-08 15:32:56.152: I/ARTSPConnection(7680): status: RTSP/1.0 200 OK 
04-08 15:32:56.152: I/MyHandler(7680): DESCRIBE completed with result 0 (Success) 
04-08 15:32:56.152: I/ASessionDescription(7680): v=0 
04-08 15:32:56.152: I/ASessionDescription(7680): o=- 15352003157473632156 15352003157473632156 IN IP4 to63-169.ifremer.fr 
04-08 15:32:56.152: I/ASessionDescription(7680): s=Unnamed 
04-08 15:32:56.152: I/ASessionDescription(7680): i=N/A 
04-08 15:32:56.152: I/ASessionDescription(7680): c=IN IP4 134.246.63.169 
04-08 15:32:56.152: I/ASessionDescription(7680): t=0 0 
04-08 15:32:56.152: I/ASessionDescription(7680): a=tool:vlc 2.0.5 
04-08 15:32:56.152: I/ASessionDescription(7680): a=recvonly 
04-08 15:32:56.152: I/ASessionDescription(7680): a=type:broadcast 
04-08 15:32:56.152: I/ASessionDescription(7680): a=charset:UTF-8 
04-08 15:32:56.152: I/ASessionDescription(7680): a=control:rtsp://134.246.63.169:5554/stream.sdp 
04-08 15:32:56.152: I/ASessionDescription(7680): m=audio 5556 RTP/AVP 96 
04-08 15:32:56.152: I/ASessionDescription(7680): b=AS:24 
04-08 15:32:56.152: I/ASessionDescription(7680): b=RR:0 
04-08 15:32:56.152: I/ASessionDescription(7680): a=rtpmap:96 mpeg4-generic/48000 
04-08 15:32:56.152: I/ASessionDescription(7680): a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=118856e500; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1; 
04-08 15:32:56.152: I/ASessionDescription(7680): a=control:rtsp://134.246.63.169:5554/stream.sdp/trackID=0 
04-08 15:32:56.152: I/ASessionDescription(7680): m=video 5554 RTP/AVP 96 
04-08 15:32:56.152: I/ASessionDescription(7680): b=AS:56 
04-08 15:32:56.152: I/ASessionDescription(7680): b=RR:0 
04-08 15:32:56.152: I/ASessionDescription(7680): a=rtpmap:96 H264/90000 
04-08 15:32:56.152: I/ASessionDescription(7680): a=fmtp:96 packetization-mode=1;profile-level-id=64000b;sprop-parameter-sets=Z2QAC6zZQsTv/AC0ALBAAAADAEAAAAyjxQplgA==,aOvssiw=; 
04-08 15:32:56.152: I/ASessionDescription(7680): a=control:rtsp://134.246.63.169:5554/stream.sdp/trackID=1 
04-08 15:32:56.222: I/ARTSPConnection(7680): status: RTSP/1.0 461 Unsupported transport 
04-08 15:32:56.222: I/MyHandler(7680): SETUP(1) completed with result 0 (Success) 
04-08 15:32:56.222: I/APacketSource(7680): dimensions 176x144 
04-08 15:32:56.242: I/ARTSPConnection(7680): status: RTSP/1.0 461 Unsupported transport 
04-08 15:32:56.252: I/MyHandler(7680): SETUP(2) completed with result 0 (Success) 
04-08 15:32:56.272: E/MediaPlayer(13688): error (1, -2147483648) 
04-08 15:32:56.272: E/MediaPlayer(13688): Error (1,-2147483648) 
04-08 15:32:56.272: D/VideoView(13688): Error: 1,-2147483648 

ich denke, das Problem mit dem „Status hingewiesen: RTSP/1.0 461 nicht unterstützt Transport ", aber ich sehe nicht, was ich ändern kann: Ich öffne bereits die Häfen, die ich verwende, und ich empfange das Video auf einem anderen Computer.

Auf dem Android-Handy kann ich einige RSS-Streams spielen, die ich im Internet gefunden habe, zum Beispiel dieses: rtsp: //184.72.239.149/vod/mp4: BigBuckBunny_115k.mov. So sollte es möglich sein.

Wenn jemand helfen kann ...!

+0

Wurde Ihr Problem gelöst ?? –

+0

Ich möchte auch eine Anwendung entwickeln, die Livestreaming einer IP-Kamera zeigt. Ich habe RSTP-URL authentifiziert, die Android Video-View nicht unterstützt. Ich möchte auch RSTP aufnehmen ... kannst du mir zeigen, wie man solche Funktionalität erreicht? –

Antwort

6

Schließlich war es ein Netzwerkproblem, ich verband meine Geräte über eine MacBook WiFi-Freigabe, und es scheint, dass es den RTSP-Stream blockiert. Jetzt benutze ich einen Router und es funktioniert in RTSP (Ich bin immer noch nicht in der Lage, einen HTTP-Stream in der Android VideoView zu erhalten). Trotzdem habe ich immer noch ein Timeout-Problem: Der RTSP-Stream stoppt nach 60 Sekunden, weil das VideoView keine Keep-Alive-Nachrichten sendet. Ich werde versuchen, es selbst zu tun ...

+0

Also der Fehler msg: status: RTSP/1.0 461 Nicht unterstützter Transport bedeutet wirklich, dass es ein Netzwerkproblem ist? – Robert

0

Ich habe meine Rtsp-Server mit openRTSP-Befehl getestet.

Es ist die UDP-Ports blockiert worden.

Wenn RTSP ohne -t Zugriff:

-> $ openRTSP <rtsp_url> 

Ich habe log mir zu sagen:

// omit lots of lines.. 
Created receiver for "video/H264" subsession (client ports 63346-63347) 
Sending request: SETUP rtsp://61.218.52.250:554/live/ch00_0/trackID=0 RTSP/1.0 
CSeq: 4 
User-Agent: openRTSP (LIVE555 Streaming Media v2013.12.16) 
Transport: RTP/AVP;unicast;client_port=63346-63347 

Received 47 new bytes of response data. 
Received a complete SETUP response: 
RTSP/1.0 461 Unsupported Transport 
CSeq: 4 

Failed to setup "video/H264" subsession: 461 Unsupported Transport 

Also mit TCP Wechsel:

-> $ openRTSP -t <rtsp_url> 

es beginnen Empfangen von Daten erfolgreich.

// omit lots of lines.. 
Opened URL "rtsp://61.218.52.250:554/live/ch00_0", returning a SDP description: 
v=0 
o=- 1 1 IN IP4 127.0.0.1 
s=Ubiquiti Live 
i=UBNT Streaming Media 
c=IN IP4 0.0.0.0 
t=0 0 
m=video 0 RTP/AVP 99 
b=AS:50000 
a=framerate:25 
a=x-dimensions:1280,720 
a=x-vendor-id:ubnt,a521 
a=x-rtp-ts:4617405454576779984 
a=rtpmap:99 H264/90000 
a=fmtp:99 profile-level-id=42A01E;packetization-mode=1;sprop-parameter-sets=Z0IAKOkAoAt1xIAG3dAAzf5gDYgQlA==,aM4xUg== 
a=control:trackID=0 

Sending request: SETUP rtsp://61.218.52.250:554/live/ch00_0/trackID=0 RTSP/1.0 
CSeq: 4 
User-Agent: openRTSP (LIVE555 Streaming Media v2013.12.16) 
Transport: RTP/AVP/TCP;unicast;interleaved=0-1 


Received 107 new bytes of response data. 
Received a complete SETUP response: 
RTSP/1.0 200 OK 
CSeq: 4 
Transport: RTP/AVP/TCP;unicast;interleaved=0-1 
Session: E090B5503236A1BFB7CE 


Setup "video/H264" subsession (client ports 54884-54885) 
Sending request: PLAY rtsp://61.218.52.250:554/live/ch00_0/ RTSP/1.0 
CSeq: 5 
User-Agent: openRTSP (LIVE555 Streaming Media v2013.12.16) 
Session: E090B5503236A1BFB7CE 
Range: npt=0.000- 


Received 159 new bytes of response data. 
Received a complete PLAY response: 
RTSP/1.0 200 OK 
CSeq: 5 
Session: E090B5503236A1BFB7CE 
Range: npt=now- 
RTP-Info: url=rtsp://61.218.52.250:554/live/ch00_0//trackID=0;seq=41402;rtptime=0 


Started playing session 
Data is being streamed (signal with "kill -HUP 96432" or "kill -USR1 96432" to terminate)... 
Received 47 new bytes of response data. 
Received 1424 new bytes of response data. 
Received 1424 new bytes of response data. 
Received 1424 new bytes of response data. 
Received 1424 new bytes of response data. 
Received 1448 new bytes of response data. 
Received 1448 new bytes of response data. 

Ref to openRTSP basics.

Jetzt habe ich wie in Android Auto-Schalter auf TCP, um herauszufinden.

0

bitte auf den VLC versuchen:

vlc some_file.mp4 -I http --sout „#transcode {soverlay, ab = 128, Samplerate = 44100, Kanäle = 2, acodec = mp4a, vcodec = h264, Breite = 480, Höhe = 270, vfilter = "Leinwand {Breite = 480, Höhe = 270, Aspekt = 16: 9}", fps = 25, vb = 800, vec = x264 {level = 12, no-cabac, subme = 20, threads = 4, bframes = 0, min-keyint = 1, keyint = 50}}: sammeln: rtp {mp4a-latm, sdp = rtsp:/0.0.0.0: 5554/stream.sdp} "

und der androide Code:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final VideoView vidView = (VideoView)findViewById(R.id.myVideo); 

     MediaController vidControl = new MediaController(this); 
     vidControl.setAnchorView(vidView); 
     vidView.setMediaController(vidControl); 

     vidView.setVideoPath("rtsp://137.110.92.231:5554/stream.sdp"); 

     vidView.start(); 
     }