You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ExoPlayer添加RTSP视频播放支持?求解决办法

嗨,我看到你在尝试用ExoPlayer播放RTSP流时遇到了问题——你现在的代码里犯了一个典型的协议混淆错误:用RTMP数据源工厂去加载RTSP协议的视频流,这两个是完全不同的流媒体协议,所以才会抛出RtmpIOException错误。下面给你详细的解决办法和替代方案:

一、ExoPlayer官方RTSP扩展方案

ExoPlayer本身默认不支持RTSP,但它提供了官方的RTSP扩展库,这是最推荐的解决方案,步骤如下:

1. 添加依赖

首先在你的Module级别build.gradle文件中添加RTSP扩展的依赖,注意版本号要和你当前使用的ExoPlayer版本保持一致:

implementation "com.google.android.exoplayer:exoplayer-rtsp:2.X.X"

把2.X.X替换成你项目里实际的ExoPlayer版本号,比如2.19.1。

2. 修改适配RTSP的代码

把原来的RtmpDataSourceFactory替换为专属的RtspDataSourceFactory,并且要使用RtspMediaSource来创建媒体源(而不是通用的ExtractorMediaSource,因为RTSP有自己的解析逻辑):

val playerView = findViewById<PlayerView>(R.id.simple_player)
playerView.player = player
// 替换为RTSP专属的数据源工厂
val rtspDataSourceFactory = RtspDataSourceFactory()
val rtspUrl = "rtsp://192.168.1.74/12"
// 使用RtspMediaSource创建媒体源
val videoSource = RtspMediaSource.Factory(rtspDataSourceFactory)
    .createMediaSource(MediaItem.fromUri(rtspUrl))
player.prepare(videoSource)
player.playWhenReady = true
二、替代方案

如果官方扩展不符合你的需求,还有以下几种可选方案:

1. Android原生MediaPlayer

Android原生的MediaPlayer天生支持RTSP协议,虽然功能不如ExoPlayer丰富,但胜在简单,快速就能实现播放:

val mediaPlayer = MediaPlayer()
try {
    mediaPlayer.setDataSource("rtsp://192.168.1.74/12")
    mediaPlayer.setDisplay(playerView.holder)
    mediaPlayer.prepareAsync()
    mediaPlayer.setOnPreparedListener { 
        it.start()
    }
} catch (e: IOException) {
    e.printStackTrace()
}

不过要注意,原生MediaPlayer对一些复杂编码的RTSP流兼容性可能不如ExoPlayer的扩展。

2. 第三方播放器库

比如ijkplayer或者Vitamio,这些第三方库对多种流媒体协议(包括RTSP)有更好的兼容性,但需要额外集成第三方依赖包,适合对播放兼容性要求极高的场景。

三、额外排查要点

如果按照上面的方法还是无法播放,可以检查以下几点:

  • 先用VLC播放器测试你的RTSP地址是否有效,确认服务器端的流是正常推送的
  • 确保你的设备和RTSP服务器在同一局域网内,网络连接正常
  • 确认应用已经在AndroidManifest.xml中申请了INTERNET权限
  • 针对Android 9及以上版本,如果RTSP地址是明文的(非HTTPS),需要在AndroidManifest.xml的<application>标签中添加android:usesCleartextTraffic="true",允许明文流量访问

内容的提问来源于stack exchange,提问作者Khyati Chitroda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:53:03