如何将 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的主要内容,如果未能解决你的问题,请参考以下文章

播放 RTSP 视频流

如何获取 Youtube 的 RTSP URL 以在 videoview 上播放

在 Android 中播放 RTSP 流视频时如何保持宽高比?

无法在 videoView 中播放 RTSP url

在 Windows 上以 QML 播放 RTSP 视频

rtsp流浏览器播放方案