问题标签 [python-gstreamer]

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.

0 投票
1 回答
380 浏览

pygame - 缓冲区长度不正确 gstreamer

我有以下函数处理包含 GStreamer 提供的视频帧的缓冲区对象

但是,在运行此代码时,pygame 会崩溃,因为提供的缓冲区大于所需的大小,并且此大小需要匹配。我知道这可能是由于播放的电影编码错误(因为大多数电影运行良好),但有没有办法解决这种意外情况?有没有办法将缓冲区的大小调整为正确的大小?我试图以所需的长度切断缓冲区的尾部,然后播放电影,但输出已损坏。

0 投票
1 回答
390 浏览

python - Gstreamer总线调用icw python multiprocessing导致Ubuntu中的X服务器错误

我已经按照此处的说明在 gstreamer 中编写了一个视频播放器: https ://github.com/dschreij/media_player_gst/blob/master/media_player_gst.py

在 Windows 中,它在“正常”和多处理模式下工作正常(即所有 Gstreamer 部件和播放器对象都是在单独的进程中创建的)。然而,在 Ubuntu 13.10 中,当播放器在自己的进程中运行时,调用

导致以下错误并使整个程序(也是父进程)崩溃:

否则,播放器在新进程中运行良好。只有调用 self.bus.peek() 才会让它崩溃。我需要检查总线队列本身的事件,因为将总线连接到处理其消息的函数似乎也不起作用(再次仅在 Ubuntu 中!)

基本上我只使用总线来查看是否已经到达流的结尾(gst.MESSAGE_EOS),所以如果可以在不使用 playbin2 总线的情况下确定这一点,我也可以使用这样的解决方案。有没有人可以帮助我解决这个问题?

0 投票
2 回答
535 浏览

python - 如何在 Cython 中编写 GStreamer 插件

我想制作一种新型音频过滤器的原型。目前我使用 GStreamer 返回我的音频缓冲区,并使用 Cython 对其应用过滤器。然后我将结果发送回 GStreamer。

一切都包含在 python 主代码中,GStreamer 访问是使用pygst完成的。使用 Cython 进行原型设计非常棒,因为它会在代码运行时自动重新编译,而且非常高效。

但是,如果我可以使用我的 Cython 文件来生成 GStreamer 原生插件(这些是用 C 编写的),我觉得这会更好。

您对如何实现这一目标有想法吗?

0 投票
1 回答
2441 浏览

opengl - 提高 OpenGL 渲染速度

我构建了一个小型视频播放器,它使用 GStreamer 从电影中抓取帧(作为字符串/字节数组),然后将每个帧渲染到 OpenGL 纹理。最高可达 30 fps 1080p 电影,但当我尝试 60 fps 电影时,它跟不上,视频在音频流上滞后!当我使用“gst-launch playbin2”播放视频时,它运行良好,因此视频以足够的速度解码。

我已经做了一些测量,如果问题在于使用框架更新纹理将框架实际绘制到屏幕上,就会出现问题。我正在使用老式的 GL_BEGIN/QUADS/END 方法(因为我不知道更好)来做绘图部分,但这可能是瓶颈吗?我认为替代和更新的方法(GL_TRIANGLE_STRIP、VBOs/FBOs 或 glDrawArrays/Elements)仅在处理大量纹理/多边形时才有用,而不是我想要做的事情,或者我错了?

有没有人对如何在这种特定情况下提高渲染速度有任何提示?


更新:感谢这里给出的一些好的建议(使用 glTexSubImage2D 而不是 glTexImage2D;使用显示列表),我的代码现在如下所示。有一些性能改进,但影片的运行速度仍然有点太慢,无法达到 60 fps(仅差一点;只需要再优化一点)。

现在渲染几帧的时间测量的输出如下:

尽管更新纹理似乎花费了最大的时间,即使使用 glTexSubImage2D(这似乎是合理的,因为这涉及将数据从系统内存传输到 gpu)我想我会尝试通过使用 VBO/FBOs/ 来提高性能顶点数组而不是使用 glBegin/End 以立即模式绘制

0 投票
1 回答
2491 浏览

python - 如何在 gstreamer 中录制预定义时间的音频?

我有使用“autoaudiosrc”元素录制音频的 python gstreamer - 1.0 代码。我的问题是在“预定义”几秒钟后停止管道,最好我想以 gstelement 格式添加它。

当前用于记录的管道:

对应的python代码

~

0 投票
1 回答
2174 浏览

python - 使用 gstreamer/Python (gnonlin?) 剪切部分视频

我有一个视频文件,我想剪掉一些场景(由时间位置或帧标识)。据我了解,使用 gnonlin 应该是可能的,但到目前为止,我无法找到一个示例(最好使用 Python)。如果可能,我不想修改视频/音频部分(但转换为 mp4/webm 是可以接受的)。

我是否正确地认为 gnonlin 是 gstreamer 宇宙中的正确组件?此外,我很高兴提供一些如何解决问题的指针/食谱(gstreamer 新手)。

0 投票
1 回答
2611 浏览

linux - Gstreamer - opus caps 解析错误,有人知道如何解决吗?

我的解析有什么问题?它未能正确解析作品大写(但不是 speex)并导致它无法正常工作,任何人都知道,我必须在其中添加更多 \ 或 / 或 " 或 ' 符号以使其有效大写?

0 投票
1 回答
975 浏览

python - Gstreamer 编辑服务。播放真实的视频文件。GESAsset 元素(从 Python 到 C 的翻译)

我正在尝试使用 GES 播放视频文件。我发现 python 绑定示例使用 gstreamer/Python(gnonlin?)剪切了部分视频,我想将其翻译成 C 语言。

这是我想翻译成 C 的 python 代码的摘录:

到目前为止,我已经翻译成 C 代码:

问题是函数 ges_layer_add_asset 接受类型 GESAsset 资产,而我有类型 GESUriClipAsset 资产。

在 GES 文档页面http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-editing-services/html/GESUriClipAsset.html#ges-uri-clip-asset-request-sync似乎没有可以替代 ges_uri_clip_asset_request_sync (const gchar *uri, GError **error) 函数。有什么办法可以从视频文件 uri 构造 GESAsset?也许还有其他方法可以使用 GES 播放视频文件?

0 投票
1 回答
1154 浏览

python-2.7 - id3demux“流媒体任务暂停,原因未链接(-1)”在某些 MP3 上

我正在 Python-GStreamer 中创建一个播放器,在一个相当过时的 GStreamer 0.10.32 上,如下所示:

它工作正常,但我从来没有从玩家的总线上收到标签消息。我确实需要 id3 标签。因此,我将 caps filter ( audio/mpeg, mpegversion=1, layer=3)替换为id3demux,并且某些 MP3 上出现错误:“ streaming task paused, reason not-linked (-1)”。

identity将or放在queue前面并链接到它们对 . 没有帮助id3demux

出于某种原因,mad元素在我的平台上不可用。

为什么我的第二个替换不起作用,或者还有其他方法可以从流中获取 id3 标签?

编辑:显然,这是由特定文件引起的。还不知道这些 MP3 有什么特别之处。当我简单地使用gst-launch.

使用 GST_DEBUG=2,我得到:

id3demux用大写过滤器替换会有所帮助,但那时我从来没有得到标签。

0 投票
0 回答
3006 浏览

python - 如何在 gstreamer 中设置频道位置/频道掩码?

我试图从 a 中获取 28 个通道,jackaudiosrc但是一旦我连接了一个deinterleave元素,源将回退到没有任何通道掩码的 2 通道设置。我设置频道掩码的尝试是徒劳的。

这是发生的事情:

这是产生该输出的 Python 代码:

我还尝试直接设置输出的上限而不是使用过滤器,但这也没有做任何事情。

这是最后一个 bin-to-dot-file 行的输出(点击放大)。

0.10 的点文件输出

这是一条gst-launch在没有实际多声道音频设置的情况下工作但实际上并没有重现错误的行,我相信因为该interleave元素默认情况下正确设置了 NONE 上限,而jackaudiosrc没有正确设置。也许它仍然可以帮助人们解决由于技术限制而无法自己复制的问题。感谢http://tristanswork.blogspot.de/2008/08/multichannel-audio-with-gstreamer.html我改编的原始发布线。

编辑:我现在尝试在 GStreamer 1.x 中做同样的事情。数据类型不再被接受,所以这是我在查看其他人直接将通道位置写入函数tuple后想出的。get_caps_from_string

文本形式和图形的输出惊人地相似:

1.4 的点文件输出