fps 低(视频断断续续),没有声音,使用 webcam/hdmi-usb 加密狗时 "No JPEG data found in image"

Low fps (choppy video), no sound, "No JPEG data found in image" when using webcam/hdmi-usb dongle

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

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

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

通过大量研究和实验,我发现 vlc 中的视频不稳定的原因是它使用了 YUV2 的默认“chroma”,如果我没看错是解压的。 (您可以通过 运行 检查 webcam/dongle 的功能: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