Tôi vừa trở về nhà sau kỳ thi lập trình mạng và một trong những câu hỏi họ hỏi chúng tôi là "Nếu bạn định phát video, bạn sẽ sử dụng TCP hay UDP? Hãy giải thích cho cả video được lưu trữ và video trực tiếp" . Đối với câu hỏi này, họ chỉ mong đợi một câu trả lời ngắn gọn của TCP cho video được lưu trữ và UDP cho video trực tiếp, nhưng tôi đã nghĩ về điều này trên đường về nhà và có nhất thiết phải sử dụng UDP để phát video trực tiếp không? Ý tôi là, nếu bạn có băng thông cho nó và nói rằng bạn đang phát trực tuyến một trận bóng đá hoặc buổi hòa nhạc cho vấn đề đó, bạn có thực sự cần sử dụng UDP không?
Giả sử rằng trong khi bạn đang phát trực tuyến buổi hòa nhạc này hoặc bất cứ điều gì bằng TCP, bạn bắt đầu mất các gói (điều gì đó tồi tệ đã xảy ra trong một số mạng giữa bạn và người gửi) và trong cả phút bạn không nhận được bất kỳ gói nào. Luồng video sẽ tạm dừng và sau khi hết một phút, các gói bắt đầu hoạt động trở lại (IP đã tìm thấy một tuyến đường mới cho bạn). Điều gì sẽ xảy ra sau đó là TCP sẽ truyền lại số phút bạn bị mất và tiếp tục gửi cho bạn luồng trực tiếp. Theo giả định, băng thông cao hơn tốc độ bit trên luồng và ping không quá cao, vì vậy trong một khoảng thời gian ngắn, một phút bạn bị mất sẽ hoạt động như một bộ đệm cho luồng cho bạn, theo cách đó , nếu mất gói tin lại xảy ra, bạn sẽ không nhận thấy.
Bây giờ, tôi có thể nghĩ đến một số thiết bị mà đây không phải là một ý tưởng hay, chẳng hạn như hội nghị truyền hình, nơi bạn cần phải luôn ở cuối luồng, vì sự chậm trễ trong cuộc trò chuyện video thật kinh khủng, nhưng trong một trận đấu bóng đá hoặc một buổi hòa nhạc, điều gì quan trọng nếu bạn chậm một phút so với luồng? Ngoài ra, bạn được đảm bảo rằng bạn nhận được tất cả dữ liệu và tốt hơn là bạn nên lưu để xem sau khi dữ liệu đến mà không có bất kỳ lỗi nào.
Vì vậy, điều này đưa tôi đến câu hỏi của tôi. Có bất kỳ hạn chế nào mà tôi không biết khi sử dụng TCP để phát trực tiếp không? Hay nó thực sự nên là, nếu bạn có băng thông cho nó, bạn nên sử dụng TCP vì nó "đẹp" hơn đối với mạng (điều khiển luồng)?