@@ -9,8 +9,7 @@ use crate::rtp_transceiver::{rtp_codec::RTPCodecType, RTCPFeedback, TYPE_RTCP_FB
9
9
use interceptor:: nack:: { generator:: Generator , responder:: Responder } ;
10
10
use interceptor:: registry:: Registry ;
11
11
use interceptor:: report:: { receiver:: ReceiverReport , sender:: SenderReport } ;
12
- use interceptor:: twcc:: header_extension:: HeaderExtension ;
13
- use interceptor:: twcc:: sender:: Sender ;
12
+ use interceptor:: twcc:: { receiver:: Receiver , sender:: Sender } ;
14
13
15
14
/// register_default_interceptors will register some useful interceptors.
16
15
/// If you want to customize which interceptors are loaded, you should copy the
@@ -23,10 +22,7 @@ pub async fn register_default_interceptors(
23
22
24
23
registry = configure_rtcp_reports ( registry) ;
25
24
26
- //TODO: temporarily disable twcc until all reference cycle memory leak fixed
27
- // current when configure_twcc_sender, audio + video cause corrupted audio
28
- // https://github.com/webrtc-rs/webrtc/issues/129
29
- // registry = configure_twcc_sender(registry, media_engine).await?;
25
+ registry = configure_twcc ( registry, media_engine) . await ?;
30
26
31
27
Ok ( registry)
32
28
}
@@ -42,9 +38,6 @@ pub fn configure_rtcp_reports(mut registry: Registry) -> Registry {
42
38
43
39
/// configure_nack will setup everything necessary for handling generating/responding to nack messages.
44
40
pub fn configure_nack ( mut registry : Registry , media_engine : & mut MediaEngine ) -> Registry {
45
- let generator = Box :: new ( Generator :: builder ( ) ) ;
46
- let responder = Box :: new ( Responder :: builder ( ) ) ;
47
-
48
41
media_engine. register_feedback (
49
42
RTCPFeedback {
50
43
typ : "nack" . to_owned ( ) ,
@@ -60,17 +53,26 @@ pub fn configure_nack(mut registry: Registry, media_engine: &mut MediaEngine) ->
60
53
RTPCodecType :: Video ,
61
54
) ;
62
55
56
+ let generator = Box :: new ( Generator :: builder ( ) ) ;
57
+ let responder = Box :: new ( Responder :: builder ( ) ) ;
63
58
registry. add ( responder) ;
64
59
registry. add ( generator) ;
65
60
registry
66
61
}
67
62
68
- /// configure_twcc_header_extension_sender will setup everything necessary for adding
69
- /// a TWCC header extension to outgoing RTP packets. This will allow the remote peer to generate TWCC reports.
70
- pub async fn configure_twcc_header_extension_sender (
63
+ /// configure_twcc will setup everything necessary for adding
64
+ /// a TWCC header extension to outgoing RTP packets and generating TWCC reports.
65
+ pub async fn configure_twcc (
71
66
mut registry : Registry ,
72
67
media_engine : & mut MediaEngine ,
73
68
) -> Result < Registry > {
69
+ media_engine. register_feedback (
70
+ RTCPFeedback {
71
+ typ : TYPE_RTCP_FB_TRANSPORT_CC . to_owned ( ) ,
72
+ ..Default :: default ( )
73
+ } ,
74
+ RTPCodecType :: Video ,
75
+ ) ;
74
76
media_engine
75
77
. register_header_extension (
76
78
RTCRtpHeaderExtensionCapability {
@@ -81,6 +83,13 @@ pub async fn configure_twcc_header_extension_sender(
81
83
)
82
84
. await ?;
83
85
86
+ media_engine. register_feedback (
87
+ RTCPFeedback {
88
+ typ : TYPE_RTCP_FB_TRANSPORT_CC . to_owned ( ) ,
89
+ ..Default :: default ( )
90
+ } ,
91
+ RTPCodecType :: Audio ,
92
+ ) ;
84
93
media_engine
85
94
. register_header_extension (
86
95
RTCRtpHeaderExtensionCapability {
@@ -91,14 +100,46 @@ pub async fn configure_twcc_header_extension_sender(
91
100
)
92
101
. await ?;
93
102
94
- let header_extension = Box :: new ( HeaderExtension :: builder ( ) ) ;
103
+ let sender = Box :: new ( Sender :: builder ( ) ) ;
104
+ let receiver = Box :: new ( Receiver :: builder ( ) ) ;
105
+ registry. add ( sender) ;
106
+ registry. add ( receiver) ;
107
+ Ok ( registry)
108
+ }
109
+
110
+ /// configure_twcc_sender will setup everything necessary for adding
111
+ /// a TWCC header extension to outgoing RTP packets. This will allow the remote peer to generate TWCC reports.
112
+ pub async fn configure_twcc_sender_only (
113
+ mut registry : Registry ,
114
+ media_engine : & mut MediaEngine ,
115
+ ) -> Result < Registry > {
116
+ media_engine
117
+ . register_header_extension (
118
+ RTCRtpHeaderExtensionCapability {
119
+ uri : sdp:: extmap:: TRANSPORT_CC_URI . to_owned ( ) ,
120
+ } ,
121
+ RTPCodecType :: Video ,
122
+ vec ! [ ] ,
123
+ )
124
+ . await ?;
125
+
126
+ media_engine
127
+ . register_header_extension (
128
+ RTCRtpHeaderExtensionCapability {
129
+ uri : sdp:: extmap:: TRANSPORT_CC_URI . to_owned ( ) ,
130
+ } ,
131
+ RTPCodecType :: Audio ,
132
+ vec ! [ ] ,
133
+ )
134
+ . await ?;
95
135
96
- registry. add ( header_extension) ;
136
+ let sender = Box :: new ( Sender :: builder ( ) ) ;
137
+ registry. add ( sender) ;
97
138
Ok ( registry)
98
139
}
99
140
100
- /// configure_twcc_sender will setup everything necessary for generating TWCC reports.
101
- pub async fn configure_twcc_sender (
141
+ /// configure_twcc_receiver will setup everything necessary for generating TWCC reports.
142
+ pub async fn configure_twcc_receiver_only (
102
143
mut registry : Registry ,
103
144
media_engine : & mut MediaEngine ,
104
145
) -> Result < Registry > {
@@ -136,7 +177,7 @@ pub async fn configure_twcc_sender(
136
177
)
137
178
. await ?;
138
179
139
- let sender = Box :: new ( Sender :: builder ( ) ) ;
140
- registry. add ( sender ) ;
180
+ let receiver = Box :: new ( Receiver :: builder ( ) ) ;
181
+ registry. add ( receiver ) ;
141
182
Ok ( registry)
142
183
}
0 commit comments