Как изменить битрейт аудио кодирования в Gstreamer в состоянии PLAYING?
Я хочу преобразовать файл FLAC в файл MP3 (и Vorbis, во второй раз).
Эти потоки MP3/Vorbis затем передаются в сыром виде на второе устройство, которое их декодирует.
В зависимости от качества передачи, я хочу иметь возможность изменять битрейт на лету.
Изменение должно быть без пропусков (отсюда и "в состоянии PLAYING" в заголовке).
Конкретные кодеры
lamemp3enc
а такжеvorbisenc
(и не может быть изменено).
Насколько мне известно, изменение битрейта во время игры на самом деле невозможно с этими кодеками.
Но я думаю, что есть чистые и простые способы изменить битрейт без какого-либо пробела в потоке: я хотел бы узнать о любом из них.
(NB: я написал любой, не все, я не прошу "лучший" способ, я не прошу рецензию, я просто хочу что-то, что работает.)
1 ответ
Прочитайте это..
Ты сможешь:
- заблокировать элемент перед lamemp3enc
- сбросить закодированные кадры в очередь с EOS, отправленным в lame, и сбросить EOS, когда он выйдет из lame
- затем установите lamemp3enc в состояние NULL
- изменить параметры
- установите lame на PLAYING или PAUSED - это снова добавит новые данные, используя новый битрейт
- проверьте, когда хромает в игре, а затем вы знаете, что все работает
- не должно быть пробела, так как в очереди много старых буферов, которые она отправляет вперед, когда вы делаете ведьму
Вы можете вдохновиться примером из приведенной выше ссылки. Однако вы не удаляете и не добавляете новые элементы. Не забудьте установить его в состояние NULL, так как он отбросит все внутренние состояния (надеюсь, если он не глючит), Тогда вы просто измените параметры с g_object_set
...
Также я никогда не делал этого, поэтому вы также можете спросить на IRC#gstreamer на freenode, если вы застряли или не уверены.
НТН