Чтобы правильно ответить на этот вопрос, я чувствую, что некоторые ключевые концепции VoIP необходимо объяснить.
Во-первых, UDP является наиболее популярным и широко используемым методом для VoIP. Помните, что IP-сеть с коммутацией пакетов идеально подходит для передачи данных не в реальном времени и не предназначена для VoIP в реальном времени.
Для преодоления этой проблемы используется UDP. UDP является ненадежным протоколом без установления соединения. Хотя UDP потеряет пакеты, речевой звук все еще можно понять, мозг будет эффективно компенсировать ошибки. Вот почему вы все еще можете говорить с кем-то по телефону с 3 полосами сигнала.
Длина пакета и длина пакета
Потеря пакета часто происходит из-за перегрузки, поэтому величина потери пакета будет зависеть от того, насколько хорошо оборудована сеть. Потеря пакетов в VoIP с использованием UDP чаще всего происходит при длинах пакета. A длина пакета - это количество пакетов, потерянных подряд при передаче, поэтому длина пакета 3 означает 3 пакета подряд погибли.
Компенсация потери пакета
Там, где происходит потеря пакета, будут применяться простые методы компенсации потери пакета, и качество обслуживания не будет серьезно затронуто, речь все еще может быть понята даже в тех случаях, когда теряется 20-30% пакетов. Методы включают в себя:
Повтор последнего успешно
полученный пакет.
Fill in - Воспроизведение тишины в промежутке.
Сплайсинг - эффективно это может быть
думал взять удаление
разрыв, вызванный длиной взрыва
нажав на начало и конец
разрыв вместе.
- Интерполяция - Используйте знания
речь до и после
интерполировать потерянные пакеты в пределах
разрыв, например среднее значение между пакетами, успешно полученными
до и после длины пакета.
Хороший метод уменьшения размера серийных пакетов известен как чередование, и, таким образом, увеличение QoS составляет чередование . Функция блочного чередования берет речь и разбивает ее на набор пакетов. Эти пакеты загружаются в буфер в форме матрицы (например, 4 на 4), используется функция поворота или транспонирования буфера, так что пакеты расположены не по порядку. На стороне приемника обратная функция используется для переупорядочения пакетов. Этот метод прост и эффективен, см. Рисунок ниже:
альтернативный текст http://img688.imageshack.us/img688/3962/capturevnk.png
Я недавно создал небольшое приложение VoIP. по беспроводной локальной сети с использованием UDP. Я не совсем уверен в точных требованиях вашего приложения, но обычно приложения VoIP (между двумя хостами) могут быть реализованы следующим образом:
альтернативный текст http://img338.imageshack.us/img338/6566/captureec.png
На диаграмме приложение определяет свой собственный дизайн пакета. Заголовок может быть просто номером пакета (используя 1 байт) и полезной нагрузкой аудиоданных (n байтов, размер полезной нагрузки). Определение этого позволяет улучшить методы компенсации пакетов и логический поток для программирования.
TCP - это плохой выбор для VoIP по нескольким причинам. Быстрый Google 'TCP VoIP' показывает, почему первый результат поддерживает это представление .
TCP - это надежный протокол, ориентированный на соединение, это означает, что пакеты, потерянные при передаче, в какой-то момент будут повторно отправлены с другого хоста. Эта повторная передача нецелесообразна для служб реального времени и увеличит дрожание, задержку и, возможно, увеличит потери пакетов (в некоторых случаях).
Ответы на ваши вопросы
То, что я получаю, это просто шум. 20% из них - записанный звук, а остальное - просто странный шум.
TCP не должен вносить шум, он должен вводить дрожание и задержку.
Сокеты, как правило, имеют автоматически определенное время ожидания. Вы определяете время ожидания? Если нет, то что происходит, почему вы не получаете правильный пакет во время до воспроизведения?
Я на правильном пути? Является ли даже хорошей идеей использовать TCP / IP для такого рода приложений (своего рода голосовая конференция)?
Не делать НЕ использовать TCP / IP, это не очень хорошая идея. Похоже, ваш менеджер неправильно предположил, что любая потеря пакетов - ужасная вещь.
Резюме
Некоторые общие ключевые концепции были показаны здесь, чтобы попытаться максимально помочь этой конкретной проблеме, однако это не следует считать исчерпывающим. Убедитесь, что система VoIP также использует некоторые основополагающие принципы методов кодирования речи / обработки сигналов.
Запомните следующие ключевые моменты:
Использовать UDP для VoIP.
Реализация компенсации потери пакетов
методы.
Блочный перемежитель является простым и
эффективный метод повышения QoS.
Надеюсь, это поможет.