Я думаю, что в некоторых ответах отсутствует важный момент. Выбор между UDP и TCP должен , а не , основываться на типе данных (например, аудио или видео) или на том, начинает ли приложение воспроизводить их до завершения передачи («потоковая передача»), но на том, в режиме реального времени . Данные в реальном времени (по определению) чувствительны к задержке, поэтому их лучше всего отправлять по RTP / UDP (протокол реального времени по UDP).
Задержка не является проблемой с сохраненными данными из файла, даже если это аудио и / или видео, поэтому, вероятно, лучше всего отправлять их по TCP, чтобы можно было исправить любые потери пакетов. Отправитель может читать вперед и поддерживать сетевой канал заполненным, а получатель также может использовать много буферов воспроизведения, чтобы он не прерывался случайной повторной передачей TCP или кратковременным замедлением работы сети. Ограничительным случаем является то, что вся запись передается до начала воспроизведения. Это исключает любой риск остановки воспроизведения, но часто нецелесообразно.
Проблема с TCP для данных в реальном времени не столько в повторных передачах, сколько в чрезмерной буферизации, поскольку TCP пытается использовать канал максимально эффективно, без учета задержки. UDP сохраняет границы пакетов приложений и не имеет внутренней памяти, поэтому не создает задержки.