@@ -127,21 +127,27 @@ - (nullable instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory
127
127
rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> nativeTrack = nativeRtpSender->track ();
128
128
if (nativeTrack == nullptr ) return nil ;
129
129
130
- _observer = rtc::make_ref_counted<webrtc::RTCFrameCryptorDelegateAdapter>(self);
131
- _participantId = participantId;
132
-
133
130
webrtc::FrameCryptorTransformer::MediaType mediaType =
134
131
nativeTrack->kind () == " audio" ? webrtc::FrameCryptorTransformer::MediaType::kAudioFrame
135
132
: webrtc::FrameCryptorTransformer::MediaType::kVideoFrame ;
136
133
134
+ os_unfair_lock_lock (&_lock);
135
+ _observer = rtc::make_ref_counted<webrtc::RTCFrameCryptorDelegateAdapter>(self);
136
+ _participantId = participantId;
137
+
137
138
_frame_crypto_transformer =
138
139
rtc::scoped_refptr<webrtc::FrameCryptorTransformer>(new webrtc::FrameCryptorTransformer (
139
140
factory.signalingThread , [participantId stdString ], mediaType,
140
141
[self algorithmFromEnum: algorithm], keyProvider.nativeKeyProvider ));
141
142
142
- nativeRtpSender->SetEncoderToPacketizerFrameTransformer (_frame_crypto_transformer);
143
+ factory.workerThread ->BlockingCall ([self , nativeRtpSender] {
144
+ // Must be called on Worker thread
145
+ nativeRtpSender->SetEncoderToPacketizerFrameTransformer (_frame_crypto_transformer);
146
+ });
147
+
143
148
_frame_crypto_transformer->SetEnabled (false );
144
149
_frame_crypto_transformer->RegisterFrameCryptorTransformerObserver (_observer);
150
+ os_unfair_lock_unlock (&_lock);
145
151
}
146
152
147
153
return self;
@@ -161,21 +167,27 @@ - (nullable instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory
161
167
rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> nativeTrack = nativeRtpReceiver->track ();
162
168
if (nativeTrack == nullptr ) return nil ;
163
169
164
- _observer = rtc::make_ref_counted<webrtc::RTCFrameCryptorDelegateAdapter>(self);
165
- _participantId = participantId;
166
-
167
170
webrtc::FrameCryptorTransformer::MediaType mediaType =
168
171
nativeTrack->kind () == " audio" ? webrtc::FrameCryptorTransformer::MediaType::kAudioFrame
169
172
: webrtc::FrameCryptorTransformer::MediaType::kVideoFrame ;
170
173
174
+ os_unfair_lock_lock (&_lock);
175
+ _observer = rtc::make_ref_counted<webrtc::RTCFrameCryptorDelegateAdapter>(self);
176
+ _participantId = participantId;
177
+
171
178
_frame_crypto_transformer =
172
179
rtc::scoped_refptr<webrtc::FrameCryptorTransformer>(new webrtc::FrameCryptorTransformer (
173
180
factory.signalingThread , [participantId stdString ], mediaType,
174
181
[self algorithmFromEnum: algorithm], keyProvider.nativeKeyProvider ));
175
182
176
- nativeRtpReceiver->SetDepacketizerToDecoderFrameTransformer (_frame_crypto_transformer);
183
+ factory.workerThread ->BlockingCall ([self , nativeRtpReceiver] {
184
+ // Must be called on Worker thread
185
+ nativeRtpReceiver->SetDepacketizerToDecoderFrameTransformer (_frame_crypto_transformer);
186
+ });
187
+
177
188
_frame_crypto_transformer->SetEnabled (false );
178
189
_frame_crypto_transformer->RegisterFrameCryptorTransformerObserver (_observer);
190
+ os_unfair_lock_unlock (&_lock);
179
191
}
180
192
181
193
return self;
0 commit comments