1212from azure .communication .callautomation import (
1313 FileSource ,
1414 DtmfTone ,
15- PhoneNumberIdentifier
15+ PhoneNumberIdentifier ,
16+ MediaStreamingOptions ,
17+ MediaStreamingContentType ,
18+ MediaStreamingTransportType ,
19+ MediaStreamingAudioChannelType ,
20+ TranscriptionOptions ,
21+ TranscriptionTransportType
1622)
1723from callautomation_test_case import CallAutomationRecordedTestCase
1824from azure .communication .callautomation ._shared .models import identifier_from_raw_id
@@ -178,4 +184,139 @@ def test_add_and_hold_unhold_participant_in_a_call(self):
178184 raise ValueError ("Failed to unhold participant" )
179185
180186 self .terminate_call (unique_id )
181- return
187+ return
188+
189+ @recorded_by_proxy
190+ def test_start_stop_media_streaming_in_a_call (self ):
191+
192+ # try to establish the call
193+ caller = self .identity_client .create_user ()
194+ target = self .identity_client .create_user ()
195+
196+ media_streaming_options = MediaStreamingOptions (
197+ transport_url = self .transport_url ,
198+ transport_type = MediaStreamingTransportType .WEBSOCKET ,
199+ content_type = MediaStreamingContentType .AUDIO ,
200+ audio_channel_type = MediaStreamingAudioChannelType .MIXED ,
201+ start_media_streaming = False
202+ )
203+
204+ unique_id , call_connection , _ = self .establish_callconnection_voip_with_streaming_options (caller , target , media_streaming_options , False )
205+
206+ # check returned events
207+ connected_event = self .check_for_event ('CallConnected' , call_connection ._call_connection_id , timedelta (seconds = 15 ))
208+ participant_updated_event = self .check_for_event ('ParticipantsUpdated' , call_connection ._call_connection_id , timedelta (seconds = 15 ))
209+
210+ if connected_event is None :
211+ raise ValueError ("Caller CallConnected event is None" )
212+ if participant_updated_event is None :
213+ raise ValueError ("Caller ParticipantsUpdated event is None" )
214+
215+ # start media streaming.
216+ call_connection .start_media_streaming ()
217+
218+ # check for MediaStreamingStarted event
219+ media_streaming_started = self .check_for_event ('MediaStreamingStarted' , call_connection ._call_connection_id , timedelta (seconds = 30 ))
220+ if media_streaming_started is None :
221+ raise ValueError ("MediaStreamingStarted event is None" )
222+
223+ time .sleep (3 )
224+
225+ # check for media streaming subscription from call connection properties for media streaming started event
226+ call_connection_properties = call_connection .get_call_properties ()
227+ if call_connection_properties is None :
228+ raise ValueError ("call_connection_properties is None" )
229+ if call_connection_properties .media_streaming_subscription is None :
230+ raise ValueError ("call_connection_properties.media_streaming_subscription is None" )
231+ if call_connection_properties .media_streaming_subscription .state != 'active' :
232+ raise ValueError ("media streaming state is invalid for MediaStreamingStarted event" )
233+
234+ # stop media streaming.
235+ call_connection .stop_media_streaming ()
236+
237+ # check for MediaStreamingStopped event
238+ media_streaming_stopped = self .check_for_event ('MediaStreamingStopped' , call_connection ._call_connection_id , timedelta (seconds = 30 ))
239+ if media_streaming_stopped is None :
240+ raise ValueError ("MediaStreamingStopped event is None" )
241+
242+ # check for media streaming subscription from call connection properties for media streaming stopped event
243+ call_connection_properties = call_connection .get_call_properties ()
244+ if call_connection_properties is None :
245+ raise ValueError ("call_connection_properties is None" )
246+ if call_connection_properties .media_streaming_subscription is None :
247+ raise ValueError ("call_connection_properties.media_streaming_subscription is None" )
248+ if call_connection_properties .media_streaming_subscription .state != 'inactive' :
249+ raise ValueError ("media streaming state is invalid for MediaStreamingStopped event" )
250+
251+ self .terminate_call (unique_id )
252+ return
253+
254+ @recorded_by_proxy
255+ def test_start_stop_transcription_in_call (self ):
256+ # try to establish the call
257+ caller = self .identity_client .create_user ()
258+ target = self .identity_client .create_user ()
259+
260+ transcription_options = TranscriptionOptions (
261+ transport_url = self .transport_url ,
262+ transport_type = TranscriptionTransportType .WEBSOCKET ,
263+ locale = "en-US" ,
264+ start_transcription = False )
265+
266+ unique_id , call_connection , _ = self .establish_callconnection_voip_with_streaming_options (caller , target , transcription_options , True )
267+
268+ # check returned events
269+ connected_event = self .check_for_event ('CallConnected' , call_connection ._call_connection_id , timedelta (seconds = 15 ))
270+ participant_updated_event = self .check_for_event ('ParticipantsUpdated' , call_connection ._call_connection_id , timedelta (seconds = 15 ))
271+
272+ if connected_event is None :
273+ raise ValueError ("Caller CallConnected event is None" )
274+ if participant_updated_event is None :
275+ raise ValueError ("Caller ParticipantsUpdated event is None" )
276+
277+ # start transcription
278+ call_connection .start_transcription (locale = "en-ca" )
279+
280+ # check for TranscriptionStarted event
281+ transcription_started = self .check_for_event ('TranscriptionStarted' , call_connection ._call_connection_id , timedelta (seconds = 30 ))
282+ if transcription_started is None :
283+ raise ValueError ("TranscriptionStarted event is None" )
284+
285+ # check for transcription subscription from call connection properties for transcription started event
286+ call_connection_properties = call_connection .get_call_properties ()
287+ if call_connection_properties is None :
288+ raise ValueError ("call_connection_properties is None" )
289+ if call_connection_properties .transcription_subscription is None :
290+ raise ValueError ("call_connection_properties.transcription_subscription is None" )
291+ if call_connection_properties .transcription_subscription .state != 'active' :
292+ raise ValueError ("transcription subscription state is invalid for TranscriptionStarted event" )
293+
294+ time .sleep (3 )
295+ call_connection .update_transcription (locale = "en-gb" )
296+
297+ # check for TranscriptionUpdated event
298+ transcription_updated = self .check_for_event ('TranscriptionUpdated' , call_connection ._call_connection_id , timedelta (seconds = 30 ))
299+ if transcription_updated is None :
300+ raise ValueError ("TranscriptionUpdated event is None" )
301+
302+ time .sleep (3 )
303+
304+ # stop transcription
305+ call_connection .stop_transcription ()
306+
307+ # check for TranscriptionStopped event
308+ transcription_stopped = self .check_for_event ('TranscriptionStopped' , call_connection ._call_connection_id , timedelta (seconds = 30 ))
309+ if transcription_stopped is None :
310+ raise ValueError ("TranscriptionStopped event is None" )
311+
312+ # check for transcription subscription from call connection properties for transcription stopped event
313+ call_connection_properties = call_connection .get_call_properties ()
314+ if call_connection_properties is None :
315+ raise ValueError ("call_connection_properties is None" )
316+ if call_connection_properties .transcription_subscription is None :
317+ raise ValueError ("call_connection_properties.transcription_subscription is None" )
318+ if call_connection_properties .transcription_subscription .state != 'inactive' :
319+ raise ValueError ("transcription subscription state is invalid for TranscriptionStopped event" )
320+
321+ self .terminate_call (unique_id )
322+ return
0 commit comments