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

android vlc播放rtsp

     最近在做IOT开发,需要把IOT设备的RTSP流在手机端播放,VLC是个不错的选择,使用起来简单方便。

1、在AndroidManifest.xml 中添加网络权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

2.引入vlc 库

2.1 在libs.versions.toml 引入VCL

libvlcAll = "3.4.2"
libvlc-all = { module = "org.videolan.android:libvlc-all", version.ref = "libvlcAll" }

2.2 在build.gradle.kts 中添加依赖

implementation (libs.libvlc.all)

3.在layout 文件中添加播放器的布局

    <org.videolan.libvlc.util.VLCVideoLayoutandroid:id="@+id/videoLayout"android:layout_width="match_parent"android:layout_height="match_parent" />

4. 添加代码

4.1 在Actvitiy中使用vlc

class RtspPlayActivity : AppCompatActivity() {companion object {const val WIFI_IP = "wifi_ip"}private lateinit var binding: ActivityRtspPlayBindingprivate lateinit var libVLC: LibVLCprivate lateinit var mediaPlayer: MediaPlayeroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)enableEdgeToEdge()binding = ActivityRtspPlayBinding.inflate(layoutInflater)setContentView(binding.root)ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)insets}initView()}private fun initView() {libVLC = LibVLC(this)mediaPlayer = MediaPlayer(libVLC)mediaPlayer.attachViews(binding.videoLayout, null, false, false)val rtspUri = intent.getStringExtra(WIFI_IP)val media = Media(libVLC, Uri.parse(rtspUri))mediaPlayer.media = mediamediaPlayer.setEventListener { event ->if (event?.type == MediaPlayer.Event.EndReached) {mediaPlayer.stop()}}mediaPlayer.play()}override fun onResume() {super.onResume()if (!mediaPlayer.isPlaying) {mediaPlayer.play()}}override fun onPause() {super.onPause()if (mediaPlayer.isPlaying) {mediaPlayer.pause()}}override fun onDestroy() {super.onDestroy()libVLC.release()mediaPlayer.release()}
}

5.时延问题

    运行代码以后,发现延时很严重大概在2s左右

5.1 .时延原因

RTSP流的延迟主要有以下几个因素:

  1. 网络延迟:包括路由、丢包等。
  2. 缓冲区设置:设置过大的缓冲区会增加延迟。
  3. 解码延迟:视频流的编码格式及解码方式也会影响延迟。

鉴于这些因素,我们可以如何调整VLC播放器的设置来减少延迟呢?

5.2 如何降低延时

1.调整缓存设置

media.addOption(":netwrok-catch=100")

2.选择合适的解码器也会影响延迟,VLC允许我们选择不同的解码方式。

media.addOption(":avcodec-dec-options=skip=nonkey")

通过以上设置可以有效减少延时。

http://www.xdnf.cn/news/480151.html

相关文章:

  • 2025春训第十九场
  • 多通道电源管理芯片在分布式能源系统中的优化策略
  • 打卡习惯,记录坚持:我用 CodeBuddy 做了个毛玻璃风格的习惯打卡小应用
  • gflags 安装及使用
  • 精准掌控张力动态,重构卷对卷工艺设计
  • 用户现场不支持路由映射,如何快速将安防监控EasyCVR视频汇聚平台映射到公网?
  • 移除链表元素数据结构oj题(力扣题206)
  • 基于MATLAB的人脸识别,实现PCA降维,用PCA特征进行SVM训练
  • 无线攻防实战指南:Wi-Fi默认密码
  • 【未】[启发式算法]含初始解要求的有:TS, GA, SA, DPSO
  • WebSocket 客户端 DLL 模块设计说明(基于 WebSocket++ + Boost.Asio)
  • Core Web Vitals 全链路优化:从浏览器引擎到网络协议深度调优
  • linux下tcp/ip网络通信笔记1,
  • uniapp-商城-57-后台 新增商品(弹窗属性数据添加父级)
  • uniapp婚纱预约小程序
  • 一键清理功能,深度扫描本地存储数据
  • RK3588 ADB使用
  • 品铂科技在UWB行业地位综述(2025年更新)
  • Python线性回归:从理论到实践的完整指南
  • 大语言模型 10 - 从0开始训练GPT 0.25B参数量 补充知识之模型架构 MoE、ReLU、FFN、MixFFN
  • 学习海康VisionMaster之直方图工具
  • MySQL中innodb的ACID
  • python中函数定义下划线代表什么意思,一个下划线,两个下划线什么意思
  • entity线段材质设置
  • 学习以任务为中心的潜动作,随地采取行动
  • Elasticsearch 分词与字段类型(keyword vs. text)面试题
  • 深入浅出 MinIO:身份管理与权限配置实战 !
  • AI与产品架构设计系列(2):Agent系统的应用架构与落地实
  • GpuGeek 网络加速:破解 AI 开发中的 “最后一公里” 瓶颈
  • vhca_id 简介,以及同 pf, vf 的关系