Gstreamer在PLAYING状态下如何改变音频编码的码率?

How to change the bitrate of audio encoding in Gstreamer in the PLAYING state?


据我所知,这些编解码器实际上无法在播放时更改比特率。

但我想有一些简单明了的方法可以改变比特率,而不会在流中引入任何间隙:我想了解其中的任何一种。

(注意:我确实写了 any,而不是 all,我不是在要求 "best" 方式,我我不要求评论,我只想要有用的东西。)

通读 this ..

你会:

  • lamemp3enc 之前的块元素
  • 将编码的帧与发送到 lame 的 EOS 一起冲入队列,并在 EOS 从 lame 出来时丢弃 EOS
  • 然后将 lamemp3enc 设置为 NULL 状态
  • 更改参数
  • 将 lame 设置为播放或暂停 - 这将使用新比特率使用新数据再次预播放它
  • 检查 lame 何时播放,然后您就知道一切正常
  • 应该没有间隙,因为队列有很多旧缓冲区,它会在您执行
  • 期间向前发送这些缓冲区

你可以用上面 link 的例子来启发自己。但是你没有做任何删除和添加新元素。不要忘记将它设置为 NULL 状态,因为它会丢弃所有内部状态(如果它不是越野车,希望如此)。然后你只需更改参数 g_object_set...

此外,我从未这样做过,所以如果您遇到困难或不确定,也可以在 freenode 的 #gstreamer 的 IRC 上提问。

HTH