Обнаружить тишину в полезной нагрузке RTP
Я столкнулся с проблемой инфраструктуры ToIP на основе Asterisk. Иногда мой телефон получал "пустой" RTP (полезная нагрузка целиком заполнена 5d).
Я просмотрел RFC (3551, 3389) и не могу найти / понять соответствующие ответы.
Я обнаружил, что две веб-страницы имеют ту же проблему, что и я:
https://www.wireshark.org/lists/ethereal-users/200402/msg00142.html
http://www.giacomovacca.com/2013/05/the-sound-of-silence-encoded-with-g711.html
Так:
- Кто-нибудь знает, где официальный ответ?
- Кто решил, что заполнение 0x55 или 0xd5 не будет звучать?
- Кроме того, кто может объяснить мне, почему 0x55 или 0xd5 составляют 0?
Спасибо!
1 ответ
Это происходит из процедуры PCM аудиокодека G.711.
В G.711 определены два логарифмических кодека, используемых для аудиоданных ИКМ (импульсная кодовая модуляция): a-law и u-law. Алгоритмы кодеков основаны на свойствах восприятия человеческого уха - слабые сигналы маскируются сильными.
После сжатия (от 14-битной выборки по u-закону и 13-битной выборки по a-закону) до 8 битов последние 7 битов, кроме знакового бита, инвертируются. Неинвертированный бит называется знаковым битом. Эта инверсия битов увеличивает плотность битов в системах передачи, которые помогают схемам синхронизации и восстановления тактового сигнала в приемнике.
Идеальный шум канала заставляет биты переключаться между 01111111 (0x7F) и 11111111 (0xFF) в u-законе и между 01010101 (0x55) и 11010101 (0xD5) в a-законе. Мы обычно используем именно кодирование по закону.
В спецификации кодека отрицательные звуковые образцы дополняются единицами, чтобы выровнять динамические диапазоны положительных и отрицательных чисел. Сжатые отрицательные и положительные значения одинаковой величины различаются по знаку.
Более подробное описание с примерами PCM вы можете прочитать там
Также вы можете прочитать спецификацию.