skypeforlinux 识别外部网络摄像头但屏幕变黑

skypeforlinux 识别外部网络摄像头但屏幕变黑

情况

Ubuntu 16.04、skypeforlinux 8.53.0.85 和 8.58.0.93(迄今为止最新版本)Skype 网站

  • 外部网络摄像头与 Cheese 配合使用
  • 外部网络摄像头认可通过 Skype 按照下面的屏幕截图

    • lsusbSkype 对话窗口中显示的供应商和产品 ID (十六进制)
    • 网络摄像头是但屏幕不是活性:黑屏

      在此处输入图片描述

研究

这不是官方的已知问题列表Linux 版 Skype: https://support.skype.com/en/faq/FA34713/faq-and-known-issues-with-skype

一些旧帖子建议检查已安装 v4l 和 gstreamer。它们是:

ii  libv4l-0:amd64  1.10.0-1  amd64  Collection of video4linux support libraries  
ii  libv4l-dev:amd64  1.10.0-1  amd64  Collection of video4linux support libraries (development files)
ii  libv4l2rds0:amd64  1.10.0-1  amd64  Video4Linux Radio Data System (RDS) decoding library
ii  libv4lconvert0:amd64  1.10.0-1  amd64 Video4linux frame format conversion library
ii  gir1.2-gst-plugins-base-1.0  1.8.3-1ubuntu0.3  amd64  GObject introspection data for the GStreamer Plugins Base library
ii  gir1.2-gstreamer-1.0  1.8.3-1~ubuntu0.1  amd64  GObject introspection data for the GStreamer library
ii  gnome-video-effects  0.4.1-3ubuntu1  all  Collection of GStreamer effects
ii  gstreamer1.0-alsa:amd64  1.8.3-1ubuntu0.3  amd64  GStreamer plugin for ALSA
ii  gstreamer1.0-clutter-3.0  3.0.18-1  amd64  Clutter PLugin for GStreamer 1.0
ii  gstreamer1.0-libav:amd64  1.8.3-1ubuntu0.2  amd64  libav plugin for GStreamer
ii  gstreamer1.0-plugins-base:amd64  1.8.3-1ubuntu0.3  amd64  GStreamer plugins from the "base" set
ii  gstreamer1.0-plugins-base-apps  1.8.3-1ubuntu0.3  amd64  GStreamer helper programs from the "base" set
ii  gstreamer1.0-plugins-good:amd64  1.8.3-1ubuntu0.4  amd64  GStreamer plugins from the "good" set
ii  gstreamer1.0-plugins-ugly:amd64  1.8.3-1ubuntu0.1  amd64  GStreamer plugins from the "ugly" set
ii  gstreamer1.0-plugins-ugly-amr:amd64  1.8.3-1ubuntu0.1  amd64  GStreamer plugins from the "ugly" set
ii  gstreamer1.0-pulseaudio:amd64  1.8.3-1ubuntu0.4  amd64  GStreamer plugin for PulseAudio
ii  gstreamer1.0-tools  1.8.3-1~ubuntu0.1  amd64  Tools for use with GStreamer
ii  gstreamer1.0-x:amd64  1.8.3-1ubuntu0.3  amd64  GStreamer plugins for X11 and Pango
ii  libclutter-gst-3.0-0:amd64  3.0.18-1  amd64  Open GL based interactive canvas library GStreamer elements
ii  libgstreamer-plugins-base1.0-0:amd64  1.8.3-1ubuntu0.3  amd64  GStreamer libraries from the "base" set
ii  libgstreamer-plugins-good1.0-0:amd64  1.8.3-1ubuntu0.4  amd64  GStreamer development files for libraries from the "good" set
ii  libgstreamer1.0-0:amd64  1.8.3-1~ubuntu0.1  amd64  Core GStreamer libraries and elements
ii  libreoffice-avmedia-backend-gstreamer  1:5.1.6~rc2-0ubuntu1~xenial10  amd64  GStreamer backend for LibreOffice
ii  phonon-backend-gstreamer:amd64  4:4.8.2-0ubuntu2  amd64  Phonon GStreamer 1.0 backend
ii  phonon-backend-gstreamer-common:amd64  4:4.8.2-0ubuntu2  amd64  Phonon GStreamer 1.0.x backend icons
ii  totem  3.18.1-1ubuntu4  amd64  Simple media player for the GNOME desktop based on GStreamer

将启动定向到兼容性或转换库,或者使用

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l2convert.so /usr/share/skypeforlinux/skypeforlinux

或者

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so /usr/share/skypeforlinux/skypeforlinux

启动 Skype 但无法解决问题。请注意,这/usr/bin/skype是一个 bash 脚本启动/usr/share/skypeforlinux/skypeforlinux,我在上面使用它进行测试。

问题

关于如何让 Skype 真正通过网络摄像头发送信号,有什么建议吗?

答案1

我知道有两种方法可以让您的网络摄像头正常工作skypeforlinux

  1. 预加载其中一个 Video For Linux 兼容库。

    加利帕金提到了其中一个,v4l2convert.so;如果不起作用,您可以搜索另一个,,v4l1compat.so并在启动 Skype 的命令中预加载它。例如,如果您在中找到该库/usr/lib/x86_64-linux-gnu/libv4l/,请关闭 Skype 并尝试以下命令重新启动它:

    LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so skypeforlinux
    

    如果它向您提供有关不兼容 ELF 版本的消息,您可能正在为 32 位 Skype 加载 64 位库,或者类似的东西:搜索其他版本。

  2. 将外来的网络摄像头输出转换为可接受的格式。

    如果 Skype 检测到您的网络摄像头,但在您打开它时只显示一个黑色矩形,那么很可能它无法理解网络摄像头的输出。我自己的网络摄像头以运动 jpeg 格式传输数据,像素格式为“yuvj422p”,我以前从未听说过。试试看ffplay它是否可以处理;如果它可以,ffmpeg那也可以,这可能会拯救你。

    首先列出可用的输入

     $ v4l2-ctl --list-devices
    

    我的输出如下:

     BT878 video (Hauppauge (bt878)) (PCI:0000:05:01.0):
         /dev/video0
         /dev/vbi0
     USB Camera (041e:401f) (usb-0000:00:14.0-11.2):
         /dev/video1
    

    所以我选择第二个进行测试:

     $ ffplay -hide_banner -f v4l2 -i /dev/video1
    

    -hide_banner是一个方便参数,-f v4l2选择解复用器格式,-i /dev/video1我的网络摄像头。

    如果ffplay您的网络摄像头处理得很好,您可以通过在其视频窗口上输入“q”来停止它,然后继续。安装 Video For Linux 的环回驱动程序;您只需执行一次,但您需要 sudo 权限:

     $ sudo apt-get update
     $ sudo apt-get install v4l2loopback-dkms
    

    这会在磁盘上额外增加 100kB 多一点的空间:内核模块v4l2loopback。你必须将其加载到内核中,这是另一个 sudo 活动:

     $ sudo modprobe v4l2loopback
    

    之后你可以立即检测到额外的视频输入:

     $ v4l2-ctl --list-devices
    

    现在应该显示如下内容:

     BT878 video (Hauppauge (bt878)) (PCI:0000:05:01.0):
         /dev/video0
         /dev/vbi0
     USB Camera (041e:401f) (usb-0000:00:14.0-11.2):
         /dev/video1
     Dummy video device (0x0000) (platform:v4l2loopback-000):
         /dev/video2
    

    剩下要做的就是让ffmpeg从您奇特的网络摄像头获取输入,将其转换为常见的格式,例如yuv420p,然后通过环回模块将其输出到虚拟视频设备。听起来很复杂,但它只不过是这个命令:输入格式 - 输入 - 过滤器 - 输出格式 - 输出

     $ ffmpeg -hide_banner -f v4l2 -i /dev/video1 -vf format=yuv420p -f v4l2 /dev/video2
    

    您可以再次测试其工作情况ffplay

     $ ffplay -hide_banner -f v4l2 -i /dev/video2
    

    请注意,我正在从新的视频设备(虚拟设备)获取输入;video1 在ffmpeg读取时将被占用。

    我想说的是,ff-combo 在我 5 岁的孩子身上消耗的 CPU 容量不到 1%。如果一切顺利,请ffplay在视频窗口中输入“q”停止,但让我们ffmpeg继续。

    现在转到您的 Skype,在音频和视频设置中选择上面命名的环回设备:Dummy video device。如果运行良好,剩下要做的就是微调,然后清理一下。如果没有,我和你一样感到抱歉。

    ffmpeg准备好后,通过在运行它的终端中输入内容来关闭q。您可以再试一次,通过向 ffmpeg 添加过滤器来为您的旧网络摄像头进行虚拟更新;这些可以放在其他-vf参数中,或者您可以在 之前或之后添加它们format=yuv420p,用逗号分隔。我的需要相当大的提升:

     -vf format=yuv420p,spp=quality=3:mode=hard:qp=5,unsharp=3:3:0.7:5:5:-0.5,hqdn3d,eq=saturation=1.8:gamma=1.4
    

    ffplay但我相信您可以找到自己的 ffmpeg 过滤器以及如何使用它们。您可以在将它们添加到ffmpeg命令行之前先试用它们

    现在,您不想在每次接听或拨打 Skype 电话时阅读此文本并输入其命令。我已将其输入~/.bash_aliases如下,别名为videoskype

     alias videoskype="xterm -e /bin/bash -ic 'sudo modprobe v4l2loopback;echo Ready for video call, press q to stop;ffmpeg -hide_banner -f v4l2 -i /dev/video1 -vf format=yuv420p -f v4l2 /dev/video2;sudo modprobe --remove v4l2loopback'&"
    

    从现在开始,videoforskype在交互式 shell(普通终端或类似的启动器bash -ic videoskype)中给出的单个命令将打开一个终端,要求您输入 sudo 密码来加载环回模块,该命令将一直ffmpeg运行直到您停止它,然后卸载环回模块。

    请注意,内核模块加载器非常强大:它可以优雅地处理已加载模块的加载尝试。但是,如果您videoskype在另一个终端中运行另一个实例时重新启动,则ffmpeg新实例中的 无法从其输入中读取并停止,从而导致环回模块被卸载,并且第一个模块ffmpeg也停止。

成功!!

答案2

我遇到了同样的问题,尝试了很多方法。我使用的是 Ubuntu 19.10(eoan),Skype 版本 8.59.76.73,libv4l 版本是 1.16.7-1。我对这个问题的解决方案基于这个 Ubuntuforums 链接

  1. 使用以下方法从系统中彻底删除 Skype

    sudo apt-get purge skype*
    

    或者

    snap remove skype
    
  2. 安装 libv4l-dev 包

    sudo apt install libv4l-dev
    
  3. 使用以下命令查找 lib4l 包的下载位置,

    find / -iname "*libv4l*" 2>/dev/null
    
  4. 重新安装最新版本的 skypeforlinux 预览版此 Skype 存储库

  5. 重新启动系统。

  6. 使用您找到的 libv4l 路径,使用以下命令运行 skypeforlinux

    LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l2convert.so skypeforlinux
    

我希望这会有所帮助,我通过这些步骤解决了我的问题。

相关内容