Я новичок в Gstreamer, разрабатываю приложение для записи звонков. Я использую конвейер gstreamer так:
udpsrc port=5815 caps="application/x-rtp,channels=(int)1,media=(string)audio,payload=(int)18,clock-rate=(int)8000,encoding-name=(string)G729" ! rtpg729depay ! filesink location=audio.g729
Для приложения кодека G.729 B, в случае периодов молчания во время вызова, я получаю полезную нагрузку CNG, которая является прерывистой (dtx), то есть данные rtp не передаются непрерывно в течение полных периодов молчания. Поэтому мне нужно вручную вставлять данные паузы в конвейер или аудио-файл, генерируемый при наличии периода паузы. У меня есть две проблемы для решения:
- Как узнать, когда наступит тишина.
- Как передать некоторые данные тишины вручную в конвейер.
Я пытался использовать датчик для добавления обратного вызова для передачи данных в конвейере, но не смог получить площадку с помощью gst_element_get_static_pad ().
Я могу манипулировать данными gstbuffer и заменять полезную нагрузку тишины некоторыми тихими аудиобайтами из кода rtpg729depay (в хорошем плагине), но это работает только тогда, когда мы получаем rtp тишины. Мы также должны продолжать вставлять данные молчания в полезную нагрузку или файл, когда нет пакетов rtp, переданных до получения следующего пакета (тишина или обычный).
Любая помощь приветствуется. Заранее спасибо!