如何将 RTSP 视频 url 播放到 EXOPlayer
Posted
技术标签:
【中文标题】如何将 RTSP 视频 url 播放到 EXOPlayer【英文标题】:How to play RTSP video url into EXOPlayer 【发布时间】:2020-03-24 22:05:20 【问题描述】:我正在开发一个应用程序,并且我使用了来自 google 的 ExoPlayer,它的工作方式非常有魅力,现在我想在我的应用程序中添加 RTSP 支持,但是使用 Exoplayer 我无法播放,请任何人都可以帮忙我这个,如果有人有其他选择,请与我分享。
val playerView = findViewById<PlayerView>(R.id.simple_player)
playerView.player = player
val rtmpDataSourceFactory = RtmpDataSourceFactory()
val url = mVideoPath
val videoSource = ExtractorMediaSource.Factory(rtmpDataSourceFactory)
.createMediaSource(Uri.parse("rtsp://192.168.1.74/12"))
player.prepare(videoSource)
player.playWhenReady = true
日志
E/ExoPlayerImplInternal:源错误。 net.butterflytv.rtmp_client.RtmpClient$RtmpIOException 在 net.butterflytv.rtmp_client.RtmpClient.open(RtmpClient.java:56) 在 com.google.android.exoplayer2.ext.rtmp.RtmpDataSource.open(RtmpDataSource.java:60) 在 com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:83) 在 com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:885) 在 com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:381) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 在 java.lang.Thread.run(Thread.java:761)
【问题讨论】:
只需将 rtsp 链接传递给 exo 播放器即可... 它不工作,得到源错误 你到底遇到了什么错误? 分享日志... @ShivamOberoi,我已编辑帖子,请检查 【参考方案1】:the regular ExoPlayer release 似乎不支持 RTSP,他们仍然有一个 open ticket to add RTSP support,但有一个 git branch with RTSP support。
您正在使用 RtmpDataSourceFactory,您可以尝试使用 RtspMediaSource.Factory。
您也可以阅读difference between RTMP and RTSP。
【讨论】:
【参考方案2】:ExoPlayer 似乎为 Rtsp 流提供了一个补丁。我正在使用 ExoPlayer v2.15.0,它是最新的版本,其中包含 Rtsp 流支持。但我们仍然无法流式传输“rtsp://192.168.0.26:554/11”这类网址。同时 VLC 也能够流式传输此类 url。
下面是我的一段代码,用于流式传输给定的 rtsp url
MediaSource mediaSource =
new RtspMediaSource.Factory().setForceUseRtpTcp(true)
.createMediaSource(MediaItem.fromUri("rtsp://192.168.0.26:554/11"));
得到源错误。
日志: ExoPlayerImplInternal:播放错误 com.google.android.exoplayer2.ExoPlaybackException:源错误 原因:java.net.NoRouteToHostException: Host unreachable
注意:我们已经将设备连接在同一个网络中!!!
【讨论】:
以上是关于如何将 RTSP 视频 url 播放到 EXOPlayer的主要内容,如果未能解决你的问题,请参考以下文章
如何获取 Youtube 的 RTSP URL 以在 videoview 上播放