TCP vs UDP on video stream

后端 未结 13 1910
名媛妹妹
名媛妹妹 2020-12-04 05:38

I just came home from my exam in network-programming, and one of the question they asked us was \"If you are going to stream video, would you use TCP or UDP? Give an

13条回答
  •  孤城傲影
    2020-12-04 06:10

    There are some use cases suitable to UDP transport and others suitable to TCP transport.

    The use case also dictates encoding settings for the video. When broadcasting soccer match focus is on quality and for video conference focus is on latency.

    When using multicast to deliver video to your customers then UDP is used.

    Requirement for multicast is expensive networking hardware between broadcasting server and customer. In practice this means if your company owns network infrastructure you can use UDP and multicast for live video streaming. Even then quality-of-service is also implemented to mark video packets and prioritize them so no packet loss happens.

    Multicast will simplify broadcasting software because network hardware will handle distributing packets to customers. Customers subscribe to multicast channels and network will reconfigure to route packets to new subscriber. By default all channels are available to all customers and can be optimally routed.

    This workflow places dificulty on authorization process. Network hardware does not differentiate subscribed users from other users. Solution to authorization is in encrypting video content and enabling decryption in player software when subscription is valid.

    Unicast (TCP) workflow allows server to check client's credentials and only allow valid subscriptions. Even allow only certain number of simultaneous connections.

    Multicast is not enabled over internet.

    For delivering video over internet TCP must be used. When UDP is used developers end up re-implementing packet re-transmission, for eg. Bittorrent p2p live protocol.

    "If you use TCP, the OS must buffer the unacknowledged segments for every client. This is undesirable, particularly in the case of live events".

    This buffer must exist in some form. Same is true for jitter buffer on player side. It is called "socket buffer" and server software can know when this buffer is full and discard proper video frames for live streams. It is better to use unicast/TCP method because server software can implement proper frame dropping logic. Random missing packets in UDP case will just create bad user experience. like in this video: http://tinypic.com/r/2qn89xz/9

    "IP multicast significantly reduces video bandwidth requirements for large audiences"

    This is true for private networks, Multicast is not enabled over internet.

    "Note that if TCP loses too many packets, the connection dies; thus, UDP gives you much more control for this application since UDP doesn't care about network transport layer drops."

    UDP also doesn't care about dropping entire frames or group-of-frames so it does not give any more control over user experience.

    "Usually a video stream is somewhat fault tolerant"

    Encoded video is not fault tolerant. When transmitted over unreliable transport then forward error correction is added to video container. Good example is MPEG-TS container used in satellite video broadcast that carry several audio, video, EPG, etc. streams. This is necessary as satellite link is not duplex communication, meaning receiver can't request re-transmission of lost packets.

    When you have duplex communication available it is always better to re-transmit data only to clients having packet loss then to include overhead of forward-error-correction in stream sent to all clients.

    In any case lost packets are unacceptable. Dropped frames are ok in exceptional cases when bandwidth is hindered.

    The result of missing packets are artifacts like this one:

    Some decoders can break on streams missing packets in critical places.

提交回复
热议问题