VLC RTSP live stream to Android

32,123

Finally it was a network problem, I was connecting my devices through a MacBook WiFi sharing, and it seems that it blocked the RTSP stream. Now I am using a router and it works in RTSP (I'm still not able to receive a HTTP stream in the Android VideoView). Nevertheless, I still have a timeout issue : the RTSP stream stops after 60 sec, because the VideoView doesn't send keep alive messages. I will try to do it myself...

Share:
32,123
Tim Autin
Author by

Tim Autin

Updated on July 21, 2022

Comments

  • Tim Autin
    Tim Autin almost 2 years

    For my app I have to stream from a decklink card to an Android app (I must be a live stream, so either HLS or RTSP seems to be good solutions, since my app targets Android 3+). I recompiled VLC with the decklink sdk, and I am able to live stream to another pc over the network (but it works only 60sec with RTSP).

    Here is what I tried :

    • 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}'
      

    It is working in Android VLC 0.0.11, but only in WiFi, not in 3G. And I am not able to play it in my app with a VideoView. Here is the code I used and the corresponding error messages :

    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();
    

    Error messages :

    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 :

    I used the encoding options recommended by Google on this page, eg :

    • video codec : h264
    • audio codec : AAC
    • video bitrate : 56
    • audio bitrate : 24
    • audio channels : 1
    • size : 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}'
      

    I am able to play the stream in VLC desktop, but not in Android (even in the Android VLC version or the default Google video player:/ ). If I don't specify a muxer, I can also play it it QuickTime (if I specify the muxer, either ts or ps, I have no video. If I try another muxer, VLC tells me that I am only allowed to use ts or ps in RTP)

    If I try with the Google video player, I get these messages in the 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
    

    I guess the problem is pointed with the "status: RTSP/1.0 461 Unsupported transport", but I don't see what can I change : I already open the ports I use, and I do receive the video on another computer.

    On the Android phone, I can play some rtsp streams I found on the web, for exemple this one : rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov . So it should be possible.

    If anyone can help... !

    • Nirav Bhandari
      Nirav Bhandari about 11 years
      Did your problem get resolved??
    • Nirav Bhandari
      Nirav Bhandari about 11 years
      I also want to develop an application which shows livestreaming of an IP camera. I have authenticated RSTP url which android's videoview not supporting. i also want to record RSTP ...can you guide me how to achive such functionality?
  • Robert
    Robert over 10 years
    So the error msg: status: RTSP/1.0 461 Unsupported transport really mean it's network problem?
  • Curious Mind
    Curious Mind almost 6 years
    Have you figured it out?
  • Robert
    Robert almost 6 years
    Sorry I've not touched that project for years. Last time I recalled the call would be stopped after a short period of time just like @tim-autin mentioned. Wish you good luck.