如何在 android 上的 Exoplayer RTSP 直播中获得低延迟?

how to get low latency in Exoplayer RTSP live streaming on android?

我正在从事 RTSP 直播。我正在使用 exoplayer RTSP 流播放器在我的 android 应用程序上进行直播。但该流式传输的延迟约为 3 秒。由于 vlc 媒体播放器的延迟为 1 秒。那么如何减少 exoplayer 中的延迟。有什么办法请告诉我

你面对的是buffering latency。 VLC 使用自己的引擎和缓冲算法。但是,如果您想减少 ExoPlayer 上的缓冲延迟,您必须熟悉 LoadControl。 ExoPlayer 在默认实例化中使用 DefaultLoadControl。此 LoadControl 是属于 ExoPlayer 库的 class,它确定播放器应花费的持续时间值以缓冲流。如果你想减少延迟,你必须减少 LoadControl 缓冲区值。

下面是创建带有自定义加载控件的 SimpleExoPlayer 实例的快速片段:

val customLoadControl = DefaultLoadControl.Builder()
                .setBufferDurationsMs(minBuffer, maxBuffer, playbackBuffer, playbackRebuffer)
                .build()

参数简述:minBuffer是最小缓冲视频时长,maxBuffer是最大缓冲视频时长,playbackBuffer是开始播放所需的缓冲视频时长,playbackRebuffer是在失败并重试时所需的缓冲视频持续时间。

在您的情况下,您应该将值设置得非常低,尤其是 playbackBufferminBuffer 参数。您应该使用小值(它们以 毫秒 为单位)。 minBufferplaybackBuffer

的值都为 1000

如何使用自定义负载控制 : 在构建自定义负载控制实例并将其存储在变量中后,您应该在构建您的 [=21] 时传递它=]:

myMediaPlayer = SimpleExoPlayer.Builder(this@MainActivity)
            .setLoadControl(customLoadControl)
            .build()

期待什么: 始终建议使用默认值。如果你弄乱了这些值,应用程序可能会崩溃,流可能会卡住,或者播放器可能会出现故障。所以智能地操纵这些值。

这是 javadocs DefaultLoadControl Javadocs

如果你不知道缓冲是什么,exoplayer(或任何其他播放器)可能需要缓冲(加载即将到来的video/audio 的一部分并将其存储在内存中,呈现,访问速度更快并减少播放问题。然而,流媒体需要缓冲,因为它以 chunks 的形式出现。所以每个到达的块最终都会被缓冲。如果你将所需的缓冲持续时间设置为 1000,你是在告诉 ExoPlayer 到达的第一个长度为 1000 毫秒的流块应该被缓冲并立即播放。我相信没有更简单的方法来解释这个。最好运气好。