我正在尝试使用v4l2loopback在Chrome中创建虚拟相机,其中传入的视频是通过RTP输入的H264.
我在Chrome中识别GStreamer测试视频方面取得了一些成功MediaStreamTrack.getSources:
$ sudo modprobe v4l2loopback
$ gst-launch-1.0 videotestsrc ! v4l2sink device=/dev/video0
Run Code Online (Sandbox Code Playgroud)
这很有效,Chrome会显示视频测试源.
但是,当我使用传入的h264/RTP源时,设备不会显示MediaStreamTrack.getSources.例如:
gst-launch-1.0 -v tcpclientsrc host=<IPADDRESS> port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! v4l2sink device=/dev/video0
Run Code Online (Sandbox Code Playgroud)
这是什么原因?解决方案是什么?
我原本以为这可能与视频格式有关,也许需要通过v4l2loopback设置正确的上限.
我编写了一个应用程序,它从网络摄像头读取并使用Linux上的OpenCV处理帧.现在我想将应用程序的输出传输到由V4L2loopback模块创建的虚拟网络摄像头,以便其他应用程序能够读取它.我用C编写了应用程序.我不知道如何处理这个问题.你能给我一些提示吗?
我正在开发一个 openCV 项目,我有一个稳定运行的变体,它从 HDMI 采集卡获取输入并使用 FFmpeg 输出到 v4L2 环回设备 (/dev/video0) 我的 openCV 项目从 /dev/video0 获取输入.
当我尝试使用 rtsp 提要时出现问题,以下命令可将提要发送到我的环回设备:
ffmpeg -rtsp_transport tcp -i rtsp://@192.168.1.27:552//stream1 -acodec rawvideo -vcodec rawvideo -f v4l2 /dev/video0
Run Code Online (Sandbox Code Playgroud)
而且我可以使用 VLC(在 /dev/video0 上)查看该提要没问题,但是当我将其提供给我的 openCV 应用程序时,出现以下错误:
VIDEOIO ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
Run Code Online (Sandbox Code Playgroud)
当我v4l2-ctl -d /dev/video0 --all在工作和非工作变体上运行时,这就是我得到的:
工作输出
Format Video Output:
Width/Height : 1920/1080
Pixel Format : 'UYVY'
Field : None
Bytes per Line : 3840
Size Image : 4147200
Colorspace : sRGB …Run Code Online (Sandbox Code Playgroud) 我知道默认情况下,loopback 4会从模型类或存储库类中推断出mysql数据库表的名称.如何将表名设置为自定义字符串值?可能我必须使用装饰器,我无法在文档中找到任何东西.谢谢.
我已经使用npm i -g @loopback/cli成功安装了 Loopback CLI ,之后我尝试使用lb4 app命令终端创建应用程序,它显示Command 'lb4' not find。只有lb 应用程序适用于版本 3 和 2,但我想创建与环回版本 4 兼容的应用程序。
我正在尝试从我的网络摄像头创建一个环回设备,以便可以从 Zoom 和浏览器访问。我创建了三个 v4l2loopback 设备:
sudo modprobe v4l2loopback devices=3 video_nr=10,11,12 card_label="Loopback_1","Loopback_2","Virtual_cam" exclusive_caps=1,1,0
Run Code Online (Sandbox Code Playgroud)
其次是:
ffmpeg -i /dev/video0 -f v4l2 -vcodec rawvideo -pix_fmt yuv420p /dev/video10 -f v4l2 /dev/video11
Run Code Online (Sandbox Code Playgroud)
Chrome 可以检测到这两种设备,但 Zoom 和 Firefox 都无法检测到。根据 stackoverflow 上其他问题的建议,我尝试使用 v4l2loopback-ctl 设置设备属性,使用v4l2loopback-ctl set-caps "video/x-raw,format=UYVY,width=640,height=480" /dev/video10,并得到响应:
将管道设置为暂停...错误:管道不想暂停。错误:来自元素 /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0:设备“/dev/video10”不是输出设备。附加调试信息:v4l2_calls.c(636):gst_v4l2_open():/GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0:功能:0x85208000将管道设置为NULL...释放管道...输出到/dev/video10失败
我还尝试使用 gst-launch-1.0:
gst-launch-1.0 v4l2src device=/dev/video0 ! v4l2sink device=/dev/video10
Run Code Online (Sandbox Code Playgroud)
这告诉我 /dev/video10 不是输出设备:
将管道设置为暂停...错误:管道不想暂停。错误:来自元素 /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0:设备“/dev/video10”不是输出设备。附加调试信息:v4l2_calls.c(636):gst_v4l2_open():/GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0:功能:0x85208000将管道设置为NULL...释放管道...
我正在运行 Xubuntu 20.04、内核版本 5.4.0-52-generic、v4l2loopback-dkms v.0.12.3-1ubuntu0.1 和 v4l2loopback-utils。
我的目标是让桌面 Node.js 服务器使用一个设备,该服务器将使用xdg-open(因此需要 Chrome 和 Firefox)打开一个 Web 应用程序,该应用程序将输出可被视频使用的已处理视频流聊天应用程序,例如 Zoom 或 Jitsi。
任何帮助将不胜感激。
我需要播放多个视频来测试视频服务器。我正在使用 lubuntu 14.04 并安装了V4l2loopback来制作设备文件( /dev/videoN )
我正在使用 mplayer 从该设备播放视频,如mplayer cam 所述
我已经对源代码进行了修改并成功播放了视频并使用 xawtv 和 flashplayer(在 Firefox 28 上)进行了查看。我曾尝试使用 webRtc 查看,但无法正常工作。
你有什么想法可以做到这一点吗?在 examples/yuv4mpeg_to_v4l2.c 中定义了一些特定的像素格式?
.....
我正在尝试使用此脚本直接访问资源来查找问题:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Test rtc</title>
<script type="text/javascript" charset="utf-8">
navigator.getUserMedia =
(
navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia
);
var constraints =
{
audio: true,
video:true,
video:
{
mandatory:
{
minWidth: 640,
minHeight: 360
}
}
};
if( navigator.getUserMedia )
{
navigator.getUserMedia(
// constraints
constraints ,
// successCallback
function(localMediaStream) …Run Code Online (Sandbox Code Playgroud) 背景故事:我使用的一个直播网站不够智能,无法检测我的网络摄像头(Logitech Brio,4k)的功能,而是使用默认的每秒帧数设置,即 5fps。
(答案中的完整解决方案演练)
我能想到的最佳解决方案(除了更改直播提供商之外)是使用 v4l2loopback 创建一个环回虚拟网络摄像头,我可以强制使用我想在该直播网站上使用的确切设置。
对于 brio,更高的帧率来自 mjpeg,而不是默认的 yuyv。
问题1:
我可以很容易地阅读 mjpeg,但不幸的是我的头一直撞在墙上,因为 v4l2loopback 显然只想要 yuyv。
我试过这样的事情:
ffmpeg -f v4l2 \
-input_format mjpeg \
-framerate 30 \
-video_size 1280x720 \
-i /dev/video0 \
-vcodec copy \
-f v4l2 /dev/video6
Run Code Online (Sandbox Code Playgroud)
和
ffmpeg -f v4l2 \
-input_format mjpeg \
-framerate 30 \
-video_size 1280x720 \
-i /dev/video0 \
-vcodec yuyv422 \ # this line changed (even tried "copy")
-f v4l2 /dev/video6
Run Code Online (Sandbox Code Playgroud)
但他们不会工作。我收到如下错误:
与 yuvj422p 等效的未知 V4L2 像素格式
和
...使用过时的像素格式,请确保您正确设置了范围...
...V4L2 输出设备仅支持单个原始视频流... …
我正在尝试将位于 Videos/video.mp4 中的 mp4 视频通过管道传输到位于 /dev/video0 的虚拟网络摄像头设备。
我尝试运行:
ffmpeg -re -i Videos/video.mp4 -map 0:v -f v4l2 /dev/video0
并且我不断收到以下错误:
[video4linux2,v4l2 @ 0x5580cf270100] Unknown V4L2 pixel format equivalent for yuvj420p
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:0 --
Conversion failed!
Run Code Online (Sandbox Code Playgroud)
完整日志:
ffmpeg version 4.2.2-1+b1 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 9 (Debian 9.2.1-28)
configuration: --prefix=/usr --extra-version=1+b1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa …Run Code Online (Sandbox Code Playgroud) 我很难理解Loopback 4中存储库的概念,该文档说:
存储库表示专门的服务接口,该接口针对基础数据库或服务提供域模型的强类型数据访问(例如CRUD)操作。
但是这种描述并不能帮助我完全理解其背后的思想,有人可以简单地解释它的确切含义,并提供其他框架中类似概念的一些示例吗?