Most of the missing features are AVPF related, which is defined in RFC4585 and RFC5104.
RFC4585: Extended RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/AVPF)
https://www.rfc-editor.org/rfc/rfc4585.txt
RFC5104: Codec Control Messages in the RTP Audio-Visual Profile with Feedback (AVPF)
https://www.rfc-editor.org/rfc/rfc5104.txt
AVPF contains a mechanism for conveying such a message, but did not specify for which codec and according to which syntax the message should conform. Recently, the ITU-T finalized Rec.H.271, which (among other message types) also includes a feedback message. It is expected that this feedback message will fairly quickly enjoy wide support. Therefore, a mechanism to convey feedback messages according to H.271 appears to be desirable.
RTCP Receiver Report Extensions
1. CCM – Codec Control Message
2. FIR – Full Intra Request Command
A Full Intra Request (FIR) Command, when received by the designated
media sender, requires that the media sender sends a Decoder Refresh
Point (see section 2.2) at the earliest opportunity. The evaluation
of such an opportunity includes the current encoder coding strategy
and the current available network resources.
FIR is also known as an “instantaneous decoder refresh request”,
“fast video update request” or “video fast update request”.
3. TMMBR – Temporary Maximum Media Stream Bit Rate Request
4. TMMBN – Temporary Maximum Media Stream Bit Rate Notification
Example from RFC5104:
Receiver A: TMMBR_max total BR = 35 kbps, TMMBR_OH = 40 bytes
Receiver B: TMMBR_max total BR = 40 kbps, TMMBR_OH = 60 bytes
For a given packet rate (PR), the bit rate available for media
payloads in RTP will be:
Max_net media_BR_A =
TMMBR_max total BR_A – PR * TMMBR_OH_A * 8 … (1)
Max_net media_BR_B =
TMMBR_max total BR_B – PR * TMMBR_OH_B * 8 … (2)
For a PR = 20, these calculations will yield a Max_net media_BR_A =
28600 bps and Max_net media_BR_B = 30400 bps, which suggests that
receiver A is the limiting one for this packet rate. However, at a
certain PR there is a switchover point at which receiver B becomes
the limiting one. The switchover point can be identified by setting
Max_media_BR_A equal to Max_media_BR_B and breaking out PR:
TMMBR_max total BR_A – TMMBR_max total BR_B
PR = ——————————————- … (3)
8*(TMMBR_OH_A – TMMBR_OH_B)
5. TSTR – Temporal-Spatial Trade-off Request
5. TSTN – Temporal-Spatial Trade-off Request
6. VBCM – H.271 Video Back Channel Message
7. RTT – Round Trip Time
A receiver that receives a request closely after
sending a decoder refresh point — within 2 times the longest round
trip time (RTT) known, plus any AVPF-induced RTCP packet sending
delays — should await a second request message to ensure that the
media receiver has not been served by the previously delivered
decoder refresh point. The reason for the specified delay is to
avoid sending unnecessary decoder refresh points.
8. NACK
8a. PLI – Picture Loss Indication
8b. SLI – Slice Loss Indication
8c. RPSI – Reference Picture Selection Indication
Here’s a sample INVITE command relaying from FreeSWITCH:
INVITE sip:1009@10.21.1.80:5060;transport=tcp SIP/2.0 Via: SIP/2.0/TCP 192.168.100.96;branch=z9hG4bK6p37yQX86QXar Route: <sip:1009@10.21.1.80:5060>;transport=tcp Max-Forwards: 69 From: "Extension 1008" <sip:1008@192.168.100.96>;tag=DKK4FpBB3ptSS To: <sip:1009@10.21.1.80:5060;transport=tcp> Call-ID: 0199ec1f-9e53-1233-8583-000c29f7d152 CSeq: 77747697 INVITE Contact: <sip:mod_sofia@192.168.100.96:5060;transport=tcp> User-Agent: FreeSWITCH-mod_sofia/1.7.0+git~20150614T062551Z~a647b42910~64bit Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE Supported: timer, path, replaces Allow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer Content-Type: application/sdp Content-Disposition: session Content-Length: 495 X-FS-Support: update_display,send_info Remote-Party-ID: "Extension 1008" <sip:1008@192.168.100.96>;party=calling;screen=yes;privacy=off v=0 o=FreeSWITCH 1436150633 1436150634 IN IP4 192.168.100.96 s=FreeSWITCH c=IN IP4 192.168.100.96 t=0 0 m=audio 16890 RTP/AVP 96 0 8 101 a=rtpmap:96 opus/48000/2 a=fmtp:96 useinbandfec=1; stereo=0; sprop-stereo=0 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-16 a=ptime:20 m=video 22404 RTP/AVP 96 b=AS:1024 a=rtpmap:96 H264/90000 a=fmtp:96 profile-level-id=42801F a=rtcp-fb:96 ccm fir tmmbr a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli
Sample SDP of WebRTC for Firefox
GET /socket.io/1/websocket/GgKg1qt9TCXtfPb6n2g0 HTTP/1.1 Host: 172.16.203.1:2013 User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:36.0) Gecko/20100101 Firefox/36.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Sec-WebSocket-Version: 13 Origin: http://172.16.203.1:2013 Sec-WebSocket-Key: pPQe97SI5k09yaPnVLa2RQ== Connection: keep-alive, Upgrade Pragma: no-cache Cache-Control: no-cache Upgrade: websocket HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: Lm5/9dDv4pjyphQQeswS+V+AiKc= ..1::..|.'kI..Q..I ...Q^.U...BK......IIP.F....Q'.A...z..T5:::{"name":"log","args":[[">>> Message from server: ","Room foo has 1 client(s)"]]}.`5:::{"name":"log","args":[[">>> Message from server: ","Request to create or join room","foo"]]}.$5:::{"name":"joined","args":["foo"]}.B5:::{"name":"emit(): client GgKg1qt9TCXtfPb6n2g0 joined room foo"}..$.N...t _. {I.l ..+iW.)...l{V.=8..l}K.noW.<:I.*sE..g.Z5:::{"name":"log","args":[[">>> Message from server: ","Got message: ","got user media"]]}.~.x5:::{"name":"message","args":[{"type":"offer","sdp":" v=0 o=mozilla...THIS_IS_SDPARTA-38.0 2820695485956467000 0 IN IP4 0.0.0.0 s=- t=0 0 a=fingerprint:sha-256 7C:7B:AE:C2:AE:ED:14:39:A4:7A:EE:4B:FB:FE:90:90:E8:A1:0B:C1:50:FC:C8:9C:FA:28:68:22:EE:1C:F6:97 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle a=msid-semantic:WMS * m=audio 9 RTP/AVP 109 9 0 8 c=IN IP4 0.0.0.0 a=sendrecv a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:db746395f7bf11179b1cddabf3ef6359 a=ice-ufrag:1c858a90 a=mid:sdparta_0 a=msid:{69b2b229-1dc0-4291-a703-aafe505d477b} {ebc6bb1c-8525-4a70-9601-354b53c5c103} a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:4051396866 cname:{f0f8a3ab-8c54-4694-872a-98dd14f0c821} m=video 9 RTP/AVP 126 97 c=IN IP4 0.0.0.0 a=sendrecv a=fmtp:120 max-fs=12288;max-fr=60 a=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1 a=fmtp:97 profile-level-id=42e01f;level-asymmetry-allowed=1 a=ice-pwd:db746395f7bf11179b1cddabf3ef6359 a=ice-ufrag:1c858a90 a=mid:sdparta_1 a=msid:{69b2b229-1dc0-4291-a703-aafe505d477b} {34f61d33-9fe4-42ff-8e2b-ef9c465c6f67} a=rtcp-fb:120 nack a=rtcp-fb:120 nack pli a=rtcp-fb:120 ccm fir a=rtcp-fb:126 nack a=rtcp-fb:126 nack pli a=rtcp-fb:126 ccm fir a=rtcp-fb:97 nack a=rtcp-fb:97 nack pli a=rtcp-fb:97 ccm fir a=rtcp-mux a=rtpmap:126 H264/90000 a=rtpmap:97 H264/90000 a=setup:actpass a=ssrc:3993721606 cname:{f0f8a3ab-8c54-4694-872a-98dd14f0c821}