我在华硕 N61JQ 笔记本电脑上使用 Ubuntu 16.04。当我使用来自 viber 或 facebook(通过 chrome)的视频通话时,我的网络摄像头会提供一个倒置的图像。我想知道如何解决它。因为两个独立的应用程序(Viber 和 Chrome)有这个,我认为它不是特定于应用程序的。
在互联网上寻找修复程序时,我发现很多案例都提供了有关如何为 Skype 修复此问题的说明。我跑了
sudo apt-add-repository ppa:libv4l/stable
sudo apt-get update
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)
安装libv4l-0 libv4lconvert0并重新测试但没有修复。
我没有进一步遵循这些解决方案(例如此处),因为 viber 和 chrome 不是 32 位应用程序。我确实使用提供的方法检查了 viber 确实是 64 位此处。
如果我要执行类似于 Skype 修复的操作,我将包含我希望应该更改的文件行:
$ cat /usr/share/applications/viber.desktop | grep Exec
Exec=/opt/viber/Viber
Run Code Online (Sandbox Code Playgroud)
和
$ cat /usr/share/applications/google-chrome.desktop | grep Exec
Exec=/usr/bin/google-chrome-stable %U
Exec=/usr/bin/google-chrome-stable
Exec=/usr/bin/google-chrome-stable --incognito
Run Code Online (Sandbox Code Playgroud)
我不确定如何修改这些行以及在哪里可以找到 64 位的 libv4l 包,以实施一种使 viber 和 chrome 正常工作的解决方法。
在寻求解决潜在问题的过程中,我首先在 Unity 的“搜索您的计算机”系统设置中查找相机/视频设置。但我什么也没发现。我也运行:
$ ls /dev/video*
/dev/video1
Run Code Online (Sandbox Code Playgroud)
但我不知道从这个结果中得到什么。运行后也是
sudo lshw -sanitize
Run Code Online (Sandbox Code Playgroud)
我得到了一个巨大的输出:
*-usb:0
description: Video
product: USB2.0 UVC 2M WebCam
vendor: USB2.0 UVC 2M WebCam
physical id: 2
bus info: usb@1:1.2
version: 2.02
serial: [REMOVED]
capabilities: usb-2.00
configuration: driver=uvcvideo maxpower=500mA speed=480Mbit/s
Run Code Online (Sandbox Code Playgroud)
我试图从中找到驱动程序,但一无所获。例如:
$ ll /lib/modules/4.4.0-28-generic/kernel/drivers | grep uvcvideo
Run Code Online (Sandbox Code Playgroud)
什么都不返回。我也运行:
$ lsmod | grep uvcvideo
uvcvideo 90112 0
videobuf2_vmalloc 16384 1 uvcvideo
videobuf2_v4l2 28672 1 uvcvideo
videobuf2_core 36864 2 uvcvideo,videobuf2_v4l2
videodev 176128 4 uvcvideo,v4l2_common,videobuf2_core,videobuf2_v4l2
media 24576 2 uvcvideo,videodev
Run Code Online (Sandbox Code Playgroud)
其中(根据互联网)显示驱动程序的状态。却无法解读。
某处应该有一个驱动程序文件,我可以修补它,但我如何找到它?
我继续研究这个,我想出了一个临时解决方案。这个答案中的信息也有帮助。
这里的主要区别是应用程序是 64 位的,所以我不能完全遵循以前的解决方案。安装后,libv4l我需要为 64 位版本的兼容文件找到合适的路径来设置LD_PRELOAD变量。环顾四周后,我发现我可以这样做:
$ dpkg -L libv4l-0 | grep compat
/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so
Run Code Online (Sandbox Code Playgroud)
这和 Veazer 的回答通过更改 viber.desktop 文件帮助我完成了解决方法。重要的是,在进行更改之前进行备份,例如:
sudo cp /usr/share/applications/viber.desktop /usr/share/applications/viber.desktop-original
Run Code Online (Sandbox Code Playgroud)
之后,我们拥有了更改 viber.desktop 文件所需的所有信息。我们只需要改变一行。以下更改解决了 viber 中的问题:
$ cat /usr/share/applications/viber.desktop | grep Exec
Exec=sh -c 'export LIBV4LCONTROL_FLAGS=2 && LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so /opt/viber/Viber'
Run Code Online (Sandbox Code Playgroud)
注意相机反转的整数值 2。
我希望同样的方法也能修复 chrome,但我稍后会处理它。除非有人可以帮助我解决网络摄像头驱动程序的潜在问题。
小智 5
1) 安装实用程序:
$ sudo apt-get update
$ sudo apt-get install v4l-utils
$ sudo apt-get install v4l2loopback-utils
Run Code Online (Sandbox Code Playgroud)
2)下载v4l2loopback
3) 解压“v4l2loopback-master”文件夹
4)编译v4l2loopback模块:
$ make
Run Code Online (Sandbox Code Playgroud)
5)安装:
$ sudo make install
Run Code Online (Sandbox Code Playgroud)
6) 启用设备:
$ sudo modprobe v4l2loopback exclusive_caps=1
Run Code Online (Sandbox Code Playgroud)
7) 检查设备是否启用:
$ v4l2-ctl --list-devices
Dummy video device (0x0000) (platform:v4l2loopback-000):
/dev/video1
USB2.0 UVC 2M WebCam: USB2.0 UV (usb-0000:00:1a.0-1.2):
/dev/video0
Run Code Online (Sandbox Code Playgroud)
8)通过ffmpeg将网络摄像头视频流复制到它:
$ ffmpeg -f v4l2 -i /dev/video0 -vf "vflip" -f v4l2 /dev/video1
Run Code Online (Sandbox Code Playgroud)
9) 打开您喜欢的视频应用程序(Skype、环聊、缩放等)并选择“虚拟视频设备”
您可以查看有关参数的更多详细信息:
https://www.ostechnix.com/20-ffmpeg-commands-beginners/
https://github.com/qTox/qTox/wiki/Video