在两个VLC播放器实例中无法播放视频流

时间:2020-05-21 06:47:18

标签: libvlc

我们在Linux应用程序中使用libvlc播放来自IP摄像机的RTP MJPEG流。我们希望有两个libvlc_media_players播放视频,一个在GtkDrawingArea中播放完整图像,另一个在另一个GtkDrawingArea中播放视频的裁剪/调整大小部分(伪缩放)。 问题是,只有媒体播放器之一在工作。似乎无论哪个实例首先连接,都会阻止第二个实例绑定到端口。

我们需要一种将流量复制到两个端口的建议或其他建议?

1 个答案:

答案 0 :(得分:0)

根据所需的确切结果,您至少有两种方法可以实现所需的目标。

虽然您只能调用libvlc_new一次,因此应用中始终只有1个libvlc实例在运行,但是您可以根据需要从libvlc创建任意数量的媒体播放器。但是它们将是独立的,因此,如果您需要精确的同步,那么这不是您要使用的。

另一种方法是复制视频输出,例如使用

Clone video filter (clone)
 Duplicate your video to multiple windows and/or video output modules
      --clone-count=<integer>    Number of clones
          Number of video windows in which to clone the video.
      --clone-vout-list=<string> Video output modules
          You can use specific video output modules for the clones. Use a
          comma-separated list of modules.

https://wiki.videolan.org/VLC_command-line_help

带有libvlc_media_add_option(使用此功能时,将--替换为:)。

您也可以将--sout#duplicate一起使用。 https://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples/

根据您选择的方式,VLC可能会自己创建一个新窗口,您可能必须将其抓取并合并到应用程序中。