一.SurfaceView + Mediaplayer
XML中添加SurfaceView:
<SurfaceViewandroid:id="@+id/surface_view"android:layout_width="match_parent"android:layout_height="match_parent"/>
Activity代码:
package com.android.rtsp;import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Toast;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;import com.android.rtsp.R;public class RtspActivity extends AppCompatActivity implements MediaPlayer.OnPreparedListener {private final String TAG = this.getClass().getSimpleName();private MediaPlayer mediaPlayer;private SurfaceView surfaceView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_rtsp);surfaceView = findViewById(R.id.surface_view);SurfaceHolder holder = surfaceView.getHolder();holder.addCallback(sfvCallBack);}private SurfaceHolder.Callback sfvCallBack = new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {playVideo();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {if (mediaPlayer != null) {mediaPlayer.stop();mediaPlayer.release();mediaPlayer = null;}}};private void playVideo() {if (mediaPlayer == null) {mediaPlayer = new MediaPlayer();try {//公共Rtsp,后附多个目前可用的公共RtspmediaPlayer.setDataSource("rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream");mediaPlayer.setDisplay(surfaceView.getHolder());mediaPlayer.setOnPreparedListener(this);mediaPlayer.prepareAsync();} catch (Exception e) {e.printStackTrace();Toast.makeText(this, "Error loading video", Toast.LENGTH_SHORT).show();}}}@Overridepublic void onPrepared(MediaPlayer mp) {mediaPlayer.start();}@Overridepublic void onDestroy() {super.onDestroy();}
}
二.VideoView
源码可以看到,VideoView是SurfaceView的封装,并且实现了MediaPlayerControl的方法
所以本质还是SurfaceView+MediaPlayer
XML添加VideoView:
<VideoViewandroid:id="@+id/video_view"android:layout_width="match_parent"android:layout_height="match_parent"/>
Activity代码:
package com.android.rtsp;import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.VideoView;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;import com.android.rtsp.R;public class RtspActivity extends AppCompatActivity {private final String TAG = this.getClass().getSimpleName();private VideoView mVideoView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_rtsp);mVideoView = findViewById(R.id.video_view);}@Overridepublic void onResume() {super.onResume();if (mVideoView != null) {videoConfig();}}private void videoConfig() {//公共Rtsp,后附多个目前可用的公共RtspmVideoView.setVideoURI(Uri.parse("rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream"));//本质还是SurfaceView+MediaPlayermVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {Log.i(TAG, "onPrepared ... ........ ");mVideoView.requestFocus();mVideoView.start();}});//简化写法/*mVideoView.setOnPreparedListener(mp -> {mVideoView.requestFocus();mVideoView.start();});*/}@Overridepublic void onDestroy() {super.onDestroy();mVideoView.suspend();}
}
三.其他方式
网上也有很多自定义封装的view和player,也能方便快捷的实现Rtsp视频流的播放
可自行查阅
四.公共rtsp地址
目前暂时可用的Rtsp地址:
- Nordland rtsp://77.110.228.219/axis-media/media.amp
- Norwich rtsp://37.157.51.30/axis-media/media.amp
- Orlando rtsp://97.68.104.34/axis-media/media.am
- PriceCenterPlaza rtsp://132.239.12.145:554/axis-media/media.amp
- Vaison-La-Romaine rtsp://176.139.87.16/axis-media/media.amp
- VyhladJazero rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream
- Western Cape rtsp://196.21.92.82/axis-media/media.amp
- Zeeland rtsp://213.34.225.97/axis-media/media.amp
- Allendale rtsp://71.83.5.156/axis-media/media.amp
- Bedford Hills rtsp://73.114.177.111/axis-media/media.amp
rtsp、rtmp测试地址_rtsp测试地址-CSDN博客
2025 rtsp测试拉流地址 - 简书