我的工作是RTSP现场直播。我正在使用系外播放器RTSP流播放器在我的android应用程序上获得实时流。但是这个流的延迟大约是3秒。在vlc媒体播放器上的延迟是1秒。因此,如何减少外星球员的延迟。有什么办法请告诉我
发布于 2021-10-31 23:53:14
你面对的是buffering latency
。VLC使用自己的引擎和缓冲算法。但是,如果您想减少ExoPlayer
上的缓冲延迟,就必须熟悉LoadControl
。ExoPlayer在默认实例化中使用DefaultLoadControl
。这个LoadControl是属于ExoPlayer库的一个类,它确定播放器为了缓冲流而应该花费的时间长度的值。如果要减少延迟,就必须减少LoadControl缓冲区值。
下面是创建带有自定义load控件的SimpleExoPlayer实例的快速片段:
val customLoadControl = DefaultLoadControl.Builder()
.setBufferDurationsMs(minBuffer, maxBuffer, playbackBuffer, playbackRebuffer)
.build()
简单地说,参数是:minBuffer是最小缓冲视频持续时间,maxBuffer是最大缓冲视频持续时间,playbackBuffer是开始播放所需的缓冲视频持续时间,playbackRebuffer是在失败和重试时所需的缓冲视频持续时间。
在您的示例中,您应该将值设置得非常低,特别是playbackBuffer
和minBuffer
参数。您应该处理小值(它们在milliseconds).中)。与1000
值同时用于minBuffer
和playbackBuffer
如何使用自定义负载控件:在构建自定义负载控制实例并将其存储在变量中之后,在构建SimpleExoPlayer
时应该传递它:
myMediaPlayer = SimpleExoPlayer.Builder(this@MainActivity)
.setLoadControl(customLoadControl)
.build()
所期望的:总是推荐使用默认值。如果你把这些值弄乱了,应用程序可能会崩溃,流可能会被卡住,或者播放器会变得非常不正常。所以要明智地操纵价值观。
这里是javadocs DefaultLoadControl Javadocs
如果您不知道什么是缓冲,则系外播放器(或任何其他播放器)可能需要缓冲(加载即将到来的视频/音频部分并将其存储在内存中,呈现,以更快的速度访问并减少播放问题。然而,流媒体需要缓冲,因为它以chunks
的形式出现。因此,到达的每一块最终都会被缓冲。如果您将所需的缓冲持续时间设置为1000,则您正在告诉ExoPlayer,到达长度为1000毫秒的第一个流块应该被缓冲并立即播放。我相信没有更简单的方法来解释这一点。祝你好运。
https://stackoverflow.com/questions/69748951
复制