• 使用VideoView
 <VideoViewandroid:id="@+id/surface_view"android:layout_width="250dp"android:layout_height="250dp"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" />
     private String uri = "rtsp://192.168.1.10:554/user=admin_password=nTBCS19C_channel=1_stream=0.sdp?real_stream";@Overrideprotected void attachedToWindow() {binding.videoSurface.setVideoURI(Uri.parse(uri));binding.videoSurface.setOnPreparedListener(mp -> {binding.videoSurface.requestFocus();binding.videoSurface.start();});}@Overrideprotected void onDestroyFrame() {super.onDestroyFrame();binding.videoSurface.suspend(); }
  • 使用SurfaceView+MediaPlayer
 <SurfaceViewandroid:id="@+id/surface_view"android:layout_width="250dp"android:layout_height="250dp"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" />
     private String uri = "rtsp://192.168.1.10:554/user=admin_password=nTBCS19C_channel=1_stream=0.sdp?real_stream";@Overrideprotected void onDestroyFrame() {super.onDestroyFrame();if (mediaPlayer.isPlaying()) {mediaPlayer.stop();//停止音频的播放}mediaPlayer.release();//释放资源}private MediaPlayer mediaPlayer;@Overrideprotected void attachedToWindow() {mediaPlayer = MediaPlayer.create(MainActivity.this, Uri.parse(uri));binding.surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {mediaPlayer.setDisplay(holder);//播放mediaPlayer.start();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}});}
  • 使用开源库NodeMediaClient-Android

附上链接 https://github.com/NodeMedia/NodeMediaClient-Android

附上demo地址 https://github.com/NodeMedia/QLive-Android

文档地址 https://github.com/NodeMedia/NodeMediaClient-Android/blob/2.x/docs/NodePlayer_API_CN.md

项目gradle中allprojects {repositories {google()jcenter()maven { url 'https://jitpack.io' }}
}dependencies {compile 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".Main2Activity"><cn.nodemedia.NodePlayerViewandroid:id="@+id/nodePlayer"android:layout_width="match_parent"android:layout_height="250dp" /></LinearLayout>

public class MainActivity extends AppCompatActivity {private NodePlayerView nodePlayerView;private NodePlayer nodePlayer;@Overrideprotected void onDestroy() {super.onDestroy();nodePlayer.stop();nodePlayer.release();}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);nodePlayerView = findViewById(R.id.nodePlayer);//设置渲染器类型nodePlayerView.setRenderType(NodePlayerView.RenderType.SURFACEVIEW);//设置视频画面缩放模式nodePlayerView.setUIViewContentMode(NodePlayerView.UIViewContentMode.ScaleToFill);nodePlayer = new NodePlayer(this);//设置播放视图nodePlayer.setPlayerView(nodePlayerView);//设置RTSP流使用的传输协议,支持的模式有:nodePlayer.setRtspTransport(NodePlayer.RTSP_TRANSPORT_TCP);nodePlayer.setInputUrl("rtsp://192.168.1.10:554/user=admin_password=nTBCS19C_channel=1_stream=0.sdp?real_stream");//设置视频是否开启nodePlayer.setVideoEnable(true);nodePlayer.setBufferTime(0);nodePlayer.setMaxBufferTime(0);nodePlayer.start();}}

android 播放rtsp流的三种方式相关推荐

  1. Android获取当前位置的三种方式及其使用方法

    1.GPS定位 2.基站定位 此类位置的获取有赖于手机无线通讯信号,当手机处在信号覆盖范围内,手机可以获得该区域(即通讯术语中的"小区")的识别号.因为这些识别号是惟一的,因此可以 ...

  2. 网站seo优化引流的三种方式

    中安云城现在为大家共享一下引流的几种方式,现在需要细分一下. 1.社群引流 这个方式其实也挺常见的,选择与你推广的产品相关的论坛发布文章会对你的推广引流效果更好一点,具有特征性,同时也不要去不太活跃以 ...

  3. Redis 实现限流的三种方式

    欢迎关注方志朋的博客,回复"666"获面试宝典 面对越来越多的高并发场景,限流显示的尤为重要. 当然,限流有许多种实现的方式,Redis具有很强大的功能,我用Redis实践了三种的 ...

  4. android中多渠道打包的三种方式

    转载至:一片枫叶的专栏 国内的Android开发者还是很苦逼的,由于众所周知的原因,google play无法在国内打开(翻墙的就不在考虑之内了),所以Android系的应用市场,群雄争霸.后果就是国 ...

  5. 【android】绘制圆环的三种方式

    在android中要绘制圆环,暂时知道有三种方式.分别是: 一.设置画笔的style为stoke,绘制圆 这里是先绘制内圆,然后绘制圆环(圆环的宽度就是paint设置的paint.setStrokeW ...

  6. Android利用android:indeterminateDrawable来实现ProgressBar三种方式

    方式1:(效果为补间动画一样) [html] view plaincopyprint? <ProgressBar android:layout_width="wrap_content& ...

  7. css中脱离标准流的三种方式,CSS的三种手段让元素脱离标准本文档流

    1.浮动 浮动是CSS中用到的最多的一个选项,他有三个性质.关于浮动我们要强调一点,永远不是一个东西单独浮动,浮动都是一起浮动,要浮动,大家都浮动. 1.1 浮动元素脱离标准文档流 1.1.1 大概描 ...

  8. 【Android】触发按钮的三种方式

    方法1 通过id绑定点击监听 实现 findViewById(R.id.home_button).setOnClickListener(new View.OnClickListener() {@Ove ...

  9. convert android layout xml,详解Android之解析XML文件三种方式(DOM,PULL,SAX)

    1.xml文件代码 ${fq.content} ${fq.time} 2.XML网页效果图 3.Android代码 1.布局文件 xmlns:tools="http://schemas.an ...

最新文章

  1. 导师(老板)推荐的学术前沿号
  2. SQL 判断两个时间段是否有交叉
  3. codeforces 383D
  4. 在计算机硬盘中没有什么,如果在打开计算机后找不到硬盘,应该怎么办?
  5. Unable to find the ncurses libraries的解决办法
  6. [设计模式] ------ 工厂方法模式
  7. stm32 web get 参数_纯进口mpv销量排行榜 迈巴赫vs680商务车参数
  8. WindowsXP操作系统进程详细介绍
  9. android在副屏中运行一个应用_Android 双屏显示分析
  10. Access入门简单教程
  11. 游戏常用算法:四种迷宫生成算法
  12. win10安装出现“Windows以保护你的电脑” Micosoft Defender SmartScreen阻止了无法识别的应用启动。运行此应用可能会导致你的电脑存在风险。
  13. 设计院的故事--转自ABBS(自动铅笔)
  14. AI读书笔记:《剑桥五重奏—机器能思考吗?》
  15. Android 360开源全面插件化框架RePlugin 实战
  16. 腾讯起诉抖音播放《王者荣耀》获赔 60 万
  17. zookeeper和kafka的SASL认证以及生产实践
  18. MT4客户端通讯分析(一)——登录部分分析
  19. Jetpack系列之Navigation----入门(五)
  20. 我的世界python——“玻璃行者”

热门文章

  1. 【转】计算机的键盘是按什么顺序排列的
  2. 初始化CEF中CefInitialize失败,提示libcef.dll(***)处有未经处理的异常: 0xC000001D的解决办法
  3. 无人机上的光流定位通常适用于_现下大热的无人机机载激光雷达,究竟由哪些核心部件组成...
  4. jquery方法List
  5. vue如何优雅的上传文件
  6. 人工智能:传教士与野人过河(BFS-基于对列和链表的实现)c++
  7. android项目入门实践之GPS用户定位
  8. 95号汽油步入9元时代,买得起车却加不起油
  9. BIRCH层次聚类优化算法(平衡迭代规约聚类树
  10. London Tube伦敦地铁全面图下载