Page 1 of 1

Problems trying to play RTSP stream from VLC in Android

Posted: 26 Apr 2009 19:53
by mark@m1tech.net
Hi,

I posted this to one of the Android dev groups and I thought it would be a good idea to put it here as well. Thanks for any info...

------------

For the last few days I've been trying to play an RTSP stream on the
physical device (dev phone) from an instance of VLC (0.9.9) running on
my machine, but I've had no success.

I started with some mp4 video files that I verified will play off the
SD card on the device. I took one of these files and published an
RTSP stream from an instance of a VLC server running on my laptop.
Here's the output string in VLC that is used to create the stream from
the base mp4:

:sout=#transcode
{vcodec=mp4v,vb=200,scale=1,acodec=mp4a,ab=16,channels=2}:duplicate
{dst=display,dst=rtp{dst=,mux=ts,port=1234,sdp=rtsp://
192.168.1.100:1234/stream.sdp}}

Which corresponds to:

Video codec - MPEG-4
Audio codec - AAC
Video bitrate - 200 kbps
Audio bitrate - 16 kbps
Resolution - 320x240

I can publish this stream in the VLC server and consume it from a VLC
player (running on the same machine as the server or from another
machine on the network) without any problems by simply telling it to
play the stream at this address:

rtsp://192.168.1.100:1234/stream.sdp

The problem I'm having is trying to play this same stream from the
device. I'm using the 1.1 release of the SDK, and the project I'm
using to test this is the ApiDemos project
(MediaPlayerDemo_Video.java). All I'm doing is setting the "path"
variable in code to the rtsp:// link above. When this line executes:

mMediaPlayer.prepare();

This exception is thrown:

java.io.IOException: Prepare failed.: status=0xFFFFFFFF

So it's not clear to me what exactly the failure is. I've tried
tinkering with the VLC output a million different ways, but I can't
get around this error. I've tried using several different mp4 source
files and even some wmv's.

I'm by no means an expert in streaming video protocols, but it seems
that VLC may not be able to produce an RTSP stream that Android is
able to recognize, and that's really what I'm looking for an answer
to. I'm hoping someone has been able to take an mp4 file (or a source
file of any video format, really) and, in VLC, transcode it and make
it available in an RTSP stream that the device is able to play back.
I've read some other posts that are semi-related to the RTSP issues
I'm seeing here, but I don't think I've seen anything yet where
someone confirmed outright that they were able to play an RTSP stream
from VLC to Android. I'm going to post this in the VideoLAN forums as
well. Any help is appreciated. Thanks.

Re: Problems trying to play RTSP stream from VLC in Android

Posted: 27 Apr 2009 21:02
by RĂ©mi Denis-Courmont
That's an Android problem, we cannot help you. Quite likely that Android does not like the video format though.

Re: Problems trying to play RTSP stream from VLC in Android

Posted: 27 Apr 2009 21:19
by mark@m1tech.net
Yes, I'm thinking it's most likely an issue on the Android side, but I was hoping by an off-chance that someone here had already been down the same path as me and had figured out the magical combination to get the rtsp stream working from VLC to Android. Thanks for the reply.

Re: Problems trying to play RTSP stream from VLC in Android

Posted: 29 Apr 2009 13:10
by wizzbit
Well... it's not an Android problem, and i'm quite sure about that, it play's streams good from vlc 0.8.6h, because Nokia N95 realplayer does not understand it either when i use 0.9.9 but it does when i use 0.8.6h.
While Android sometimes start playing the stream, but the nokia player saids, "Loading" and starts playing with a black screen..
There's something changed on the mpeg-4 codec i suppose.
When i use 0.8.6h it works fine on both phones, but with the exactly same setup on 0.9.9, but then it won't stream anymore.
Sometimes even VLC saids "No stream for 10 seconds".

vlc -vvv http://AXIS-CAM-IP:9080/mjpg/video.mjpg -I dummy --sout "#transcode{vcodec=mp4v,vb=300,width=320,height=240,fps=25}:rtp{dst=0.0.0.0,port=1234,sdp=file:///usr/local/movies/t.sdp}"');

It goes thru a Darwin server, that server hasn't been changed, only vlc version is changed from 0.8.6h to 0.9.9, and when i went back to 0.8.6h it worked on all devices again, so something has changed in the codecs somewhere i think.
The difference i see with 0.9.9 and 0.8.6h that 0.9.9 uses the avcodec encoder to encode mpeg4 and 0.8.6h ffmpeg encoder.
I've been struggling with 0.9.9 also to get it to work properly, but somehow it won't succeed.
For now i went back to 0.8.6h for transcoding.
It could be that avcodec does something strange, but i can't seem to force it to use ffmpeg as encoder, it always uses the avcodec.

Greetz,

Eric-Jan

A little thing i need to add..
When i use h264 codec the phone's start to give an image as soon as i quit the vlc streaming.. quite strange.. On the nokia it plays for a few seconds very fast like it needs to catch up with the frames and a second or 2 normal , on android it plays normal, but also after i quited streaming..

Re: Problems trying to play RTSP stream from VLC in Android

Posted: 29 Apr 2009 18:13
by mark@m1tech.net
Ahhh....that is great information. The v1.5 firmware update was just released for the phone, so I'm going to try 0.9.9 again against that first. If I verify that I still can't get things working (I don't see that anything has changed in 1.5 that would affect RTSP), I'll load up VLC 0.8.6 as you suggest to see if I can get the stream going. Thanks!

Mark

Re: Problems trying to play RTSP stream from VLC in Android

Posted: 24 Aug 2009 20:01
by plun
Was this ever resolved? I tried both 0.8.6h and the new 1.0.1 without success. I need to stream vlc sdp from android. It works from vlc player to vlc player. I'm just using androids mediaplayer to access the rtsp address.

How did you guys get it to work?

Re: Problems trying to play RTSP stream from VLC in Android

Posted: 25 Aug 2009 02:56
by mark@m1tech.net
Sorry plun, I never got a chance to go back and try it again since I made the original post, so I can't say if RTSP will really work from VLC to Android...

Re: Problems trying to play RTSP stream from VLC in Android

Posted: 30 Aug 2009 02:53
by DarkFox
I just set up DSS and tried to get this working, but couldn't.

It may be that the stream isn't correctly transcoded..

Code: Select all

vlc -vvv file:///usr/local/movies/sample_300kbit.mp4 -I dummy --sout "#transcode{vcodec=mp4v,vb=300,width=320,height=240,fps=25}:rtp{dst=0.0.0.0,port=1234,sdp=file:///usr/local/movies/t.sdp}"
Works.

Code: Select all

vlc -vvv rtsp://streamer-01.dr.nordija.dk/dr1lowmp4 -I dummy --sout "#transcode{vcodec=mp4v,vb=300,width=320,height=240,fps=25}:rtp{dst=0.0.0.0,port=1234,sdp=file:///usr/local/movies/t.sdp}"
Doesn't.

Perhaps the arguments changed from 0.8.5 to 0.9.9?

Re: Problems trying to play RTSP stream from VLC in Android

Posted: 30 Aug 2009 04:11
by DarkFox
So after looking around on the forum I found the transform arguments for baseline profile h264 and android almost takes it.

Code: Select all

vlc -vvv rtsp://streamer-01.dr.nordija.dk/dr1lowmp4 -I dummy --sout "#transcode{vcodec=h264,venc=x264{no-cabac,level=3.0,subme=5,trellis=1,merange=16,min-keyint=25,scenecut=40,ipratio=0.71,ratetol=20k,vbv-maxrate=96k,vbv-bufsize=96k,qcomp=0.6,qpmin=10,qpmax=51,qpstep=4,keyint=30,ref=1,deblock=0:0,aud},scale=1,acodec=mp4a,ab=128,samplerate=48000,channels=2,width=320,height=240}:rtp{dst=0.0.0.0,port=1234,sdp=file:///usr/local/movies/t.sdp}"
It's a bit choppy though and some times crashes the phone.

Re: Problems trying to play RTSP stream from VLC in Android

Posted: 31 Aug 2009 09:44
by ILEoo
No wonder it's choppy with those bitrates. Try something like this: "#transcode{vcodec=h264,venc=x264{no-cabac,level=12,vbv-maxrate=384,vbv-bufsize=1000,keyint=75,ref=3,bframes=0},width=320,height=240,acodec=mp4a,ab=128,vb=384}:rtp{sdp=file:///usr/local/movies/t.sdp,mp4a-latm}"

Re: Problems trying to play RTSP stream from VLC in Android

Posted: 31 Aug 2009 11:33
by DarkFox
No wonder it's choppy with those bitrates. Try something like this: "#transcode{vcodec=h264,venc=x264{no-cabac,level=12,vbv-maxrate=384,vbv-bufsize=1000,keyint=75,ref=3,bframes=0},width=320,height=240,acodec=mp4a,ab=128,vb=384}:rtp{sdp=file:///usr/local/movies/t.sdp,mp4a-latm}"
Oh yeah, good point :P

Tweaked it a bit to fit the resolution and lowered the audio bitrate... (thinking of lowering it more)...

"#transcode{vcodec=h264,venc=x264{no-cabac,level=12,vbv-maxrate=384,vbv-bufsize=1000,keyint=75,ref=3,bframes=0},width=320,height=180,acodec=mp4a,ab=64,vb=384}:rtp{dst=0.0.0.0,port=1234,sdp=file:///usr/local/movies/t.sdp,mp4a-latm}"