def test_track_ended(self): track = AudioStreamTrack() sender = RTCRtpSender(track, self.local_transport) run(sender.send(RTCRtpParameters(codecs=[PCMU_CODEC]))) track.stop() run(asyncio.sleep(0.5))
def test_audio_stop_source(self): source = AudioStreamTrack() relay = MediaRelay() proxy1 = relay.subscribe(source) proxy2 = relay.subscribe(source) # read some frames samples_per_frame = 160 for pts in range(0, 2 * samples_per_frame, samples_per_frame): frame1, frame2 = run(asyncio.gather(proxy1.recv(), proxy2.recv())) self.assertEqual(frame1.format.name, "s16") self.assertEqual(frame1.layout.name, "mono") self.assertEqual(frame1.pts, pts) self.assertEqual(frame1.samples, samples_per_frame) self.assertEqual(frame2.format.name, "s16") self.assertEqual(frame2.layout.name, "mono") self.assertEqual(frame2.pts, pts) self.assertEqual(frame2.samples, samples_per_frame) # stop source track source.stop() # continue reading run(asyncio.gather(proxy1.recv(), proxy2.recv())) for i in range(2): exc1, exc2 = run( asyncio.gather(proxy1.recv(), proxy2.recv(), return_exceptions=True) ) self.assertTrue(isinstance(exc1, MediaStreamError)) self.assertTrue(isinstance(exc2, MediaStreamError))
def test_track_ended(self): track = AudioStreamTrack() sender = RTCRtpSender(track, self.local_transport) run(sender.send(RTCRtpParameters(codecs=[PCMU_CODEC]))) # stop track and wait for RTP loop to exit track.stop() run(asyncio.sleep(0.1))
async def test_track_ended(self): async with dummy_dtls_transport_pair() as (local_transport, _): track = AudioStreamTrack() sender = RTCRtpSender(track, local_transport) await sender.send(RTCRtpParameters(codecs=[PCMU_CODEC])) # stop track and wait for RTP loop to exit track.stop() await asyncio.sleep(0.1)
def test_audio_wav_ended(self): track = AudioStreamTrack() recorder = MediaRecorder(self.temporary_path("test.wav")) recorder.addTrack(track) run(recorder.start()) run(asyncio.sleep(1)) track.stop() run(asyncio.sleep(1)) run(recorder.stop())
def test_audio_ended(self): track = AudioStreamTrack() recorder = MediaBlackhole() recorder.addTrack(track) run(recorder.start()) run(asyncio.sleep(1)) track.stop() run(asyncio.sleep(1)) run(recorder.stop())
def test_track_ended(self): transport, _ = dummy_dtls_transport_pair() track = AudioStreamTrack() sender = RTCRtpSender(track, transport) run(sender.send(RTCRtpParameters(codecs=[PCMU_CODEC]))) track.stop() run(asyncio.sleep(0.5)) run(transport.stop())
async def test_audio_slow_consumer(self): source = AudioStreamTrack() relay = MediaRelay() proxy1 = relay.subscribe(source, buffered=False) proxy2 = relay.subscribe(source, buffered=False) # read some frames samples_per_frame = 160 for pts in range(0, 2 * samples_per_frame, samples_per_frame): frame1, frame2 = await asyncio.gather(proxy1.recv(), proxy2.recv()) self.assertEqual(frame1.format.name, "s16") self.assertEqual(frame1.layout.name, "mono") self.assertEqual(frame1.pts, pts) self.assertEqual(frame1.samples, samples_per_frame) self.assertEqual(frame2.format.name, "s16") self.assertEqual(frame2.layout.name, "mono") self.assertEqual(frame2.pts, pts) self.assertEqual(frame2.samples, samples_per_frame) # skip some frames timestamp = 5 * samples_per_frame await asyncio.sleep(source._start + (timestamp / 8000) - time.time()) frame1, frame2 = await asyncio.gather(proxy1.recv(), proxy2.recv()) self.assertEqual(frame1.format.name, "s16") self.assertEqual(frame1.layout.name, "mono") self.assertEqual(frame1.pts, 5 * samples_per_frame) self.assertEqual(frame1.samples, samples_per_frame) self.assertEqual(frame2.format.name, "s16") self.assertEqual(frame2.layout.name, "mono") self.assertEqual(frame2.pts, 5 * samples_per_frame) self.assertEqual(frame2.samples, samples_per_frame) # stop a consumer proxy1.stop() # continue reading for i in range(2): exc1, frame2 = await asyncio.gather(proxy1.recv(), proxy2.recv(), return_exceptions=True) self.assertTrue(isinstance(exc1, MediaStreamError)) self.assertTrue(isinstance(frame2, av.AudioFrame)) # stop source track source.stop()