适用于Android(3.0+)的VLC的规范低延迟设置

时间:2019-06-24 23:32:25

标签: android vlc libvlc vlc-android

我最近开始在Android应用程序中使用libVLC,目的是替换我们花很多钱购买的商业SDK,但没有看到我们希望得到的结果。该应用程序要求尽可能接近实时地查看RTSP流。理想情况下为500ms或更好(取决于平板电脑),而延迟不会随时间漂移。

为libVLC切换商业SDK的过程几乎是无缝的,并且可以立即进行,但延迟只有几秒钟(无需更改任何默认设置)。它可以非常快速地连接到RTSP流,并且不会断开连接。

我花了几天的时间来调整各种设置,以尽可能减少延迟。在某些情况下,我会得到300ms的延迟,最终流会下降到几秒钟的延迟,然后流会丢失并重新启动(然后延迟舞会再次开始)。在其他情况下(我想我将网络缓存设置得太低时),我会得到充满错误的日志,而永远不会得到图片。

我当前的设置是:

val media = Media(libVLC, Uri.parse(streamUrl))
media.setHWDecoderEnabled(true, false)
media.addOption(":network-caching=300")
media.addOption(":clock-jitter=0")
media.addOption(":clock-synchro=0")

如果我将network-caching设置为小于200的任何值,我将永远看不到图像(我读到某个地方是因为平板电脑的解码器延迟时间大于200ms)。

无论如何,我发现十年来有数十种可能的答案,有些是相似的,有些是冲突的,有些使用了已弃用的标志。一些值得注意的:

2019年:https://forum.videolan.org/viewtopic.php?t=149511

m.AddOption(":network-caching=150");
m.AddOption(":clock-jitter=0");
m.AddOption(":clock-syncro=0");

2018年:Android LibVLC options do not work

options.add("--network-caching=50");
options.add("--clock-jitter=0");
options.add("--clock-synchro=0");

2017年:Reduce delay when playing rtp stream with libvlc on Android

LibVLC libVlc = new LibVLC(context, arrayListOf(
    "--file-caching=150", 
    "--network-caching=150",
    "--clock-jitter=0",
    "--live-caching=150", 
    "--clock-synchro=0",
    "-vvv", 
    "--drop-late-frames", 
    "--skip-frames"
)); 

...OR...

media.setHWDecoderEnabled(true, false);
media.addOption(":network-caching=150");
media.addOption(":clock-jitter=0");
media.addOption(":clock-synchro=0");

2015年:https://forum.videolan.org/viewtopic.php?f=35&t=124932&p=420020&hilit=latency#p420020

Set network cache to 500, and disable HW acceleration

2015年:Decrease delay during streaming and live streaming methods

mLibvlc.setDevHardwareDecoder(LibVLC.DEV_HW_DECODER_AUTOMATIC);
mLibvlc.setHardwareAcceleration(LibVLC.HW_ACCELERATION_DISABLED);
mLibvlc.setNetworkCaching(150);
mLibvlc.setFrameSkip(true);

2013:Stream desktop over RTP using VLC with the lowest latency possible

Related to Desktop VLC and tweaking FFMPEG

当然,这里有巨大的VLC标志列表:https://wiki.videolan.org/VLC_commaand-line_help/

因此,总而言之,对于Android上的libVLC 3+是否有一种规范的方法,我们应该将其共同用于实时流应用程序?

对于我来说,零缓存和丢弃较晚的帧是最理想的(即使对于不稳定的帧也是如此)。但是,我也确实了解,对于大多数人而言,稳定的流媒体(偶尔会有偶尔的帧丢失)是首选。

我最初是3天前发布在VideoLAN forums上的。

0 个答案:

没有答案