问题标签 [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.
gstreamer-1.0 - 如何动态修改 videomixer sink pad alpha 值
我想拍摄一个视频文件并覆盖淡入淡出的字幕。
我刚刚开始学习如何使用 Gstreamer。
到目前为止,我已经设法将一个管道组合在一起,该管道将textrender元素绘制的字幕流合成到带有videomixer元素的原始视频流上。不幸的是,textrender 及其姊妹元素textoverlay没有淡入/淡出功能。
videomixer sink pad 确实具有 alpha 属性。现在,我已将名为 videomixer.sink_1 的 pad 的 alpha 值设置为 1.0。这是该管道的命令行版本:
我正在寻找一种随时间动态修改该 alpha 值的方法,以便我可以使字幕组件在适当的时间淡入和淡出。(我将分别解析 SRT 文件以确定淡入淡出何时开始和结束。)
我正在研究 GstBin C API(我的实际代码是 Python)。我认为在使用 Gst.parse_launch() 创建管道后,我可以使用 gst_get_bin_by_name() 获取任何命名元素,然后使用该值访问焊盘“sink_1”。
一旦我做到了这一点,我是否能够从接收计时器事件的事件处理程序中动态修改该 alpha 值?videomixer 元素会立即响应该垫属性的变化吗?有没有其他人这样做过?
我在这里找到了部分答案:https ://stackoverflow.com/a/17331845/270511但他们没有告诉我这在管道运行后是否会起作用。
qt - gstreamer-1.0 通过 GUI 停止和启动录制管道
我正在尝试基于 gstreamer 框架为我自己的定制板编写简单的录像机,并使用 ARM 处理器和 Wayland+Qt 作为窗口子系统。我用 rec_start 槽和 rec_stop 公共方法创建了类 RecordBin:
这是我在主窗口中用于播放/停止按钮单击的插槽:
RecordBin 类在单独的线程中工作(它通过 QThread 实现),因此 glib 主循环上下文不会阻塞 Qt 主窗口。我不能使用rec_stop 方法作为槽,因为rec_loop 阻塞了消息处理,并且当录制开始时,它不能通过信号停止。但是直接调用 rec_stop 是线程不安全的。
谁能帮我解决两个问题:1.我应该如何从另一个线程更改管道状态?2. 通过将管道状态更改为NULL来停止录制是否正确?可能我应该在总线上发送 EOS 信号并处理它?
gstreamer - InterpolationControlSource 与 Gst.parse_launch()
我的应用程序(在 Python 中)加载 Gstreamer 库,解析并启动管道规范,该规范将 SRT 文件中的字幕合成到 MP4 文件中准备好的视频之上,然后创建一个与“alpha”属性绑定的控制源链接到字幕图像源的videomixer元素的 sink pad 。
首先,我写了一个小型的概念验证,它的工作原理就像一个冠军。如果您可以使用 X-windows 服务器(例如在 Unix 或 Linux 中)运行它,您将看到绿色背景上的黑色方块。一秒钟后,黑色方块在几秒钟内逐渐消失。
我的应用程序有一个更复杂的管道。以下是相关代码的摘要:
两个管道之间的一个区别是,在第一个示例中,videomixer pad 是request pad。但在真正的应用程序中,它们变成了静态垫。并且日志语句中只存在“sink_1”。
我不确定为什么会这样,或者它是否有所作为。
当我在 Web 服务器中运行应用程序并在浏览器中签入时,会出现字幕,但不会淡入或淡出。
我检查了时间戳,它们看起来不错。它们以纳秒 (10^9) 为单位。
那么,我还有什么石头没有翻过来?
raspberry-pi - flvmux 没有以与音频相同的速率提取视频
我有一个管道,旨在从 C920 相机捕获音频和视频,对其进行一些非常简单的处理(低 cpu 要求),然后将其重新压缩并将其复用到文件中。
这是管道的大致轮廓:
不要担心我的“简单处理”区域。我的整体 CPU 低于 25%。
我发现,Q3 和 Q4 慢慢开始填满,直到达到阈值,然后我的音频变得断断续续(我从 alsasrc 收到警告“下游没有足够快地消耗缓冲区”)。我可以将泄漏放在队列上,但这很难解决问题。
当我的管道正在运行时,这就是我的队列的样子(当前级别时间,以毫秒为单位)
=== 实验 ===
我去掉了管道的黄色腿,这样我就只捕捉视频了,结果更好。我没有一直在“增长”的队列 - 输出视频非常完美。
此外,我尝试了以下管道(我在图中省略了队列),完全成功 - 视频录制了至少 10 分钟,没有任何问题。
=== 问题 ===
到底是怎么回事?
我的猜测是,因为第三季度(视频输出)正在填满,那么音频一定会减慢速度。因为 Q4 正在填满,而不是 Q5 - 这一定意味着 alsa 产生音频的速度比 aac 编码器压缩它的速度要快 - 这是正确的吗?但是,我的 CPU 使用率非常低 - 我尝试使用 2 个 aac 编码器(voaacenc 和 avenc_aac)和一个 MP3 编码器,都存在相同的问题。
======== 更新 =========
我在音频和视频之后(直接在之后)放置了几个标识元素,并绘制了它们输出的 PTS。您可以看到它们很快就开始彼此疏远。到视频为 30 秒时,音频远远落后于 21 秒。这是一张图表
======== 更新 2 =========
我有第二台相机,然后把它换了,问题就消失了。音频和视频 PTS 值保持同步至少 25 分钟。这款新相机的不同之处在于它是经过改装的 C920,装有定制镜头。镜头碰巧完全失焦 - 这就是修复 PTS 漂移的原因(如果我聚焦自定义镜头,我会得到相同的 PTS 漂移)。
所以 - 问题发生了一点变化:为什么对焦的 C920 相机的 PTS 漂移如此之大?注意:我正在关闭自动曝光,并将绝对曝光值设置为默认值 250。但是我希望能够使用自动曝光......
streaming - 如何使用 Python 和 Gstreamer 创建 MPEG2 传输流管道
在开发流式音频应用程序时,我使用了 gst-launch-1.0 命令行工具来生成用于测试的 MPEG 传输流。这按预期工作(我能够从一个简单的 http 服务器提供流并使用 VLC 媒体播放器听到它)。然后,我尝试在 Python gstreamer 代码中复制该流的编码部分。连接服务器的 Python 版本正常,但听不到声音。我试图理解为什么命令行实现有效,但 Python 没有。我正在使用 Mac OS 10.11 和 Python 2.7。
有效的命令行如下:
创建 gstreamer 管道的 Python 代码如下。它实例化没有产生任何错误,并成功连接到 http 服务器,但通过 VLC 听不到声音。我验证了 Python 代码中的 AppSrc 是否正常工作,方法是将它与直接播放音频的单独 gstreamer 管道一起使用。这工作得很好。
我的问题是,我在 Python 中实现的 gstreamer 管道与命令行管道有何不同?更一般地说,你如何调试这种事情?gstreamer 是否有任何“详细”模式?
谢谢。
c - 如何在 C 中的 gstreamer 中定义 videoparse 元素的“帧率”属性
我目前正在使用 C 使用 gstreamer 开发应用程序。我包含了所有 gstreamer 库,包括路径、glib 路径、库路径等。当我尝试使用 Gstreamer lib 构建应用程序以在屏幕上播放原始文件时,一切正常。
但是,我想设置这里描述的 videoparse 元素的“帧率”属性:
但是帧速率的类型是 GstFraction。但是 Gstreamer 库中没有 GstFraction 数据类型。同样从链接中,我无法重定向到 GstFraction 的描述...(与 GstVideoFormat 不同,我在标题 gst/video/video.h 下找到了它)
我搜索了很多网络帖子,都是关于gstreamer-sdk的python API的。
java - 链接两个 textoverlay 元素的 Java gstreamer 不起作用
我有一个用java编写并建立在gstreamer 1之上的rtsp播放器应用程序。当我尝试在播放视频的顶部显示文本时,管道中只有一个textoverlay元素,它工作正常。但我需要显示不同的文本在窗户的所有角落。
第一个想法是我认为实际上是从命令行使用 gst-launch-1.0 链接覆盖元素,如下所示;
当我尝试使用 java 构建相同的管道时,如下所示;
我得到一个空白画布。使应用程序至少工作的唯一方法是从 linkMany 和 addMany 行中删除其中一个覆盖,如下所示;
那么如何在视频画布上放置多个静态覆盖字符串?
raspberry-pi - 使用 gstreamer 收听来自 kurento 媒体服务器的音频流
我正在尝试将音频流从 A 点发送到 kurento 媒体服务器,并使用 gstreamer 在 B 点接收该音频流。我试图实现的应该是这样的:
(A点)----使用GSTREAMER发送音频--->(KURENTO)----音频流----->(B点)---使用GSTREAMER获取音频----!
到目前为止,我编写了以下代码:
我从 kurento 服务器获得了 outRtpEndpoint 的 sdpOffer,它看起来像这样:
为了收听该流,我尝试做什么并不重要,它只是不想工作。我究竟做错了什么 ?
我真的很感激任何帮助。
谢谢 !!!
audio - GStreamer 无法获取 WAV 文件持续时间
我正在 Vala 中编写一个使用 GStreamer 加载和播放 WAV 文件的类。
我使用filesrc
、wavparse
、audioconvert
和alsasink
pad 来播放文件。
在该load
方法中,我尝试通过调用Gst.Element.query_duration()
我创建的管道来获取样本的持续时间,但是每次我尝试这样做时,它都会返回false
并将我引用的值设置为0
.
我知道必须预先滚动管道才能获得其持续时间,尽管我尝试通过将其状态设置为来预先滚动管道Gst.State.PAUSED
,但Gst.Element.query_duration()
仍然失败。
我应该更改什么才能成功获取已加载的 WAV 文件的持续时间?
android - Qt for Android - 未定义对 ANativeWindow_fromSurface 的引用
我是 Qt 的初学者,
我试图使用 Qt 制作 Android 应用程序并使用 GStreamer(不是 QtGStreamer)通过 RTSP 流式传输视频。
但是当我使用
获取 ANativeWindow 时
出现错误:undefined reference to 'ANativeWindow_fromSurface'
我已经QT += androidextras
在 .pro 和
#include<android/native_window.h>
#include<android/native_window_jni.h>
.cpp 文件中添加了,我不知道我还应该做什么。
有没有人可以帮我解决这个问题?
谢谢。