如何在 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是在失败并重试时所需的缓冲视频持续时间。
在您的情况下,您应该将值设置得非常低,尤其是 playbackBuffer
和 minBuffer
参数。您应该使用小值(它们以 毫秒 为单位)。 minBuffer
和 playbackBuffer
的值都为 1000
如何使用自定义负载控制 : 在构建自定义负载控制实例并将其存储在变量中后,您应该在构建您的 [=21] 时传递它=]:
myMediaPlayer = SimpleExoPlayer.Builder(this@MainActivity)
.setLoadControl(customLoadControl)
.build()
期待什么:
始终建议使用默认值。如果你弄乱了这些值,应用程序可能会崩溃,流可能会卡住,或者播放器可能会出现故障。所以智能地操纵这些值。
这是 javadocs DefaultLoadControl Javadocs
如果你不知道缓冲是什么,exoplayer(或任何其他播放器)可能需要缓冲(加载即将到来的video/audio 的一部分并将其存储在内存中,呈现,访问速度更快并减少播放问题。然而,流媒体需要缓冲,因为它以 chunks
的形式出现。所以每个到达的块最终都会被缓冲。如果你将所需的缓冲持续时间设置为 1000,你是在告诉 ExoPlayer 到达的第一个长度为 1000 毫秒的流块应该被缓冲并立即播放。我相信没有更简单的方法来解释这个。最好运气好。
我正在从事 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是在失败并重试时所需的缓冲视频持续时间。
在您的情况下,您应该将值设置得非常低,尤其是 playbackBuffer
和 minBuffer
参数。您应该使用小值(它们以 毫秒 为单位)。 minBuffer
和 playbackBuffer
1000
如何使用自定义负载控制 : 在构建自定义负载控制实例并将其存储在变量中后,您应该在构建您的 [=21] 时传递它=]:
myMediaPlayer = SimpleExoPlayer.Builder(this@MainActivity)
.setLoadControl(customLoadControl)
.build()
期待什么: 始终建议使用默认值。如果你弄乱了这些值,应用程序可能会崩溃,流可能会卡住,或者播放器可能会出现故障。所以智能地操纵这些值。
这是 javadocs DefaultLoadControl Javadocs
如果你不知道缓冲是什么,exoplayer(或任何其他播放器)可能需要缓冲(加载即将到来的video/audio 的一部分并将其存储在内存中,呈现,访问速度更快并减少播放问题。然而,流媒体需要缓冲,因为它以 chunks
的形式出现。所以每个到达的块最终都会被缓冲。如果你将所需的缓冲持续时间设置为 1000,你是在告诉 ExoPlayer 到达的第一个长度为 1000 毫秒的流块应该被缓冲并立即播放。我相信没有更简单的方法来解释这个。最好运气好。