async def offer(request): params = await request.json() offer = RTCSessionDescription( sdp=params['sdp'], type=params['type']) pc = RTCPeerConnection() pcs.append(pc) # prepare local media player = MediaPlayer(path=os.path.join(ROOT, 'demo-instruct.wav')) if args.write_audio: recorder = MediaRecorder(path=args.write_audio) else: recorder = MediaBlackhole() @pc.on('datachannel') def on_datachannel(channel): @channel.on('message') def on_message(message): channel.send('pong') @pc.on('track') def on_track(track): print('Track %s received' % track.kind) if track.kind == 'audio': pc.addTrack(player.audio) recorder.addTrack(track) elif track.kind == 'video': local_video = VideoTransformTrack(track, transform=params['video_transform']) pc.addTrack(local_video) @track.on('ended') def on_ended(): print('Track %s ended' % track.kind) recorder.stop() player.stop() await pc.setRemoteDescription(offer) answer = await pc.createAnswer() await pc.setLocalDescription(answer) player.start() recorder.start() return web.Response( content_type='application/json', text=json.dumps({ 'sdp': pc.localDescription.sdp, 'type': pc.localDescription.type }))
def test_video_file(self): player = MediaPlayer(path=self.video_path) # check tracks self.assertIsNone(player.audio) self.assertIsNotNone(player.video) # read all frames player.start() for i in range(20): frame = run(player.video.recv()) self.assertEqual(len(frame.data), 460800) self.assertEqual(frame.width, 640) self.assertEqual(frame.height, 480) player.stop()
def test_audio_file_8kHz(self): player = MediaPlayer(path=self.audio_path) # check tracks self.assertIsNotNone(player.audio) self.assertIsNone(player.video) # read all frames player.start() for i in range(49): frame = run(player.audio.recv()) self.assertEqual(frame.channels, 1) self.assertEqual(len(frame.data), 1920) self.assertEqual(frame.sample_rate, 48000) self.assertEqual(frame.sample_width, 2) player.stop()
async def offer(request): params = await request.json() offer = RTCSessionDescription(sdp=params['sdp'], type=params['type']) pc = RTCPeerConnection() pcs.append(pc) player = MediaPlayer('/dev/video0', {'video_size': 'vga'}) pc.addTrack(player.video) await pc.setRemoteDescription(offer) answer = await pc.createAnswer() await pc.setLocalDescription(answer) player.start() return web.Response(content_type='application/json', text=json.dumps({ 'sdp': pc.localDescription.sdp, 'type': pc.localDescription.type }))