@@ -127,21 +127,27 @@ - (nullable instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory
127127 rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> nativeTrack = nativeRtpSender->track ();
128128 if (nativeTrack == nullptr ) return nil ;
129129
130- _observer = rtc::make_ref_counted<webrtc::RTCFrameCryptorDelegateAdapter>(self);
131- _participantId = participantId;
132-
133130 webrtc::FrameCryptorTransformer::MediaType mediaType =
134131 nativeTrack->kind () == " audio" ? webrtc::FrameCryptorTransformer::MediaType::kAudioFrame
135132 : webrtc::FrameCryptorTransformer::MediaType::kVideoFrame ;
136133
134+ os_unfair_lock_lock (&_lock);
135+ _observer = rtc::make_ref_counted<webrtc::RTCFrameCryptorDelegateAdapter>(self);
136+ _participantId = participantId;
137+
137138 _frame_crypto_transformer =
138139 rtc::scoped_refptr<webrtc::FrameCryptorTransformer>(new webrtc::FrameCryptorTransformer (
139140 factory.signalingThread , [participantId stdString ], mediaType,
140141 [self algorithmFromEnum: algorithm], keyProvider.nativeKeyProvider ));
141142
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+
143148 _frame_crypto_transformer->SetEnabled (false );
144149 _frame_crypto_transformer->RegisterFrameCryptorTransformerObserver (_observer);
150+ os_unfair_lock_unlock (&_lock);
145151 }
146152
147153 return self;
@@ -161,21 +167,27 @@ - (nullable instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory
161167 rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> nativeTrack = nativeRtpReceiver->track ();
162168 if (nativeTrack == nullptr ) return nil ;
163169
164- _observer = rtc::make_ref_counted<webrtc::RTCFrameCryptorDelegateAdapter>(self);
165- _participantId = participantId;
166-
167170 webrtc::FrameCryptorTransformer::MediaType mediaType =
168171 nativeTrack->kind () == " audio" ? webrtc::FrameCryptorTransformer::MediaType::kAudioFrame
169172 : webrtc::FrameCryptorTransformer::MediaType::kVideoFrame ;
170173
174+ os_unfair_lock_lock (&_lock);
175+ _observer = rtc::make_ref_counted<webrtc::RTCFrameCryptorDelegateAdapter>(self);
176+ _participantId = participantId;
177+
171178 _frame_crypto_transformer =
172179 rtc::scoped_refptr<webrtc::FrameCryptorTransformer>(new webrtc::FrameCryptorTransformer (
173180 factory.signalingThread , [participantId stdString ], mediaType,
174181 [self algorithmFromEnum: algorithm], keyProvider.nativeKeyProvider ));
175182
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+
177188 _frame_crypto_transformer->SetEnabled (false );
178189 _frame_crypto_transformer->RegisterFrameCryptorTransformerObserver (_observer);
190+ os_unfair_lock_unlock (&_lock);
179191 }
180192
181193 return self;
0 commit comments