1
  • 我想将 FLAC 文件转换为 MP3(和 Vorbis,第二次)文件。

  • 然后将这些 MP3/Vorbis 流原始传输到解码它们的第二个设备。

  • 根据传输质量,我希望能够即时更改比特率。

  • 更改必须是无缝的(因此标题中的“处于播放状态”)。

  • 特定的编码器是lamemp3encvorbisenc(并且不能更改)。


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

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

(注意:我确实写了任何,而不是全部,我不是要求“最好”的方式,我不是要求审查,我只是想要一些有效的东西。)

4

1 回答 1

2

通读这个..

你会:

  • lamemp3enc 之前的块元素
  • 将编码帧刷新到队列中,并将 EOS 发送到 lame 并在 EOS 出现 lame 时丢弃它
  • 然后将lamemp3enc设置为NULL状态
  • 更改参数
  • 将 lame 设置为 PLAYING 或 PAUSED - 这将使用新比特率使用新数据再次预卷
  • 检查la脚的播放时间,然后您就知道一切正常
  • 应该没有间隙,因为队列有很多旧缓冲区,在你做女巫时它会向前发送

您可以通过上面链接中的示例来启发自己。但是,您并没有进行任何删除和添加新元素的操作。。不要忘记将其设置为 NULL 状态,因为它会丢弃所有内部状态(如果它不是错误的,那么希望它) . 然后您只需使用g_object_set...更改参数

另外我从来没有这样做过,所以如果你被卡住或不确定,你也可以在 freenode 的#gstreamer 的 IRC 上询问。

高温高压

于 2016-08-11T07:13:15.343 回答