将视频设备名称作为参数传递给show

时间:2014-07-29 12:05:58

标签: vlc libvlc

我的桌面上安装了2个网络摄像头--Intex USB 2.0和Logitech Webcam C170。我正在使用libvlc .net wrapper,我想要流式传输第二个网络摄像头。

我正在使用给定的示例创建一个playerStream -

    VlcSinglePlayer playerStream = (VlcSinglePlayer)factory.CreatePlayer(new
                    PlayerOutput(":sout=#transcode{vcodec=h264,vb=256,fps=30,scale=1,acodec=none}:udp{mux=ts,dst=127.0.0.1:8080}"));

    playerStream.SetMediaInput(new MediaInput(MediaInputType.UnparsedMrl, 
                "dshow://:dshow-vdev=\"Webcam C170\" :dshow-adev=none  :live-caching=300 "));

以上代码有效,但我在VLC(udp:// @:8080)中捕获的流始终来自第一个网络摄像头(Intex USB 2.0),而不是来自Logitech网络摄像头C170。

当我尝试从命令行使用VLC时,一切正常。

如何解决此错误?

1 个答案:

答案 0 :(得分:1)

由于它始终在挑选您的第一个设备,因此VLC一定不会知道您指定的设备选项,因此很可能在某处某处出现错误。

您是否只是在" dshow://"?

之后错过了一个空格

你有这个:

playerStream.SetMediaInput(
  new MediaInput(MediaInputType.UnparsedMrl, 
    "dshow://:dshow-vdev=\"Webcam C170\" :dshow-adev=none :live-caching=300"));

在" dshow://"之后应该有一个空格。在下面的冒号之前:

playerStream.SetMediaInput(
  new MediaInput(MediaInputType.UnparsedMrl, 
    "dshow:// :dshow-vdev=\"Webcam C170\" :dshow-adev=none :live-caching=300"));

有时需要使用" - "语法而不是":",所以这可能是必要的:

playerStream.SetMediaInput(
  new MediaInput(MediaInputType.UnparsedMrl, 
    "dshow:// --dshow-vdev=\"Webcam C170\" --dshow-adev=none --live-caching=300"));

如果仍然无效,那么您需要查阅文档,了解MediaInputType.UnparsedMrl期望其参数的方式。在我自己的LibVLC绑定中,这里只有" dshow://"将被视为" MRL",其他所有选项都必须单独传递并明确添加到媒体中(它是一个不同的API调用)。

创建LibVLC实例时,可以(在某些情况下需要)传递一些选项。对于这个类似这样的库:

factory = new VlcMediaLibraryFactory (new string[] { 
  "--dshow-vdev=\"Webcam C170\"", 
  "--dshow-adev=none", 
  "--live-caching=300"});