我的桌面上安装了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时,一切正常。
如何解决此错误?
答案 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"});