8

我正在编写一个使用 Python Gstreamer 绑定来播放音频的应用程序,但我现在也在尝试解码音频——也就是说,我想使用 a 读取数据decodebin并接收原始 PCM 缓冲区。具体来说,我想以增量方式读取文件的块,而不是将整个文件读入内存。

一些具体问题:如何使用 Gstreamer 完成此任务?特别是pygst?我需要使用特定的“接收器”元素从流中读取数据吗?是否有从pygstBuffer对象读取数据的首选方法?如何控制我使用数据的速率(而不是仅仅进入“主循环”)?

4

1 回答 1

5

要在您的应用程序中取回数据,推荐的方法是appsink

基于像这样的简单音频播放器(并用 decodebin 和 capsfilter 替换 oggdemux/vorbisdec 为 caps = "audio/x-raw-int"),将 autoaudiosink 更改为 appsink,并将"new-buffer"信号连接到 python功能 + 将“发射信号”设置为 True。该函数将接收解码的 PCM/int 数据块。解码速率将取决于您可以解码和消费的速率。由于新缓冲区信号位于 Gstreamer 线程上下文中,您可以在该函数中休眠/等待以控制或减慢解码速度。

于 2010-08-18T09:40:56.827 回答