【问题标题】:How to change the bitrate of audio encoding in Gstreamer in the PLAYING state?如何在播放状态下更改Gstreamer中音频编码的比特率?
【发布时间】:2016-12-17 04:24:14
【问题描述】:
  • 我想将 FLAC 文件转换为 MP3(以及 Vorbis,第二次)文件。

  • 这些 MP3/Vorbis 流随后会以原始方式传输到第二个解码它们的设备。

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

  • 更改必须是无缝的(因此标题中的“in the PLAYING state”)。

  • 具体编码器为lamemp3encvorbisenc(不能更改)。


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

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

(注意:我确实写了 any,而不是 all,我不是要“最好”的方式,我不是要评论,我只是想要有用的东西。)

【问题讨论】:

    标签: python-3.x audio gstreamer vorbis lamemp3


    【解决方案1】:

    通读this ..

    你会:

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

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

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

    HTH

    【讨论】:

    • 哦,那好多了:我目前正在使用几个GstInputSelectorGstOutputSelector,但这在很多层面上都有问题......结果比我想象的要容易:我不是用于处理探针,但它们非常强大!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2013-04-05
    相关资源
    最近更新 更多