twcc: enabling it increases packet loss
When I enable twcc via capsfilter I start to get a lot of packet loss (according to twcc) and the video becomes unwatchable.
I experimented with different encoders and payloaders but the results are similar. I use webrtcbin to stream video from GStreamer to GStreamer, ie. 1-way.
Running on MacOS Big Sur, building from master with Cerbero.
As discussed with @hgr on MR !927 (merged), this is not fixed by !927 (merged) and gstreamer!384 (closed).
I'm probably doing something wrong so any pointers will be much appreciated.
VP8
Source:
videotestsrc ! video/x-raw,framerate=5/1 ! videoconvert ! vp8enc deadline=1 target-bitrate=5000 ! queue ! rtpvp8pay ! capsfilter caps=application/x-rtp,media=video,payload=96,clock-rate=90000,encoding-name=VP8,extmap-3=http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
.
Receiving end (I set the same capsfilter on a recvonly webrtctransceiver):
rtpvp8depay ! vp8dec ! videoconvert ! queue ! glimagesink
Rtpsession is giving this every few seconds:
rtpsession rtpsession.c:2228:process_twcc_packet: [00m Could not schedule TWCC straight away
H264
Source:
videotestsrc ! video/x-raw,framerate=5/1 ! x264enc ! queue ! rtph264pay ! capsfilter caps=application/x-rtp,media=video,payload=96,clock-rate=90000,encoding-name=H264,extmap-3=http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
Receiving end (I set the same capsfilter on a recvonly webrtctransceiver):
rtph264depay request-keyframe=true ! queue ! h264parse config-interval=-1 ! avdec_h264 qos=true ! videoconvert ! glimagesink
The h264 depayloader is giving warnings when twcc is enabled:
gstrtph264depay.c:1365:gst_rtp_h264_depay_process:<rtph264depay0> [00m missing FU start bit on an earlier packet. Dropping.
Output.
This is a sample log output with a very large negative avg-delta-of-delta, which seems curious to me. But that's is perhaps due to the large packet loss:
rtpsession rtpsession.c:2890:rtp_session_process_twcc:<RTPSession@0x7ff26612c010> [00m Current TWCC stats RTPTWCCStats, bitrate-sent=(uint)38220, bitrate-recv=(uint)50289, packets-sent=(uint)13, packets-recv=(uint)1, packet-loss-pct=(double)86.343612670898438, avg-delta-of-delta=(gint64)-97416666;
Misc.
I experimented with the following, but it did't seem to change anything:
- webrtc bundle policy vs none.
- 1-way vs 2-way video.
- Relay server vs. p2p.
- Wifi vs cellular network. (Haven't tried cable but just enabling twcc makes everything worse, so this doesn't seem to be the reason).