在 VLC 中显示重复流的每个副本

Display every copy of duplicated stream in VLC

我正在 VLC 2.0.1 中尝试这个简单的事情(我在虚拟机上使用 Ubuntu 12.04 运行):

vlc "/mnt/vlc/videos/all.ts" --sout="#duplicate{dst=display,dst=display}"

这意味着我正在尝试复制 TS 并显示它的每个副本。我认为在这种情况下 VLC 将创建两个独立的 display 流输出。 但是每次我 运行 我在下面提到的代码时,我都会得到以下两个结果之一:

  1. VLC 创建两个媒体播放器 windows(每个 TS 副本一个),但视频仅在其中一个中显示(通常有很多人工制品)。第二个媒体播放器保持黑色或包含静态图像: Ans 这是像往常一样在 VLC 中打开的原始文件(注意其中没有任何工件):
  2. VLC 因信号 SIGSEGV、分段错误而崩溃。回溯总是以以下结尾:

</p>

(gdb) bt
#0  0x00007fffaa7f7935 in ?? () from /usr/lib/x86_64-linux-gnu/libLLVM-3.0.so.1
#1  0x00007fffaa7f86b8 in ?? () from /usr/lib/x86_64-linux-gnu/libLLVM-3.0.so.1
#2  0x00007fffaa56da69 in llvm::FPPassManager::runOnFunction(llvm::Function&) () from /usr/lib/x86_64-linux-gnu/libLLVM-3.0.so.1
#3  0x00007fffaa56dbb1 in llvm::FunctionPassManagerImpl::run(llvm::Function&) () from /usr/lib/x86_64-linux-gnu/libLLVM-3.0.so.1
#4  0x00007fffaa56dc91 in llvm::FunctionPassManager::run(llvm::Function&) () from /usr/lib/x86_64-linux-gnu/libLLVM-3.0.so.1
#5  0x00007fffaa502da9 in LLVMRunFunctionPassManager () from /usr/lib/x86_64-linux-gnu/libLLVM-3.0.so.1
#6  0x00007fffabe73511 in ?? () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#7  0x00007fffabe7434b in draw_llvm_create_variant () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#8  0x00007fffabe76375 in ?? () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#9  0x00007fffabdf63c5 in ?? () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#10 0x00007fffabdf1bfb in ?? () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#11 0x00007fffabdf1f3c in draw_vbo () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#12 0x00007fffabdcfc21 in ?? () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#13 0x00007fffab46a6c3 in st_draw_vbo () from /usr/lib/x86_64-linux-gnu/dri/libgallium.so
#14 0x00007fffaba10078 in vbo_exec_vtx_flush () from /usr/lib/x86_64-linux-gnu/dri/libdricore.so
#15 0x00007fffaba0534c in ?? () from /usr/lib/x86_64-linux-gnu/dri/libdricore.so
#16 0x00007fffaba0ddec in vbo_exec_FlushVertices () from /usr/lib/x86_64-linux-gnu/dri/libdricore.so
#17 0x00007fffab9686f4 in _mesa_set_enable () from /usr/lib/x86_64-linux-gnu/dri/libdricore.so
#18 0x00007fffad448bd4 in vout_display_opengl_Display (vgl=0x7fffdc65a950, source=<optimized out>) at opengl.c:704
#19 0x00007fffad4456ab in PictureDisplay (vd=<optimized out>, pic=0x7fffdc891590, subpicture=0x0) at xcb/glx.c:510
#20 0x00007ffff79237f9 in vout_display_Display (subpicture=0x0, picture=<optimized out>, vd=0x7fffdc4c89c8) at ../include/vlc_vout_wrapper.h:57
#21 ThreadDisplayRenderPicture (is_forced=true, vout=0x7fffb8050ee8) at video_output/video_output.c:1053
#22 ThreadDisplayPicture (vout=0x7fffb8050ee8, now=<optimized out>, deadline=<optimized out>) at video_output/video_output.c:1126
#23 0x00007ffff792490a in ThreadManage (postprocessing=0x7fffae8f8ea0, interlacing=0x7fffae8f8e70, deadline=0x7fffae8f8e90, vout=0x7fffb8050ee8) at video_output/video_output.c:1138
#24 Thread (object=0x7fffb8050ee8) at video_output/video_output.c:1581
#25 0x00007ffff76a8e9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#26 0x00007ffff71d173d in clone () from /lib/x86_64-linux-gnu/libc.so.6
#27 0x0000000000000000 in ?? ()

我的问题是如何让它全部工作?或者甚至可以用这种方式同时显示每个重复的流吗?

您可以使用 VLC 服务器进行广播:

vlc movie_name --sout="#standard{mux=ts,dst=239.255.1.1:1234,access=udp}"

然后连接两个VLC客户端:

vlc udp://@239.255.1.1:1234

PS:不确定 239.255.1.1 地址,但它有效

这似乎是虚拟机提供的一个问题,因为引发错误的 libLLVM 是低级虚拟机库。 我在 OS Windows:

中尝试了相同的查询
--sout="#duplicate{dst=display,dst=display}"

而且效果很好