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

Soh*_*tel 2 rtsp exoplayer exoplayer2.x

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

Yur*_*itz 7

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

以下是使用自定义加载控件创建 SimpleExoPlayer 实例的快速片段:

val customLoadControl = DefaultLoadControl.Builder()
                .setBufferDurationsMs(minBuffer, maxBuffer, playbackBuffer, playbackRebuffer)
                .build()
Run Code Online (Sandbox Code Playgroud)

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

对于您的情况,您应该将值设置得非常低,尤其是playbackBufferminBuffer参数。您应该使用较小的值(它们以毫秒为单位)。1000和 的minBuffer值都为playbackBuffer

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

myMediaPlayer = SimpleExoPlayer.Builder(this@MainActivity)
            .setLoadControl(customLoadControl)
            .build()
Run Code Online (Sandbox Code Playgroud)

预期结果:始终建议使用默认值。如果你弄乱了这些值,应用程序可能会崩溃,流可能会被卡住,或者播放器可能会出现故障。因此,请明智地操纵这些值。

这是 javadocs DefaultLoadControl Javadocs

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