adr*_*ian 8 python audio decode pcm gstreamer
我正在编写一个使用Python Gstreamer绑定来播放音频的应用程序,但我现在还试图解码音频 - 也就是说,我想使用a读取数据decodebin并接收原始PCM缓冲区.具体来说,我想逐步读取文件的块,而不是将整个文件读入内存.
一些具体问题:如何通过Gstreamer实现这一目标?特别是pygst?是否需要使用特定的"接收器"元素来从流中读取数据?有没有从pygst Buffer对象读取数据的首选方法?如何控制消耗数据的速率(而不仅仅是输入"主循环")?
要在应用程序中恢复数据,推荐的方法是appsink.
基于像这样的简单音频播放器(并通过decodebin&capsfilter用caps ="audio/x-raw-int"替换oggdemux/vorbisdec),将autoaudiosink更改为appsink,并将"new-buffer"信号连接到python function +将"emit-signals"设置为True.该函数将接收已解码的PCM/int数据块.解码速率取决于您可以解码和使用的速率.由于新缓冲区信号位于Gstreamer线程上下文中,因此您只需在该函数中休眠/等待即可控制或降低解码速度.