Windows 10 USB摄像头无法从代码运行,但可以从其他程序运行

时间:2019-05-24 13:49:32

标签: c# python c++ windows-10 webcam

我无法用任何编程语言创建一个应用程序,该应用程序将从USB网络摄像头播放视频。

我想显示来自摄像头的视频,然后按一下按钮拍摄帧快照。

现有程序使用avicap32.dll,并且在较旧版本的Windows上可以正常运行,但在Windows 10上则无法运行。

在Windows 10上,我测试了VLC是否可以从dshow播放网络摄像头,并且也可以播放。然后,我制作了一个使用libvlc包装器播放网络摄像头的c#应用程序,并且从未加载任何视频。但是,在应用程序运行时,我的网络摄像头上的指示灯会亮起。如果我使用该应用程序并将网络摄像头移动到我的C#应用​​程序中播放的Windows 7 pc视频中。

然后我尝试了ffmpeg,从命令行运行ffplay可以播放来自网络摄像头的视频。我制作了一个c#应用程序,它将创建一个新进程并使用参数运行ffplay exe。 ffplay输出中出现错误,说找不到视频格式。

然后我尝试在python的子进程中运行ffplay,基本上与上述c#应用完全相同。这次视频播放成功。

我认为这一定与c#有关。因此,我制作了一个使用lib vlc播放dshow://的快速c ++应用程序。我没有视频播放,但是网络摄像头上的指示灯亮起。如果我将此C ++应用程序移至Windows 7计算机,则该应用程序将运行并显示来自摄像机的视频。 (这是使用mingw而非Visual C ++制作的)

我也尝试使用DirectShow,但这也没有用。刚得到一张黑色图像,并且无法复制帧。

奇怪的是,我能够使用Microsoft的Universal app c#示例,并且能够使用网络摄像头。我必须授予示例应用程序权限才能首先使用网络摄像头。

此外,我知道网络摄像头在Windows 10计算机上运行良好,因为Windows 10中的Camera应用程序运行正常,vlc运行正常,ffplay运行正常。

有人知道这里发生了什么吗?微软在玩游戏吗?他们是否要强迫人们使用通用应用程序(如果他们想要网络摄像头访问权限)? VLC,FFMPEG怎么样。他们不是通用应用程序。

更新: 我仍然没有运气来获得Winforms应用程序来显示来自网络摄像头的图像,但是,我决定使用Process来启动可启动ffplay的python脚本,并且令人惊讶的是,我得到了与直接运行ffplay时得到的相同的错误消息从C#使用过程。我得到的错误是 “找不到流0(视频:mjpeg(MJPG / 0x47504A4D),无(bt470bg /未知/未知),640x480)的编解码器参数:未指定的像素格式 考虑增加“ analyzeduration”和“ probesize”选项的值 从'video = Logitech HD Webcam C615'输入#0,dshow:   持续时间:不适用,比特率:不适用     流#0:0:视频:mjpeg(MJPG / 0x47504A4D),无(bt470bg /未知/未知),640x480、30 fps,30 tbr,10000k tbn,10000k tbc“

更新2:

我对与此主题相关的在线信息很少感到惊讶。但是对于将来面对这些问题的你们。我在Microsoft网站上找到了一篇文章,该文章指出,Windows 10 1809版中的新应用程序安全性机制可防止任何应用程序访问摄像头和麦克风,除非它们是UWP并具有权限。但是,如果应用程序知道如何绕过Windows库直接与设备通信,则该应用程序仍然可以使用相机。 https://support.microsoft.com/en-us/help/4468234 这就是我结束的地方,我将使用tcp套接字服务器制作一个UWP应用,将网络摄像头图像代理到我的旧软件。

0 个答案:

没有答案