我最近开始在Android应用程序中使用libVLC,目的是替换我们花很多钱购买的商业SDK,但看不到希望的结果。该应用程序要求尽可能接近实时地查看RTSP流。理想情况下为500毫秒或更长时间(取决于平板电脑),而延迟不会随时间漂移。
退出用于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")
Run Code Online (Sandbox Code Playgroud)
如果我将其设置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");
Run Code Online (Sandbox Code Playgroud)
2018:Android LibVLC选项不起作用
options.add("--network-caching=50");
options.add("--clock-jitter=0");
options.add("--clock-synchro=0");
Run Code Online (Sandbox Code Playgroud)
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");
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
2015年:减少流媒体和实时流媒体方法的延迟
mLibvlc.setDevHardwareDecoder(LibVLC.DEV_HW_DECODER_AUTOMATIC); …Run Code Online (Sandbox Code Playgroud) 我目前在尝试使用适用于 Android 的 VLC 播放网络流时遇到问题。
我基本上遵循了这个指南,https://wiki.videolan.org/AndroidCompile/,克隆了 repo 并构建了:一切正常,我可以运行我的应用程序并播放视频(本地或来自网络)。
然后我libvlc AAR从头开始创建了一个新的 Android 项目:我可以播放本地视频,但是当我传入一个 URL 时,流没有打开。
相关代码:
// Create LibVLC
ArrayList<String> options = new ArrayList<String>();
options.add("--aout=opensles");
options.add("--audio-time-stretch"); // time stretching
options.add("-vvv"); // verbosity
libvlc = new LibVLC(options);
holder.setKeepScreenOn(true);
// Create media player
mMediaPlayer = new MediaPlayer(libvlc);
mMediaPlayer.setEventListener(mPlayerListener);
// Set up video output
final IVLCVout vout = mMediaPlayer.getVLCVout();
vout.setVideoView(mSurface);
vout.addCallback(this);
vout.attachViews();
Media m = new Media(libvlc, Uri.parse(media));
mMediaPlayer.setMedia(m);
mMediaPlayer.play();
Run Code Online (Sandbox Code Playgroud)
URL 中的mediaa在哪里String。
我的配置(即模块)中是否缺少某些东西?
这是我得到的日志:
D/LibVLCAndroidSample: Playing …Run Code Online (Sandbox Code Playgroud) 经过 3 天的旅程,我终于编译了 libvlc-3.0.0-2.1.0.aar,用于将 VLC 播放器嵌入到我的 Android(电视)应用程序中。
\n\n改编LibVLC Android 示例后到我的项目中后,我终于运行了该应用程序。
\n\n问题:仅播放音频。视频永远不会出现(表面视图保持黑色)。我用不同的视频进行了测试,图像从未出现。
\n\n知道为什么视频没有播放吗?这是我尝试播放的视频示例(http://www.sample-videos.com/video/mp4/240/big_buck_bunny_240p_50mb.mp4)
\n\n我的设置:\n我已经刻录了Android 电视图像刻录到我的 RPI3 中,并且该应用程序正在其中运行。
\n\n更新:我已经尝试过 VLC 原始应用程序(来自 apk),并且发生了同样的情况。
\n\n这是我的活动的代码:
\n\npublic class MyVideoPlayerActivity extends Activity implements IVLCVout.Callback{\n\n public final static String TAG = "VideoActivity";\n\n // display surface\n private SurfaceView mSurface;\n private SurfaceHolder holder;\n\n // media player\n private LibVLC libvlc;\n private MediaPlayer mMediaPlayer = null;\n private int mVideoWidth;\n private int mVideoHeight;\n private final static int VideoSizeChanged = …Run Code Online (Sandbox Code Playgroud)