如何修复倒置的笔记本电脑网络摄像头视频

Kar*_*sus 5 webcam 16.04

我在华硕 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)

其中(根据互联网)显示驱动程序的状态。却无法解读。

某处应该有一个驱动程序文件,我可以修补它,但我如何找到它?

Kar*_*sus 5

我继续研究这个,我想出了一个临时解决方案。这个答案中的信息也有帮助。

这里的主要区别是应用程序是 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,但我稍后会处理它。除非有人可以帮助我解决网络摄像头驱动程序的潜在问题。

  • 这对我的 Skype 和 Firefox 有用。不适用于铬。我有基于 Ubuntu 16.04 和华硕笔记本电脑的 LinuxMint 18。 (2认同)

小智 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://ffmpeg.org

https://www.ostechnix.com/20-ffmpeg-commands-beginners/

https://github.com/qTox/qTox/wiki/Video