14

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

为 libVLC 切换商业 SDK 的过程几乎是无缝的,并且可以立即运行,除了延迟为几秒钟(没有触及任何默认设置)。它连接到 RTSP 流的速度非常快,并且不会断开连接。

我花了几天时间调整各种设置,以尽量减少延迟。在某些情况下,我得到 300 毫秒的延迟,最终会漂移到几秒钟的延迟,然后流下降并重新启动(并且延迟舞蹈再次开始)。在其他情况下(我猜是当我将网络缓存设置得太低时),我会得到一个充满错误的日志并且永远不会得到图片。

我目前的设置是:

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,我永远看不到图像(我在某处读到这可能是因为平板电脑的解码器延迟高于 200 毫秒)。

无论如何,我在十年间找到了几十个潜在的答案,有些是相似的,有些是相互矛盾的,有些使用了已弃用的标志。一些值得注意的:

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.add("--network-caching=50");
options.add("--clock-jitter=0");
options.add("--clock-synchro=0");

2017:在 Android 上使用 libvlc 播放 rtp 流时减少延迟

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:减少流媒体和实时流媒体方法的延迟

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

2013:使用 VLC 以尽可能低的延迟通过 RTP 流式传输桌面

Related to Desktop VLC and tweaking FFMPEG

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

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

在我的例子中,为了尽可能接近实时,零缓存和丢弃延迟帧是理想的(即使是 janky 帧)。但是,我也明白,对于大多数人来说,稳定的流媒体(偶尔会出现零星的丢帧)会更受欢迎。

我最初在3 天前发布在VideoLAN 论坛上。

4

0 回答 0