微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用网络摄像头/hdmi-usb 加密狗时,fps 低视频断断续续、没有声音、“在图像中找不到 JPEG 数据”

如何解决使用网络摄像头/hdmi-usb 加密狗时,fps 低视频断断续续、没有声音、“在图像中找不到 JPEG 数据”

我花了很长时间才弄明白,所以为了帮助解决这些问题的任何人,我想发布解决方案。但首先,问题是:

我购买了其中一款便宜的 HDMI->USB 加密狗,并将我的 ps3 连接为视频源。在 vlc 上,图像看起来很清晰,但我听不到声音,而且视频非常断断续续。检查“信息”部分中的编解码器选项卡,我看到我以 5 fps 获得 1080p。我以为我的加密狗有缺陷,但决定检查其他应用程序。 tvtime/xawtv 给了我很好的帧率,但我无法改变的低分辨率,cheese 允许我设置所有选项,我获得了很好的帧率和分辨率(但没有声音),然后我终于尝试了 obs 这给了我一个完美的结果。很明显,加密狗没问题,问题出在 vlc 上。

有关所有这些问题(以及更多问题!)的解决方案,请参阅下面的答案

解决方法

通过大量研究和实验,我发现视频在 vlc 中断断续续的原因是因为它使用了 chroma 的默认“YUV2”,如果我是没记错是解压。 (您可以通过运行以下命令来检查网络摄像头/加密狗的功能:v4l2-ctl --list-formats-ext -d /dev/video0 其中 /dev/video0 是您的设备)

解决此问题的正确设置是 mjpg。但是,这会导致大量错误:

[mjpeg @ 0x7f4e0002fcc0] No JPEG data found in image

这是由于默认分辨率和帧率 (1080p@60fps) 压倒了我猜是 mjpeg 解码器的事实。将其设置为 720p,或将帧率降低到 30fps 可防止出现错误。

接下来,声音丢失了,这是因为我使用的是 pulseaudio 并且 vlc 无法确定使用哪个来源。

我通过运行找到了脉冲源:

pactl list short sources

产生了:

alsa_input.usb-MACROSILICON_USB_Video-02.multichannel-input

您可以通过运行以下命令来测试这是正确的来源:

vlc   pulse://alsa_input.usb-MACROSILICON_USB_Video-02.multichannel-input

我发现要将 v4l2 视频源与正确的pulseaudio接收器结合起来,您必须通过 input-slave 参数将音频设置为 vlc,但不幸的是,这对我不起作用在指南中,而我不得不将视频源设置为从属。对我有用的最终命令是:

720p:

vlc   pulse://alsa_input.YOUR-SOURCE-HERE-input  --input-slave=v4l2:///dev/video0:chroma=mjpg:width=1280:height=720

1080p@30fps:

vlc   pulse://alsa_input.YOUR-SOURCE-HERE-input  --input-slave=v4l2:///dev/video0:chroma=mjpg:fps=30

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。