• Flore Harlé's avatar
    FEC: adapt the flexible FEC protection to the bandwidth and the loss rate. · ab6f437a
    Flore Harlé authored
    In MSVideoQualityController, change the control mechanism of the FEC. The FEC parameters are adapted to the available bandwidth, given the loss rate and the current bandwidth dedicated to the FEC, that is given by the overhead.
    The search of the best video configuration encoder is done after to take the bandwidth needed for FEC into account. The FEC parameters are finally updated. This update is made for each TMMBR received and when the timer delay is over.
    Add a new timer of 20s for FEC to check the current FEC parameters at regular intervals and adapt them.
    Add a loss rate estimator computed on a large window (15s), to be robust to noise. It is send as input for the update of the FEC parameters.
    
    Update tools/mediastream.c for FEC.
    FIXME: the case where the FEC is disabled does not work like without FEC when tools/mediastream.c runs.
    
    Update the fec session creation in Mediastream.
    Add the bandwidth used for the FEC in RTP statistics display.
    
    Update tests of VideoStream suite with FEC.
    Add FEC and RTP statistics.
    Remove ortp event for paquet recovery with FEC.
    
    Packet size: add a function to compute the size of the payloads in msvideo.c that returns the size of a payload and the number of packets to create.
    
    AV1: changes in how to split OBU into several packets
    If FEC is enabled and activated, the AV1 encoder divides the frames into packets of equal size, instead of packets of maximal size (= payload size). The aim is to optimize the overhead between the bandwidth of the RTP session and the FEC session.
    The size of the packets is computed by the function ms_video_payload_sizes. If the argument equalSizeEnabled is true, the size is computed to have packets of same size. Otherwise the size is the maximal payload size. In both cases the number of packets is the same, and the last one will contains the remaining data.
    Change the computation of the marker in function sendObus, it is set to 1 for the last packet of the last OBU (comparison of the packet sizes replaced, because it returned 0 when the size was 1240).
    
    H26x encoder filter: add function enableDivideIntoPacketsEqualSize to override the function in class EncoderFilter, for the equal size of the packets like AV1 with FEC. For the moment the boolean _equalSizeEnabled is unused.
    
    Other update of MSVideoQualityController: the bitrate limit of the video encoder is updated too in current MSVideoConfiguration.
    Do not reset the running timer when a greater TMMBR is received. It is thus possible to upgrade the video definition progressively, instead of waiting for a long time interval without TMMBR to do the encoder update. The drawback is that the video definition changes more often.
    
    Update the bandwidthcontroller: use MS_RTP_RECV_RESET_JITTER_BUFFER to reset the jitter buffer instead of directly call rtp_session_resync.
    Reset the Video Bandwidth Estimator in case of congestion and when it is resolved.
    
    Tester: add functions wait_for__for_uint64 to test uint64_t statistics.
    ab6f437a
To find the state of this project's repository at the time of any of these versions, check out the tags.