如何在 EXOPlayer 中播放 RTSP 视频网址

问题描述 投票:0回答:3

我正在开发一个应用程序,我已经使用了 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

lOG

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)

android android-mediaplayer rtsp exoplayer
3个回答
0
投票

似乎 RTSP 支持不适用于 常规 ExoPlayer 版本,他们仍然有 开放票证来添加 RTSP 支持,但是有一个 支持 RTSP 的 git 分支

您正在使用 RtmpDataSourceFactory,您可以尝试使用 RtspMediaSource.Factory 来代替。

您还可以阅读RTMP 和 RTSP 之间的区别


0
投票

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:主机无法访问

注意:我们已将设备连接在同一网络内!!!


0
投票

val rtspUri = "rtsp://"YOUR_IP_ADDRESS":"PORT"/stream1"

    val mediaSource: MediaSource =
        RtspMediaSource.Factory().createMediaSource(MediaItem.fromUri(rtspUri))

    exoPlayer = SimpleExoPlayer.Builder(this).build()

    exoPlayer.setMediaSource(mediaSource)
    exoPlayer.prepare()
    exoPlayer.playWhenReady = true
    val playerView = findViewById<PlayerView>(R.id.exoPlayerView)
    playerView.player = exoPlayer

}

override fun onDestroy() {
    super.onDestroy()
    // Release the player when the activity is destroyed.
    exoPlayer.release()
}

//将您的设备连接到同一网络

© www.soinside.com 2019 - 2024. All rights reserved.