问题标签 [gstreamer-1.0]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - tensorflow - 从 gstreamer 缓冲区创建输入张量
我目前正在编写一个 Gstreamer1.0 插件,它会拦截一个帧,使用 tensorflow 执行一些任务,在帧上写入数据并将其重新注入。
我在 C/C++ 中执行此操作,当数据必须在 Gstreamer 和 Tensorflow 之间流动时,我目前面临一个问题。
我在 GstBuffer 对象中有一个框架,我必须从中提取数据并构造一个输入张量。格式始终相同,一个 UINT8 RGB 矩阵 [width,height,3]
使用字节指针,我现在必须构造:
我不知道我应该怎么做。
我找不到任何关于如何使用 gpointer 和 tensorflow 的信息或示例,我只能真正找到使用文件作为源的示例,这根本不是我的情况。
任何线索或见解将不胜感激。
gstreamer - Gstreamer 1.0 - 创建自定义消息/事件/信号
我正在用 C 语言为 gstreamer 1.0 编写一个自定义插件。
这个插件对帧执行一些处理,并且在满足某些条件时应该向应用程序发送一个事件。它不应该阻塞管道不干扰它,只是一个信号,以便应用程序可以触发与管道无关的操作。
处理运行良好,但......我不知道下一步该做什么。有很多已经存在的消息,例如 EOS 或 seek 但我如何创建自己的消息?该消息应包含自定义数据,因此我必须自己创建一个可以发送的消息。
通过发送事件或信号,我找不到任何关于如何处理来自插件的自定义事件的示例/文档/说明。
我什至没有示例代码开始。
任何见解将不胜感激。
c++ - C++ 无法在 OpenCV 中集成 JPEG 管道
我查看了 OpenCV 和 Gstreamer 上的大量线程,根本无法解决我的错误问题。我正在尝试在 OpenCV 中打开 Gstreamer 管道。我已经用 GStreamer 构建了 OpenCV,它在 CMake 步骤中显示“是”,表明 OpenCV 构建成功。从命令行检索流的命令可以正常工作,但是它只显示一个帧并挂在 OpenCV 中。
我的服务器语法:
我在 OpenCV for Client (C++) 中的语法:
错误:
GStreamer 插件:嵌入式视频播放停止;模块 autovideosink0-actual-sink-xvimage 报告:输出窗口已关闭 OpenCV 错误:icvStartPipeline,文件 /home/dev/Downloads/OpenCV/opencv-3.0.0/modules/videoio/ 中的未指定错误(GStreamer:无法启动管道) src/cap_gstreamer.cpp,第 383 行在抛出 'cv::Exception' what() 实例后终止调用:/home/dev/Downloads/OpenCV/opencv-3.0.0/modules/videoio/src/cap_gstreamer.cpp: 383: 错误: (-2) GStreamer: 无法在函数 icvStartPipeline 中启动管道
请提供任何帮助,我已经完成了至少 20 篇 Stack 帖子,除了在 OpenCV 中启用 Gstreamer 之外,我离开始的时候还差得远。我什至尝试了不同版本的 OpenCV。
谢谢
gstreamer - 即使在发送 EOS 时,Appsrc 也会卡在 preroll 中
应用程序有一个管道:
appsrc is-live=true ! audiorate skip-to-first=true tolerance=250000000 ! opusenc ! oggmux ! filesink
被gst_element_send_event(appsrc, gst_event_new_eos())
调用来终止它。但是 EOS 有时不会到达管道的总线。
当它没有通过时,必须传递 EOS 的循环的调用堆栈反而陷入等待预卷:
该应用程序没有数据可以放入appsrc,因为它是清理过程的一部分。
GStreamer 1.8.3。
如何取消该预卷并在总线上获得适当的 EOS,以便关闭所有内容?
audio - 使用 Gstreamer 接收音频流导致原因未协商错误
我想用 Gstreamer 从 MIC 流式传输音频数据。但是我无法使用 rx 播放 MIC 音频。如何从 MIC 输入播放音频流?
tx: gst-launch-1.0 -v alsasrc device="hw:0" !解码器!音频转换!rtpL16pay !队列 !udpsink 主机=239.0.0.1 自动多播=真端口=5004
rx:gst-launch-1.0 udpsrc 多播组=239.0.0.1 端口=5004 caps="application/x-rtp" !rtpL16depay!阿尔萨西克
rx 结果:将管道设置为 PAUSED ... 管道处于活动状态,不需要 PREROLL ... 将管道设置为 PLAYING ... 新时钟:GstSystemClock 错误:来自元素 /GstPipeline:pipeline0/GstUDPSrc:udpsrc0:内部数据流错误。附加调试信息:../../../../gstreamer-1.8.1/libs/gst/base/gstbasesrc.c(2948): gst_base_src_loop (): /GstPipeline:pipeline0/GstUDPSrc:udpsrc0: 流式任务暂停,原因未协商 (-4) 执行在 0:00:00.009364000 后结束 将管道设置为 PAUSED ... 将管道设置为 READY ... 将管道设置为 NULL ... 释放管道 ...
tx 结果如下。
将管道设置为 PAUSED ... 管道处于活动状态,不需要 PREROLL ... 将管道设置为 PLAYING ... 新时钟:GstAudioSrcClock /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0:actual-buffer-time = 200000 /GstPipeline:pipeline0/ GstAlsaSrc:alsasrc0: 实际延迟时间 = 10000 /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0.GstPad:src: caps = "audio/x-raw\,\ format\=(string)S16LE\,\ layout\=(string )interleaved\,\ rate\=(int)44100\,\ channels\=(int)2\,\ channel-mask\=(bitmask)0x0000000000000003" /GstPipeline:pipeline0/GstDecodeBin:decodebin0.GstGhostPad:sink.GstProxyPad: proxypad0: caps = "audio/x-raw\,\ format\=(string)S16LE\,\ layout\=(string)interleaved\,\ rate\=(int)44100\,\ channels\=(int)2 \,\ 通道掩码\=(位掩码)0x0000000000000003" /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind.GstPad:src: caps = "audio/x-raw\,\ format\=(string)S16LE\,\ layout\=(string)interleaved\,\ rate\=(int)44100\,\ channels\= (int)2\,\ channel-mask\=(bitmask)0x0000000000000003" 重新分配延迟... /GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps = "audio/x-raw\,\ layout\=( string)interleaved\,\ rate\=(int)44100\,\ format\=(string)S16BE\,\ channels\=(int)2\,\ channel-mask\=(bitmask)0x0000000000000003" /GstPipeline:pipeline0 /GstRtpL16Pay:rtpl16pay0.GstPad:src: caps = "application/x-rtp\,\ media\=(string)audio\,\clock-rate\=(int)44100\,\ encoding-name\=(string) L16\,\ encoding-params\=(string)2\,\ channels\=(int)2\,\ payload\=(int)96\,\ ssrc\=(uint)3961155089\,\ timestamp-offset\ =(uint)725507323\,\ seqnum-offset\=(uint)20783" /GstPipeline:pipeline0/GstQueue:queue0。GstPad:src: caps = "application/x-rtp\,\ media\=(string)audio\,\ clock-rate\=(int)44100\,\ encoding-name\=(string)L16\,\ encoding -params\=(string)2\,\ channels\=(int)2\,\ payload\=(int)96\,\ ssrc\=(uint)3961155089\,\ timestamp-offset\=(uint)725507323 \,\ seqnum-offset\=(uint)20783" /GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = "application/x-rtp\,\ media\=(string)audio\,\ 时钟速率\=(int)44100\,\ encoding-name\=(string)L16\,\ encoding-params\=(string)2\,\ channels\=(int)2\,\ payload\=(int)96 \,\ ssrc\=(uint)3961155089\,\ timestamp-offset\=(uint)725507323\,\ seqnum-offset\=(uint)20783" /GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = "application/x-rtp\,\ media\=(string)audio\,\clock-rate\=(int)44100\,\ encoding-name\=(string)L16\,\ encoding-params\=(string )2\,\ channels\=(int)2\,\ payload\=(int)96\,\ ssrc\=(uint)3961155089\,\ timestamp-offset\=(uint)725507323\,\ seqnum-offset\=(uint )20783" /GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0.GstPad:sink: caps = "audio/x-raw\,\ layout\=(string)interleaved\,\ rate\=(int)44100\,\ format\= (string)S16BE\,\ channels\=(int)2\,\ channel-mask\=(bitmask)0x0000000000000003" /GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps = "audio/x-raw\, \ format\=(string)S16LE\,\ layout\=(string)interleaved\,\ rate\=(int)44100\,\ channels\=(int)2\,\ channel-mask\=(bitmask)0x0000000000000003 " /GstPipeline:pipeline0/GstDecodeBin:decodebin0.GstDecodePad:src_0.GstProxyPad:proxypad1: caps = "audio/x-raw\,\ format\=(string)S16LE\,\ layout\=(string)interleaved\,\ rate \=(int)44100\,\ 通道\=(int)2\,\ 通道掩码\=(位掩码)0x0000000000000003" /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind.GstPad:sink: caps = "audio/x-raw\,\ format\=(string)S16LE\,\ layout \=(string)interleaved\,\ rate\=(int)44100\,\ channels\=(int)2\,\ channel-mask\=(bitmask)0x0000000000000003" /GstPipeline:pipeline0/GstDecodeBin:decodebin0.GstGhostPad: sink: caps = "audio/x-raw\,\ format\=(string)S16LE\,\ layout\=(string)interleaved\,\ rate\=(int)44100\,\ channels\=(int)2 \,\ 通道掩码\=(位掩码)0x0000000000000003" /GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0: 时间戳 = 725507323 /GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0: seqnum = 20783\ format\=(string)S16LE\,\ layout\=(string)interleaved\,\ rate\=(int)44100\,\ channels\=(int)2\,\ channel-mask\=(bitmask)0x0000000000000003 " /GstPipeline:pipeline0/GstDecodeBin:decodebin0.GstGhostPad:sink: caps = "audio/x-raw\,\ format\=(string)S16LE\,\ layout\=(string)interleaved\,\ rate\=(int )44100\,\ 通道\=(int)2\,\ 通道掩码\=(位掩码)0x0000000000000003" /GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0: 时间戳 = 725507323 /GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0: seqnum = 2078\ format\=(string)S16LE\,\ layout\=(string)interleaved\,\ rate\=(int)44100\,\ channels\=(int)2\,\ channel-mask\=(bitmask)0x0000000000000003 " /GstPipeline:pipeline0/GstDecodeBin:decodebin0.GstGhostPad:sink: caps = "audio/x-raw\,\ format\=(string)S16LE\,\ layout\=(string)interleaved\,\ rate\=(int )44100\,\ 通道\=(int)2\,\ 通道掩码\=(位掩码)0x0000000000000003" /GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0: 时间戳 = 725507323 /GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0: seqnum = 2078\通道\=(int)2\,\通道掩码\=(位掩码)0x0000000000000003“/GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0:时间戳= 725507323 /GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0:seqnum = 20783\通道\=(int)2\,\通道掩码\=(位掩码)0x0000000000000003“/GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0:时间戳= 725507323 /GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0:seqnum = 20783
我认为 rx 管道是错误的,但我找不到解决方案。请告诉我如何制作管道。
PS:我尝试了以下命令,然后 rx 播放麦克风音频!这意味着接收设备无法播放 L16 音频?
tx: gst-launch-1.0 -v alsasrc device="hw:0" !解码器!音频转换!音频重采样!阿拉文克!rtppcmapay !队列 !udpsink 主机=239.0.0.1 自动多播=真端口=5004
rx: gst-launch-1.0 udpsrc 多播组=239.0.0.1 端口=5004 caps="application/x-rtp, media=(string)audio, clock-rate=(int)8000, encoding-name=(string) PCMA,编码参数=(字符串)2,通道=(整数)1,有效载荷=(整数)8“!rtppcmadepay!阿拉法德!阿尔萨西克
gstreamer - 无法使用 avenc_g722 为 Gstreamer 应用程序编码 G722:捕获 SIGSEGV
我想使用 gstreamer-1.0 在 G722 编解码器中流式传输音频。当我使用以下命令时,出现了 SIGSEGV。
tx: gst-launch-1.0 -v alsasrc device="hw:0" !解码器!音频转换!音频重采样!avenc_g722 !假水槽
结果:
/GstPipeline:pipeline0/GstDecodeBin:decodebin0.GstGhostPad:sink: caps = "audio/x-raw\,\ format\=(string)S16LE\,\ layout\=(string)interleaved\,\ rate\=(int) 44100\,\ 通道\=(int)2\,\ 通道掩码\=(位掩码)0x0000000000000003"
抓到 SIGSEGV
#0 0x76d28c20 in poll () from /lib/libc.so.6
#1 0x00000000 在 ?? () 0:00:02.291262125 957 0x1122d50 警告
alsa gstalsasrc.c:868:xrun_recovery: xrun recovery -32: Broken pipe Spinning. 请运行“gdb gst-launch-1.0 957”继续调试,Ctrl-C 退出,或 Ctrl-\ 转储内核。
我检查了gdb,但结果如下。
警告:无法找到与inferior线程库匹配的libthread_db,将无法进行线程调试。
警告:无法找到与inferior线程库匹配的libthread_db,将无法进行线程调试。/lib/libc.so.6 的 poll() 中的 0x76c9bc20
我能做些什么来解决这个问题?avenc_g722 有错误吗?
有g722编码器吗?我只知道 ffenc_g722 但我认为 gst-ffmpeg 仅适用于 gstreamer-0.10,所以我不能使用它。
环境:
操作系统:yocto Morty CPU:imx6ull (16bit)
linux - Gstreamer udpsrc 插件查询
我正在开发一个基于 IP 流的媒体播放器。我正在使用以下管道:
源:
下沉:
这是概念的证明。现在,我们希望有一个可以执行相同操作的应用程序,但在没有流媒体或接收器没有数据时稍作调整,我们需要切换到离线基础媒体播放器,这意味着离线播放一组视频和当 udp 端口上有数据时,切换到流式传输。
以下是我的查询:
- 通过 IP 播放视频后,有什么方法可以确定流媒体是否已完成
- 有没有办法找出没有流媒体发生。
请帮忙。如果您需要更多详细信息,我随时准备为您提供帮助
video - 使用 GStreamer 将文件中的 KLV 多路复用到 MPEG-TS
使用 GStreamer(版本 1.12.4)我一直在使用以下语句成功地从 jpegs 创建视频:
正如声明所暗示的,这会创建 H.264 编码的 MPEG-TS 文件,这些文件以 25 fps 的速度使用 jpeg 文件。
我目前也有类似命名的 klv 文件,并希望将它们混合到相同的输出 ts 文件中。我的最佳尝试(基于其他示例)看起来像这样:
这会导致相当多的语法错误:
如果这样可以简化答案,我也不介意以不同的格式提供 KLV 数据。我还尝试过添加队列语句以及在不同位置进行多路复用,但到目前为止,这会导致相同的错误消息。
有什么想法、资源或其他建议可以让我找到正确的多路复用 KLV 方向吗?
git - 从 GIT 源构建后 Gstreamer 出现问题
我已经使用以下命令和创建的应用程序目录下载了 Gstreamer 的 GIT 存储库
使用以下命令构建源代码
更新了所需的环境变量如下
我可以看到gst-launch-1.0
二进制文件出现在我的环境中。现在我正在使用以下管道
给我以下错误
你能告诉我我缺少哪些步骤吗?任何帮助都是适用的。
谢谢
gstreamer-1.0 - 如何在单个应用程序中通过 udp 播放和流式传输视频文件
我需要一个应用程序来打开视频文件,在屏幕上显示并通过 udp 流式传输到网络以供其他客户端使用。
可能吗