Я делаю реализацию Java для RFC 3550 (RTP), и я столкнулся с небольшой проблемой:
В параграфе 2 главы 11 говорится, что:
(...) Участник НЕ ДОЛЖЕН предполагать, что исходный порт входящего пакета RTP или RTCP может использоваться в качестве порта назначения для исходящих пакетов RTP или RTCP. Когда пакеты данных RTP отправляются в обоих направлениях, пакеты RTCP SR каждого участника ДОЛЖНЫ быть отправлены на порт, указанный другим участником для приема RTCP. (...)
RTP не имеет никакого механизма для информирования об этих адресах и портах (это зависит от SDP или какого-либо другого установочного протокола), что привело бы меня к пониманию этого абзаца как «если вы получаете данные из неизвестного источника, просто отбросьте их» .
Но в раздел 6.3.3 в основном говорится, что когда RTP или получен пакет RTCP без BYE с неизвестным SSRC, в таблицу следует добавить нового участника.
Итак, подведем итог:
- Вы должны добавить нового участника, когда получен неизвестный SSRC;
- Вы не можете использовать исходный IP/порт пакета в качестве пункта назначения пакетов для этого участника;
- SDP не определяет SSRC, который будет использоваться каждым из участников RTP;
- Вы можете вручную добавить участников RTP (обнаруженных другими способами), НО вы понятия не имеете, какими будут SSRC.
Итак, вопрос на миллион долларов: как следует обрабатывать неожиданные SSRC?