android - Can't receive RTSP live stream from an IP cam -


i want receive live streaming ip camera using rtsp, i'm getting 'can't play video', , following exception:

07-16 14:06:26.945: d/mediaplayer(19411): setdatasource ioexception happend :  07-16 14:06:26.945: d/mediaplayer(19411): java.io.filenotfoundexception: no content provider: rtsp://192.168.30.108:554 07-16 14:06:26.945: d/mediaplayer(19411):   @ android.content.contentresolver.opentypedassetfiledescriptor(contentresolver.java:1052) 07-16 14:06:26.945: d/mediaplayer(19411):   @ android.content.contentresolver.openassetfiledescriptor(contentresolver.java:907) 07-16 14:06:26.945: d/mediaplayer(19411):   @ android.content.contentresolver.openassetfiledescriptor(contentresolver.java:834) 07-16 14:06:26.945: d/mediaplayer(19411):   @ android.media.mediaplayer.setdatasource(mediaplayer.java:973) 07-16 14:06:26.945: d/mediaplayer(19411):   @ android.widget.videoview.openvideo(videoview.java:337) 07-16 14:06:26.945: d/mediaplayer(19411):   @ android.widget.videoview.setvideouri(videoview.java:247) 07-16 14:06:26.945: d/mediaplayer(19411):   @ android.widget.videoview.setvideouri(videoview.java:237) 07-16 14:06:26.945: d/mediaplayer(19411):   @ com.example.video_rtsp.mainactivity$2.run(mainactivity.java:59) 07-16 14:06:26.945: d/mediaplayer(19411):   @ android.os.handler.handlecallback(handler.java:733) 07-16 14:06:26.945: d/mediaplayer(19411):   @ android.os.handler.dispatchmessage(handler.java:95) 07-16 14:06:26.945: d/mediaplayer(19411):   @ android.os.looper.loop(looper.java:157) 07-16 14:06:26.945: d/mediaplayer(19411):   @ android.app.activitythread.main(activitythread.java:5293) 07-16 14:06:26.945: d/mediaplayer(19411):   @ java.lang.reflect.method.invokenative(native method) 07-16 14:06:26.945: d/mediaplayer(19411):   @ java.lang.reflect.method.invoke(method.java:515) 07-16 14:06:26.945: d/mediaplayer(19411):   @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1265) 07-16 14:06:26.945: d/mediaplayer(19411):   @ com.android.internal.os.zygoteinit.main(zygoteinit.java:1081) 07-16 14:06:26.945: d/mediaplayer(19411):   @ dalvik.system.nativestart.main(native method) 07-16 14:06:26.945: d/mediaplayer(19411): couldn't open file on client side, trying server side 07-16 14:06:26.955: v/mediaplayer(19411): setvideosurfacetexture 07-16 14:06:26.955: v/mediaplayer-jni(19411): setaudiostreamtype: 3 07-16 14:06:26.955: v/mediaplayer(19411): mediaplayer::setaudiostreamtype 07-16 14:06:26.955: v/mediaplayer(19411): setvideosurfacetexture 07-16 14:06:26.955: v/mediaplayer(19411): prepareasync 07-16 14:06:26.965: d/progressbar(19411): setprogressdrawable drawableheight = 48 07-16 14:06:26.985: d/absseekbar(19411): absseekbar constructor: misseebaranimationavailable = true 

i'm using following way:

videoview videoview = (videoview) ((activity) ctx).findviewbyid(r.id.videoview);  //add controls mediaplayer play, pause. mediacontroller mc = new mediacontroller(ctx); videoview.setmediacontroller(mc);  //set path of video or uri videoview.setvideouri(uri.parse("rtsp://192.168.30.108:554"));  //set focus videoview.requestfocus(); 

can't i'm sure problem, think it's because camera software needs authentication, if so, don't know how provide authentication it.


after using mediaplayer setdatasource, i'm getting following exception:

07-21 12:04:11.677: w/system.err(17714): java.io.ioexception: prepare failed.: status=0x1 07-21 12:04:11.677: w/system.err(17714):    @ android.media.mediaplayer.prepare(native method) 

i'm not sure if related wrong way in setting headers or not :

uri uri = uri.parse("rtsp://192.168.30.108:554"); map<string , string> headres = new hashmap<string, string>(); headres.put("authorization", "basic ce0ca0f0864513c28c7be98f0f929be7b1f5db79"); //also tried without "basic" headres.put("encryption", "default"); headres.put("mac", "9002a9d89200"); headres.put("random", "1715377261"); headres.put("realm", "login 90:02:a9:d8:92:00");  mediaplayer.setdatasource(getapplicationcontext(), uri, headres); 

and screenshots of login process headers , json data using firebug:

enter image description here

enter image description here

if authentication mechanism http basic authentication there might way set required http header: mediaplayer class has method setdatasource taking map parameter headers:

public void setdatasource (context context, uri uri, map<string, string> headers)

you must set authorization header:

authorization: basic _credentials_

_credentials_ rfc2045-mime base64 encoding of username:password string.


Comments