Я только что вернулся домой после экзамена по сетевому программированию, и один из вопросов, который они нам задали, был: «Если вы собираетесь транслировать видео, вы бы использовали TCP или UDP? Дайте объяснение как для сохраненного видео, так и для потокового видео в реальном времени». . На этот вопрос они просто ожидали короткого ответа TCP для сохраненного видео и UDP для видео в реальном времени, но я думал об этом по дороге домой, и обязательно ли лучше использовать UDP для потоковой передачи видео в реальном времени? Я имею в виду, если у вас есть пропускная способность для этого, и вы говорите, что транслируете футбольный матч или концерт в этом отношении, вам действительно нужно использовать UDP?
Допустим, пока вы транслируете этот концерт или что-то еще, используя TCP, вы начинаете терять пакеты (что-то плохое произошло в какой-то сети между вами и отправителем), и в течение целой минуты вы не получаете никаких пакетов. Видеопоток будет приостановлен, а через минуту пакеты снова начнут проходить (IP нашел для вас новый маршрут). Тогда произойдет то, что TCP будет ретранслировать ту минуту, которую вы потеряли, и продолжит отправлять вам прямой эфир. Предполагается, что полоса пропускания выше, чем битрейт в потоке, а пинг не слишком высок, поэтому за короткий промежуток времени одна потерянная минута будет действовать для вас как буфер для потока, таким образом , если потеря пакетов произойдет снова, вы этого не заметите.
Теперь я могу подумать о некоторых устройствах, где это было бы не очень хорошей идеей, например, видеоконференции, где вам нужно всегда быть в конце потока, потому что задержка во время видеочата просто ужасна, но во время футбольного матча или концерта какое это имеет значение, если вы отстаете ни на минуту от трансляции? Кроме того, вы гарантированно получите все данные, и было бы лучше сохранить их для последующего просмотра, когда они поступят без ошибок.
Итак, это подводит меня к моему вопросу. Есть ли какие-либо недостатки, о которых я не знаю, в использовании TCP для потоковой передачи в реальном времени? Или действительно должно быть так, что если у вас есть пропускная способность для этого, вы должны пойти на TCP, учитывая, что он «лучше» для сети (управление потоком)?