当前位置: 首页 > news >正文

Android:播放Rtsp视频流的两种方式

一.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

源码可以看到,VideoViewSurfaceView的封装,并且实现了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();}
}

三.其他方式

网上也有很多自定义封装的viewplayer,也能方便快捷的实现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测试拉流地址 - 简书

相关文章:

Android:播放Rtsp视频流的两种方式

一.SurfaceView Mediaplayer XML中添加SurfaceView: <SurfaceViewandroid:id"id/surface_view"android:layout_width"match_parent"android:layout_height"match_parent"/> Activity代码&#xff1a; package com.android.rtsp;impor…...

web信息泄露 ctfshow-web入门web1-web10

01做题思路 判断做题的思路是读取&#xff0c;写入&#xff0c;还是执行判断大概的类型&#xff0c;有登录逻辑就尝试sql注入&#xff0c;有下载逻辑就尝试文件读取&#xff0c;有源码就做源码审计 02信息泄露及利用 robots.txt 以ctfshow的web1为例&#xff0c;访问robots…...

Log4j在Spring项目中的应用与实践

在现代Java开发中&#xff0c;日志记录是不可或缺的一部分。它不仅帮助开发者调试和监控应用程序的运行状态&#xff0c;还能在出现问题时快速定位原因。今天&#xff0c;我们就来探讨如何在Spring项目中使用Log4j进行日志管理&#xff0c;并通过具体的实例来展示其强大的功能。…...

docker安装mysql:8.0

1.docker源 目前docker国内的源基本上用不了了&#xff0c;建议去淘宝找一找&#xff0c;我整了一个大概是10R一个月。 2.拉取镜像 docker pull mysql:8.0 3.启动容器 命令如下&#xff1a; docker run \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD123456 \-v /home/data/mysq…...

搭建一个 Spring Boot 项目,解决jdk与springboot版本不匹配

搭建一个 Spring Boot 项目 方式一&#xff1a;使用 Spring Initializr Spring Initializr 是一个基于 Web 的工具&#xff0c;用于快速生成 Spring Boot 项目的基础结构。 访问 Spring Initializr 网站&#xff1a;https://start.spring.io/配置项目信息&#xff1a; …...

心心相系:十颗心

心心相系&#xff1a;十颗心 【1】心脏&#xff1b;人心&#xff0c;热心 heart //注&#xff1a;h-通c-或k- warmhearted a.热心的&#xff0c;热心肠的&#xff1b;亲切的a warm-hearted person 为人古道热肠 词根cardi(o)-(heart)&#xff0c;例词&#xff1a;cardiology(…...

ChatGPT行业热门应用提示词案例-AI绘画类

AI 绘画指令是一段用于指导 AI 绘画工具&#xff08;如 DALLE、Midjourney 等&#xff09;生成特定图像的文本描述。它通常包含场景、主体、风格、色彩、氛围等关键信息&#xff0c;帮助 AI 理解创作者的意图&#xff0c;从而生成符合要求的绘画作品。 ChatGPT 拥有海量的知识…...

前端面试手写--虚拟列表

目录 一.问题背景 二.代码讲解 三.代码改装 四.代码发布 今天我们来学习如何手写一个虚拟列表,本文将把虚拟列表进行拆分并讲解,然后发布到npm网站上. 一.问题背景 为什么需要虚拟列表呢?这是因为在面对大量数据的时候,我们的浏览器会将所有数据都渲染到表格上面,但是渲…...

达梦数据库针对慢SQL,收集统计信息清除执行计划缓存

前言&#xff1a;若遇到以下场景&#xff0c;大概率是SQL走错了执行计划&#xff1a; 1、一条SQL在页面上查询特别慢&#xff0c;但拿到数据库终端执行特别快 2、一条SQL在某种检索条件下查询特别慢&#xff0c;但拿到数据库终端执行特别快 此时&#xff0c;可以尝试按照下述步…...

李沐--动手学深度学习 序列模型

1.使用正弦函数和可加性噪声生成序列数据 import torch from torch import nn from d2l import torch as d2l#使用正弦函数和可加性噪声生成序列数据 T 1000 #总共产生1000个点 time torch.arange(1,T1,dtypetorch.float32) x torch.sin(0.01*time) torch.normal(0,0.2,(…...

数据分析、商业智能、业务分析三者之间的关系

商业智能 (Business Intelligence, BI)、业务分析 (Business Analytics, BA) 和数据分析 (Data Analytics, DA) 三者都与数据密切相关&#xff0c;但在目标、方法和应用上存在差异。为了能够清晰地解释&#xff0c;下面将从定义入手&#xff0c;然后阐述它们之间的联系和区别。…...

【Spring+MyBatis】留言墙的实现

目录 1. 添加依赖 2. 配置数据库 2.1 创建数据库与数据表 2.2 创建与数据库对应的实体类 3. 后端代码 3.1 目录结构 3.2 MessageController类 3.3 MessageService类 3.4 MessageMapper接口 4. 前端代码 5. 单元测试 5.1 后端接口测试 5.2 使用前端页面测试 在Spri…...

让编程变成一种享受-明基RD320U显示器

引言 作为一名有着多年JAVA开发经验的从业者&#xff0c;在工作过程中&#xff0c;显示器的重要性不言而喻。它不仅是我们与代码交互的窗口&#xff0c;更是影响工作效率和体验的关键因素。在多年的编程生涯中&#xff0c;我遇到过各种各样的问题。比如&#xff0c;在进行代码…...

【嵌入式Linux应用开发基础】fork()函数

目录 一、fork 函数概述 1.1. 函数作用 1.2. 函数原型与头文件 1.3. 返回值 1.4. 核心特性 二、父子进程的区别与联系 2.1. 相同点 2.2. 不同点 三、典型应用场景 3.1. 多任务处理 3.2. 守护进程创建 3.3. 执行外部程序 3.4. 并行计算 四、fork 函数的关键注意事…...

2024 年 CSDN 博客之星年度评选:技术创作与影响力的碰撞(统计时间2025-02-17 11:06:06)

摘要&#xff1a;在技术的海洋里&#xff0c;每一位博主都像是一座独特的灯塔&#xff0c;用自己创作的光芒照亮他人前行的道路。2024 年 CSDN 博客之星年度评选活动&#xff0c;正是对这些灯塔的一次盛大检阅&#xff0c;让我们看到了众多优秀博主在技术创作领域的卓越表现以及…...

串的基本操作--数据结构

目录 一、串的基本概述 二、串的存储结构 2.1定义属性存储结构 串长有两种表示方法: 1、用一个额外的变量length来存放串的长度&#xff1b; 2、串值后面加一个不计入串长的结束标记字符“\0”&#xff0c;此时的串长为隐含值。 2.2堆的顺序存储结构 三、串的基本操…...

Unity 命令行设置运行在指定的显卡上

设置运行在指定的显卡上 -force-device-index...

Dest1ny漏洞库: 美团代付微信小程序系统任意文件读取漏洞

大家好&#xff0c;今天是Dest1ny漏洞库的专题&#xff01;&#xff01; 会时不时发送新的漏洞资讯&#xff01;&#xff01; 大家多多关注&#xff0c;多多点赞&#xff01;&#xff01;&#xff01; 0x01 产品简介 美团代付微信小程序系统是美团点评旗下的一款基于微信小程…...

设计模式:状态模式

状态机有3个要素&#xff1a;状态&#xff0c;事件&#xff0c;动作。 假如一个对象有3个状态:S1、S2、S3。影响状态的事件有3个&#xff1a;E1、E2、E3。每个状态下收到对应事件的时候&#xff0c;对象的动作为AXY。那么该对象的状态机就可以用如下表格来表示。S1收到事件E1的…...

【故障处理】- 执行命令crsctl query crs xxx一直hang

【故障处理】- 执行命令crsctl query crs xxx一直hang 一、概述二、故障处理三、解决方法 一、概述 Oracle RAC环境中&#xff0c;遇到执行crsctl query crs xxx等相关命令不返回任何结果&#xff0c;一直hang在那里。系统下执行命令ps -ef |grep crsctl query crs softwarever…...

扩散模型在面部表情编辑中的应用与实践

1. 项目概述在计算机视觉和图形学领域&#xff0c;面部表情编辑一直是个极具挑战性的课题。传统的面部表情编辑方法往往需要复杂的3D建模或精细的手动调整&#xff0c;而扩散模型的出现为这一领域带来了革命性的变化。这项技术能够实现像素级的精确控制&#xff0c;特别适合处理…...

2026年AI办公:Gemini3.1Pro如何帮你记住工作上下文

到了 2026 年&#xff0c;AI 办公已经从“会不会用”进入到“怎么用得更顺”的阶段。很多人一开始接触大模型&#xff0c;最常见的体验是&#xff1a;第一次问的时候很惊艳&#xff0c;第二次就开始觉得“它好像记不住我上次说了什么”。其实这不是 AI 不行&#xff0c;而是你没…...

如何在Windows上快速安装安卓应用:APK Installer完整免费指南

如何在Windows上快速安装安卓应用&#xff1a;APK Installer完整免费指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上轻松运行安卓应用&#xff…...

当理想撞上现实:我是如何用‘断臂求生’策略,拆分硬件创业团队并重启项目的

当理想撞上现实&#xff1a;硬件创业团队的“断臂求生”与战略重启 深夜的办公室里&#xff0c;咖啡杯旁散落着第七版电路设计图纸。作为连续创业者&#xff0c;我盯着屏幕上跳动的财务数据&#xff0c;突然意识到一个残酷事实&#xff1a;我们的硬件创业项目正在被自己设计的完…...

专业级Windows风扇控制:Fan Control如何解决您的散热与噪音平衡难题

专业级Windows风扇控制&#xff1a;Fan Control如何解决您的散热与噪音平衡难题 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHu…...

WPeChatGPT:本地应用无缝接入AI的HTTP代理服务器部署与实战

1. 项目概述&#xff1a;一个让本地应用接入AI对话能力的桥梁最近在折腾一些本地应用&#xff0c;比如笔记软件、代码编辑器&#xff0c;总想着要是能直接在里面调用AI对话模型&#xff0c;写写注释、润色下文案&#xff0c;那效率不得起飞&#xff1f;但现实是&#xff0c;这些…...

观察不同模型在Taotoken平台上的计费差异与性价比选择

观察不同模型在Taotoken平台上的计费差异与性价比选择 1. 理解Taotoken的计费机制 Taotoken平台采用按Token消耗量计费的模式&#xff0c;不同模型根据其计算复杂度、参数量级和供应商定价策略&#xff0c;会对应不同的Token单价。平台提供的用量看板能清晰展示每次调用的Tok…...

Python爬虫进阶:深入理解response.encoding——响应编码处理的终极指南

目录 写在前面:一个让80%爬虫新手踩过的坑 第一章:字符编码那些事儿——为什么我们需要response.encoding 1.1 从二进制到文字:编码的诞生 1.2 Unicode的登台与UTF-8的胜利 1.3 HTTP响应中的编码信息藏在哪 第二章:response.encoding的底层逻辑 2.1 requests库如何猜…...

Win10/Win11系统盘转换实战:用DiskGenius把MBR盘改成GPT,并修复UEFI引导(小米笔记本亲测)

Win10/Win11系统盘无损转换指南&#xff1a;DiskGenius实现MBR到GPT的完整方案 手里的小米笔记本用了几年&#xff0c;最近升级Win11时被提示"系统要求GPT分区表"。作为常年混迹技术论坛的老鸟&#xff0c;我早料到传统MBR磁盘迟早会遇到这个坎。但真正操作时发现&am…...

2026.5 AI终极评测:GPT-5.5登顶,Claude 4.7守王座,国产谁争锋?

2026年5月,AI大模型战场迎来新一轮洗牌。OpenAI发布GPT-5.5强势登顶,Claude Opus 4.7坚守编程王座,Gemini 3.1 Pro以94.3%的科学推理得分刷新人类纪录。与此同时,豆包Seed 2.0 Pro杀入全球前十,DeepSeek-V4 Pro登顶SuperCLUE中文评测,国产AI势力强势崛起。 这篇文章将为…...