我在华硕 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
安装libv4l-0 libv4lconvert0
并重新测试但没有修复。
我没有进一步关注这些解决方案(例如这里) 因为 viber 和 chrome 不是 32 位应用程序。我确实使用提供的方法检查了 viber 确实是 64 位这里。
我将包含我预计如果要执行类似于 Skype 修复的操作则应该更改的文件行:
$ cat /usr/share/applications/viber.desktop | grep Exec
Exec=/opt/viber/Viber
和
$ 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
我不确定如何修改这些行以及在哪里找到适用于 64 位的 libv4l 包,以便实现使 viber 和 chrome 正常工作的解决方法。
为了解决潜在问题,我首先在 Unity 的“搜索您的计算机”系统设置中查找摄像头/视频设置。但我什么也没找到。我还运行了:
$ ls /dev/video*
/dev/video1
但我不知道该如何解释这个结果。此外,在运行
sudo lshw -sanitize
我得到了一个巨大的输出:
*-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
我尝试从这里找到驱动程序,但一无所获。例如:
$ ll /lib/modules/4.4.0-28-generic/kernel/drivers | grep uvcvideo
什么都不返回。我还运行:
$ 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
根据互联网,它显示了驱动程序的状态。但无法解释。
某个地方应该有一个驱动程序文件,我可以对其进行修改以修复它,但我该如何找到它呢?
答案1
1)安装实用程序:
$ sudo apt-get update
$ sudo apt-get install v4l-utils
$ sudo apt-get install v4l2loopback-utils
2)下载v4l2loopback
3)解压“v4l2loopback-master”文件夹
4)编译v4l2loopback模块:
$ make
5)安装:
$ sudo make install
6)启用设备:
$ sudo modprobe v4l2loopback exclusive_caps=1
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
8)通过ffmpeg将网络摄像头视频流复制到其中:
$ ffmpeg -f v4l2 -i /dev/video0 -vf "vflip" -f v4l2 /dev/video1
9)打开您喜欢的视频应用程序(skype、hangouts、zoom 等),然后选择“虚拟视频设备”
您可以查看有关参数的更多详细信息:
答案2
我继续研究这个问题,并想出了一个临时的解决方案。信息来自这答案也有帮助。
这里的主要区别是应用程序是 64 位的,所以我无法完全遵循以前的解决方案。安装后,libv4l
我需要找到 64 位版本兼容文件的适当路径来设置LD_PRELOAD
变量。四处寻找后,我发现我可以用以下方法做到这一点:
$ dpkg -L libv4l-0 | grep compat
/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so
这和 Veazer 的回答帮助我通过更改 viber.desktop 文件完成了解决方法。重要的是,在进行更改之前请进行备份,例如:
sudo cp /usr/share/applications/viber.desktop /usr/share/applications/viber.desktop-original
之后,我们就有了更改 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'
注意相机反转的整数值 2。
我希望同样的方法也能修复 chrome,但我稍后会研究它。除非有人能帮助我修复网络摄像头驱动程序的根本问题。
答案3
关于修复基于 Chrome/Chromium 的浏览器中倒置/翻转的笔记本电脑网络摄像头视频 - 几天前,我将 ASUS P52F 笔记本电脑更新到 Linux Mint 18 XFCE,现在与 Ubuntu 16.04.1 相当。我仅使用 Chrome 网络浏览器在 Hangouts 和 Facebook 上遇到了“颠倒”的网络摄像头 WebRTC 视频。Firefox 运行良好。Cheese 也能正确显示视频。
经过谷歌搜索我发现此错误报告。在评论 22 中,您可以看到 2 年前提出了一个 0001-Use-libv4l2-for-Linux-V4L-grabber.patch,它修复了 Chrome/Chromium 的行为。一年多以来,libv4l2 已添加到 Chromium,但尚未在 Linux 上启用。您可以在错误报告线程中看到整个讨论。长话短说,他们似乎近一年来都没有积极致力于修复此问题。但是,有一些丑陋的解决方法……
你可以加翻转Chrome 扩展。它允许您翻转网络摄像头视频或网页的任何其他元素。它只会在本地翻转,因此通过 Chrome 与您交谈的人也需要使用相同的技巧。它并不漂亮,但它有效......嗯,有点 ;) 毕竟,切换到 Firefox 可能是一个更好、更舒适的解决方案。干杯!
答案4
这对我有用:
- Ubuntu 桌面,
- Ubuntu 18.04 LTS,
- 华硕F3E系列
问题:
- Skype 视频摄像头倒置
- Skype 版本 8.48
解决:
sudo nano /usr/bin/skypeforlinux
更新最后一行。
#!/bin/sh
SCRIPT=$(readlink -f "$0")
USR_DIRECTORY=$(readlink -f $(dirname $SCRIPT)/..)
SKYPE_PATH="/usr/share/skypeforlinux/skypeforlinux"
SKYPE_LOGS="$HOME/.config/skypeforlinux/logs"
mkdir -p $SKYPE_LOGS
echo "$SKYPE_PATH"
# was this
#nohup "$SKYPE_PATH" --executed-from="$(pwd)" --pid=$$ "$@" > "$SKYPE_LOGS/skype-startup.log" 2>&1 &
# changed to
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so /usr/share/skypeforlinux/skypeforlinux > "$SKYPE_LOGS/skype-startup.log" 2>&1 &