情况
Ubuntu 16.04、skypeforlinux 8.53.0.85 和 8.58.0.93(迄今为止最新版本)Skype 网站)
- 外部网络摄像头与 Cheese 配合使用
外部网络摄像头认可通过 Skype 按照下面的屏幕截图
研究
这不是官方的已知问题列表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
。
预加载其中一个 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 位库,或者类似的东西:搜索其他版本。
将外来的网络摄像头输出转换为可接受的格式。
如果 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 链接。
使用以下方法从系统中彻底删除 Skype
sudo apt-get purge skype*
或者
snap remove skype
安装 libv4l-dev 包
sudo apt install libv4l-dev
使用以下命令查找 lib4l 包的下载位置,
find / -iname "*libv4l*" 2>/dev/null
重新安装最新版本的 skypeforlinux 预览版此 Skype 存储库。
重新启动系统。
使用您找到的 libv4l 路径,使用以下命令运行 skypeforlinux
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l2convert.so skypeforlinux
我希望这会有所帮助,我通过这些步骤解决了我的问题。