【问题标题】:Use (Python) Gstreamer to decode audio (to PCM data)使用 (Python) Gstreamer 解码音频(到 PCM 数据)
【发布时间】:2010-08-17 23:23:39
【问题描述】:

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

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

【问题讨论】:

标签: python audio decode gstreamer pcm


【解决方案1】:

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

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

【讨论】:

  • 谢谢!我不知道appsink。这很有帮助!
  • 尝试此操作后的一个附加说明(供将来参考):您似乎需要将appsink的“同步”属性设置为false,以便尽快获取数据。否则,您将实时使用数据。
  • 一个细节:appsink 的 Python 绑定不绑定 gst_appsink_pull_buffer() 方法;相反,您需要调用 appsink.emit('pull-buffer')。
猜你喜欢
  • 1970-01-01
  • 2017-01-07
  • 2014-05-29
  • 2014-08-07
  • 1970-01-01
  • 2019-09-24
  • 2015-05-05
  • 2014-05-02
  • 2016-09-05
相关资源
最近更新 更多