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

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

我在华硕 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 等),然后选择“虚拟视频设备”

您可以查看有关参数的更多详细信息:

https://ffmpeg.org

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

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

答案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 &

相关内容