Playing rtsp video streams seems to be a complex task in Android, but actually it is insane easy. Here is how.
- Create a new project using Android Studio
- Drag a VideoView control to the UI or add below code in the UI xml file:
<VideoView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/videoView" />
Open the activity java file, add below code:
VideoView videoView;
String videoRtspUrl=“rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov“;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
videoView = (VideoView) this.findViewById(R.id.videoView);
videoView.setVideoPath(videoRtspUrl);
videoView.requestFocus();
videoView.start();
}
If you build and run the app, you might encounter an error:
“Can’t play this video”
Add the permission in AndroidManifest before <Application> node:
<uses-permission android:name="android.permission.INTERNET" />
Rebuild, yeah! Success! That is just that simple!
Yes, this approach also works for HLS video streams, e.g.
http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8
In short, the built-in VideoPlayer control from Android SDK makes it easy to play RTSP or HLS streams with little efforts!
Pingback: Android: How to play RTMP video streams | Xinyustudio
Thx you very much for this sample! I was looking for a lib to do this and finally a simple videoView do the job !!
Do you have any sample to do the reverse thing ? I want to send hls or rtmp video stream from my phone camera to my personnal server (working with nginx)
Bye!
i tryed this code and its just running hls stream 😦
Hi
I tried this code but am getting “Can’t play this video”
Here is the logcat logs
10-19 12:43:45.965 5158-5158/? I/art: Not late-enabling -Xcheck:jni (already on)
10-19 12:43:45.965 5158-5158/? W/art: Unexpected CPU variant for X86 using defaults: x86
10-19 12:43:46.261 5158-5158/com.example.divyadharan.myapplication W/System: ClassLoader referenced unknown path: /data/app/com.example.divyadharan.myapplication-2/lib/x86
10-19 12:43:46.279 5158-5158/com.example.divyadharan.myapplication I/InstantRun: starting instant run server: is main process
10-19 12:43:46.353 5158-5158/com.example.divyadharan.myapplication W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
10-19 12:43:46.670 5158-5196/com.example.divyadharan.myapplication I/OpenGLRenderer: Initialized EGL, version 1.4
10-19 12:43:46.670 5158-5196/com.example.divyadharan.myapplication D/OpenGLRenderer: Swap behavior 1
10-19 12:43:46.670 5158-5196/com.example.divyadharan.myapplication W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without…
10-19 12:43:46.670 5158-5196/com.example.divyadharan.myapplication D/OpenGLRenderer: Swap behavior 0
10-19 12:43:46.683 5158-5196/com.example.divyadharan.myapplication D/EGL_emulation: eglCreateContext: 0x9e05d160: maj 2 min 0 rcv 2
10-19 12:43:46.691 5158-5196/com.example.divyadharan.myapplication D/EGL_emulation: eglMakeCurrent: 0x9e05d160: ver 2 0 (tinfo 0x9e053a40)
10-19 12:43:46.811 5158-5158/com.example.divyadharan.myapplication W/MediaPlayer: Couldn’t open rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov: java.io.FileNotFoundException: No content provider: rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov
10-19 12:43:46.812 5158-5158/com.example.divyadharan.myapplication E/MediaPlayer: Unable to create media player
10-19 12:43:46.813 5158-5158/com.example.divyadharan.myapplication W/VideoView: Unable to open content: rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov
java.io.IOException: setDataSource failed.: status=0x80000000
at android.media.MediaPlayer.nativeSetDataSource(Native Method)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1078)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1067)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1009)
at android.widget.VideoView.openVideo(VideoView.java:346)
at android.widget.VideoView.-wrap0(VideoView.java)
at android.widget.VideoView$7.surfaceCreated(VideoView.java:622)
at android.view.SurfaceView.updateWindow(SurfaceView.java:618)
at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:161)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2205)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6337)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
at android.view.Choreographer.doCallbacks(Choreographer.java:686)
at android.view.Choreographer.doFrame(Choreographer.java:621)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
10-19 12:43:46.813 5158-5158/com.example.divyadharan.myapplication D/VideoView: Error: 1,0
10-19 12:43:46.859 5158-5158/com.example.divyadharan.myapplication W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
10-19 12:43:46.900 5158-5196/com.example.divyadharan.myapplication D/EGL_emulation: eglMakeCurrent: 0x9e05d160: ver 2 0 (tinfo 0x9e053a40)
10-19 12:43:47.146 5158-5196/com.example.divyadharan.myapplication D/EGL_emulation: eglMakeCurrent: 0x9e05d160: ver 2 0 (tinfo 0x9e053a40)
10-19 12:43:47.242 5158-5196/com.example.divyadharan.myapplication D/EGL_emulation: eglMakeCurrent: 0x9e05d160: ver 2 0 (tinfo 0x9e053a40)
10-19 12:43:47.271 5158-5196/com.example.divyadharan.myapplication D/EGL_emulation: eglMakeCurrent: 0x9e05d160: ver 2 0 (tinfo 0x9e053a40)
10-19 12:44:08.363 5158-5196/com.example.divyadharan.myapplication D/EGL_emulation: eglMakeCurrent: 0x9e05d160: ver 2 0 (tinfo 0x9e053a40)
Thank you very much for giving good example of rtsp video with android,
But when i use rtsp with authentication then it gives a message “Can’t play this video”.
how can i deal with this problem.
thanks in advance
how to play rtmp live streaming android.
use wowza to play the live streaming videos