- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 ximagesrc
从窗口抓取视频,并将其缩放到一定大小,然后再以 H.264 进行编码并使用 RTP 流式传输到另一台计算机。我在 C API 中实现了管道,除非我使用 capsfilter
添加 videoscale
元素,否则它工作正常。
具体来说,我在理解如何正确使用 videoscale
元素以及如何以编程方式将其与 videoconvert
元素链接时遇到问题。当我尝试使用 capsfilter
连接 videoconvert
和 videoscale
元素以缩放到我想要的分辨率。
我的代码如下所示:
static gboolean
link_elements_with_filter (GstElement *element1, GstElement *element2)
{
gboolean link_ok;
GstCaps *caps;
caps = gst_caps_from_string("video/x-raw,width=640,height=480,framerate=20/1");
link_ok = gst_element_link_filtered (element1, element2, caps);
gst_caps_unref (caps);
if (!link_ok) {
g_warning ("Failed to link element1 and element2!");
}
return link_ok;
}
int main(int argc, char *argv[]) {
(...)
/* Create the elements */
source = gst_element_factory_make ("ximagesrc", "source");
converter = gst_element_factory_make ("videoconvert", "converter");
scaler = gst_element_factory_make ("videoscale", "scaler");
encoder = gst_element_factory_make("nvh264enc", "encoder");
payloader = gst_element_factory_make("rtph264pay", "payloader");
sink = gst_element_factory_make ("udpsink", "sink");
g_object_set (source, "use-damage", FALSE, "xid", 0x5c0000c, NULL);
g_object_set (encoder, "gop-size", 25, "rc-mode", 2, "bitrate", 2000, NULL);
g_object_set (payloader, "config-interval", 1, NULL);
g_object_set (sink, "host", "172.17.25.248", "port", 5004, NULL);
pipeline = gst_pipeline_new ("test-pipeline");
if (!pipeline || !source || !converter || !encoder || !payloader || !sink) {
g_printerr ("Not all elements could be created.\n");
return -1;
}
gst_bin_add_many (GST_BIN (pipeline), source, converter, scaler, encoder, payloader, sink, NULL);
if ((gst_element_link (source, converter) && link_elements_with_filter(converter, scaler)
&& gst_element_link (scaler, encoder)
&& gst_element_link (encoder, payloader)
&& gst_element_link (payloader, sink)) != TRUE) {
g_printerr ("Elements could not be linked.\n");
gst_object_unref (pipeline);
return -1;
}
(...)
当我运行此代码时,我得到以下输出:
** (gst_server:55698): WARNING **: 11:21:57.315: Failed to link element1 and element2!
Elements could not be linked.
Process finished with exit code 255
所以我在连接 videoconvert
和 videoscale
元素时遇到问题。管道中元素的顺序是否有问题,或者可能是我对上限的使用有问题?
谢谢。
编辑:
相应的gst-launch
管道(工作正常)如下所示:
gst-launch-1.0 ximagesrc use-damage=FALSE xid=0x5c0000c ! videoconvert ! videoscale ! video/x-raw,width=320,height=240 ! nvh264enc gop-size=25 rc-mode=cbr bitrate=2000 ! rtph264pay config-interval=1 ! udpsink host=172.X.X.X port=5001
然后我可以在客户端计算机上启动另一个 gst-launch
管道并查看缩放后的视频。
编辑2:我设置了 GST_DEBUG=5 并检查了调试输出。它表示 videoconvert
元素的源垫和 capsfilter
元素的接收垫不兼容。媒体格式之间的转换似乎存在问题。
0:00:00.175919763 57549 0x5578d0241800 DEBUG GST_CAPS gstutils.c:3065:gst_pad_query_caps:<capsfilter0:sink> query returned video/x-raw, width=(int)640, height=(int)480, framerate=(fraction)20/1
0:00:00.175938538 57549 0x5578d0241800 DEBUG GST_CAPS gstpad.c:2278:gst_pad_link_check_compatible_unlocked:<converter:src> src caps video/x-raw, format=(string)BGRx, width=(int)1247, height=(int)1573, framerate=(fraction)[ 1/2147483647, 2147483647/1 ], pixel-aspect-ratio=(fraction)1/1; video/x-raw, width=(int)1247, height=(int)1573, framerate=(fraction)[ 1/2147483647, 2147483647/1 ], pixel-aspect-ratio=(fraction)1/1, format=(string){ I420, YV12, YUY2, UYVY, AYUV, VUYA, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, Y210, Y410, NV12, NV21, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10BE, I420_10LE, I422_10BE, I422_10LE, Y444_10BE, Y444_10LE, GBR, GBR_10BE, GBR_10LE, NV16, NV24, NV12_64Z32, A420_10BE, A420_10LE, A422_10BE, A422_10LE, A444_10BE, A444_10LE, NV61, P010_10BE, P010_10LE, IYU2, VYUY, GBRA, GBRA_10BE, GBRA_10LE, BGR10A2_LE, GBR_12BE, GBR_12LE, GBRA_12BE, GBRA_12LE, I420_12BE, I420_12LE, I422_12BE, I422_12LE, Y444_12BE, Y444_12LE, GRAY10_LE32, NV12_10LE32, NV16_10LE32, NV12_10LE40 }
0:00:00.175947929 57549 0x5578d0241800 DEBUG GST_CAPS gstpad.c:2280:gst_pad_link_check_compatible_unlocked:<capsfilter0:sink> sink caps video/x-raw, width=(int)640, height=(int)480, framerate=(fraction)20/1
0:00:00.175955981 57549 0x5578d0241800 DEBUG GST_CAPS gstpad.c:2298:gst_pad_link_check_compatible_unlocked: caps are not compatible
0:00:00.175960969 57549 0x5578d0241800 INFO GST_PADS gstpad.c:2434:gst_pad_link_prepare: caps are incompatible
0:00:00.175968231 57549 0x5578d0241800 INFO GST_PADS gstpad.c:2529:gst_pad_link_full: link between converter:src and capsfilter0:sink failed: no common format
最佳答案
首先我建议使用gst_parse_launch()
。您可以为您的应用程序创建管道,就像通过 gst-launch-1.0
运行一样。然后,如果需要,您可以通过迭代或搜索来访问各个元素 - 不过,大多数内容都可以使用管道字符串来描述。
对于您的代码。您已在洁牙机前设置了盖子。这意味着定标器输入应该具有这些上限。然而,ximagesrc
定义了实际大小。如果它与您提供的不完全相同,它将失败。
通常您希望将其设置在编码器之前,并让元素完成其工作来查找满足上限的配置。例如:
ximagesrc ! videoconvert ! videoscale ! xvideo/x-raw, format=I420, width=640, height=480, framerate=20/1 ! nvh264enc ..
这里videoconvert
会知道它必须以某种方式从ximagesrc
(通常是RGB格式)转换为I420,并且videoscale
将从任何分辨率进行缩放ximagesrc
提供 640x480。建议 ximagesrc
以 20 fps 捕获。
关于c - 在 Gstreamer C API 中对 videoscale 元素使用上限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57036958/
是否有人尝试将 Gstreamer SDK 教程移植到 http://docs.gstreamer.com/display/GstSDK/Tutorials到 gstreamer 1.0? 我尝试将
我正在尝试构建和安装 gst-plugin-bad-1.4.0,但在为我的硬件目标运行配置脚本时出现以下错误。我正在我的 Ubuntu 上安装的目标 SDK/linux-devkit/中运行构建,并且
我想制作某种流媒体服务器。我希望它通过网络从实时流(例如网络摄像头、ipcam 等)接收 RTSP 流,然后使用不同的 URL 在我的本地网络上广播相同的流。我知道 gstreamer 可以做得很好,
在将解复用的 h264 解码输出发送到 gstreamer 管道中的 autovideosink 之前,是否可以在两者之间提供一些延迟。如果是这样,任何人都可以发布示例管道来做到这一点。 我使用的管道
我需要捕获第二个显示器的屏幕并在主显示器中的一个窗口内“监视”它(以 x0.5 缩放并使用相邻插值,因为我更喜欢性能与质量)。从这里 link ,我有这个截屏命令: gst-launch ximage
与 stagefright 相比,使用 gstreamer 有哪些优势?谁能指出其中的区别。 最佳答案 一开始,一个非常笼统的评论。如果GStreamer 是非常值得商榷的。优于 Stagefrigh
我确定我已经让这个管道在我设置的早期 Ubuntu 系统上运行(为了便于阅读而格式化): playbin uri=rtspt://user:pswd@192.168.xxx.yyy/ch1/m
我创建了一个管道,如下所示: v4l2src -> tee -> queue -> encoder -> avimux -> filesink tee -> queue -> v
在执行以下命令时, gst-launch-1.0 filesrc location=Wildlife.wmv ! decodebin ! queue ! ffmpegcolorspace ! auto
我想将二进制数据直接写入 gstreamer 管道,但我无法这样做。 我试过 rawaudioparse 插件。我已将二进制数据写入 .raw 文件并尝试使用此命令播放此二进制数据。 gst-laun
如何查看 GST_CAT_INFO、GST_DEBUG 等函数的输出? 我需要使用调试级别设置自己编译 gstreamer 还是可以在应用程序级别完成? 最佳答案 可以使用 GST_DEBUG 环境变
我想编写(但首先我想了解如何做)基于 GStreamer 框架的应用程序(不止一个),这些应用程序将同时共享相同的硬件资源。 例如:有硬件加速的视频解码。我想使用硬件加速同时启动两个能够解码不同视频流
我有一个 gstreamer 管道,它可以完美地工作并获取相机流,将其编码为 H.264 视频,将其保存到文件中并按如下方式在屏幕上显示: gst-launch-1.0 -v autovideosrc
我正在开发 C 程序来执行自适应流,但我无法使用 g_object_set() 函数更改 x264enc 元素的“比特率”属性。我该如何更改它? 谢谢。 最佳答案 安装git版本的gstreamer丑
我有一个 gstreamer 管道,它可以完美地工作并获取相机流,将其编码为 H.264 视频,将其保存到文件中并按如下方式在屏幕上显示: gst-launch-1.0 -v autovideosrc
我跑 ./autogen.sh在克隆的 repo 中,它没有说以下内容: configure: No package 'gstreamer-plugins-base-1.0' found config
引用http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-dynamic-pipelines.htm
我有一个项目,我们正在使用 gstreamer、x264 等通过本地网络将视频流多播到多个接收器(连接到监视器的专用计算机)。我们在视频源(相机)系统和显示器上都使用了 gstreamer。 我们使用
我正在尝试使用 GStreamer 作为我们正在内部开发的软电话的视频后端。我们的软电话不是基于 GLib 的,有自己的事件循环。是否可以在没有 GMainLoop 的情况下设置 gst 管道并进入各
关于 gstreamer 元素的一些信息,我必须发出一个查询,比如 gst_element_query_position(data.playbin,GST_FORMAT_TIME,¤t)
我是一名优秀的程序员,十分优秀!