def test_audio_and_video(self): recorder = MediaRecorder(path='foo.mp4') recorder.addTrack(AudioStreamTrack()) recorder.addTrack(VideoStreamTrack()) recorder.start() run(asyncio.sleep(2)) recorder.stop()
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_audio_and_video(self): recorder = MediaRecorder(self.temporary_path('test.mp4')) recorder.addTrack(AudioStreamTrack()) recorder.addTrack(VideoStreamTrack()) run(recorder.start()) run(asyncio.sleep(2)) run(recorder.stop())
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_wav(self): path = self.temporary_path("test.wav") recorder = MediaRecorder(path) recorder.addTrack(AudioStreamTrack()) run(recorder.start()) run(asyncio.sleep(2)) run(recorder.stop()) # check output media container = av.open(path, "r") self.assertEqual(len(container.streams), 1) self.assertEqual(container.streams[0].codec.name, "pcm_s16le") self.assertGreater( float(container.streams[0].duration * container.streams[0].time_base), 0 )
def test_audio_mp3(self): path = self.temporary_path('test.mp3') recorder = MediaRecorder(path) recorder.addTrack(AudioStreamTrack()) run(recorder.start()) run(asyncio.sleep(2)) run(recorder.stop()) # check output media container = av.open(path, 'r') self.assertEqual(len(container.streams), 1) self.assertIn(container.streams[0].codec.name, ('mp3', 'mp3float')) self.assertGreater( float(container.streams[0].duration * container.streams[0].time_base), 0)
def test_video_mp4(self): path = self.temporary_path("test.mp4") recorder = MediaRecorder(path) recorder.addTrack(VideoStreamTrack()) run(recorder.start()) run(asyncio.sleep(2)) run(recorder.stop()) # check output media container = av.open(path, "r") self.assertEqual(len(container.streams), 1) self.assertEqual(container.streams[0].codec.name, "h264") self.assertGreater( float(container.streams[0].duration * container.streams[0].time_base), 0 ) self.assertEqual(container.streams[0].width, 640) self.assertEqual(container.streams[0].height, 480)
def test_audio_and_video(self): path = self.temporary_path('test.mp4') recorder = MediaRecorder(path) recorder.addTrack(AudioStreamTrack()) recorder.addTrack(VideoStreamTrack()) run(recorder.start()) run(asyncio.sleep(2)) run(recorder.stop()) # check output media container = av.open(path, 'r') self.assertEqual(len(container.streams), 2) self.assertEqual(container.streams[0].codec.name, 'aac') self.assertGreater( float(container.streams[0].duration * container.streams[0].time_base), 0) self.assertEqual(container.streams[1].codec.name, 'h264') self.assertEqual(container.streams[1].width, 640) self.assertEqual(container.streams[1].height, 480) self.assertGreater( float(container.streams[1].duration * container.streams[1].time_base), 0)
def test_video_png(self): recorder = MediaRecorder(self.temporary_path('test-%3d.png')) recorder.addTrack(VideoStreamTrack()) run(recorder.start()) run(asyncio.sleep(2)) run(recorder.stop())
def test_audio_wav(self): recorder = MediaRecorder(self.temporary_path('test.wav')) recorder.addTrack(AudioStreamTrack()) run(recorder.start()) run(asyncio.sleep(2)) run(recorder.stop())
def test_video_jpg(self): recorder = MediaRecorder(path='foo-%3d.jpg') recorder.addTrack(VideoStreamTrack()) recorder.start() run(asyncio.sleep(2)) recorder.stop()
def test_audio_wav(self): recorder = MediaRecorder(path='foo.wav') recorder.addTrack(AudioStreamTrack()) recorder.start() run(asyncio.sleep(2)) recorder.stop()
format='lavfi', options=audio_options).audio if platform.system() == "Windows": video_track = MediaPlayer("video=HP TrueVision HD Camera", format="dshow", options=video_options).video else: video_track = MediaPlayer("/dev/video0", format="v4l2", options=video_options).video return audio_track, video_track if __name__ == "__main__": if len(sys.argv) > 1: trans_key = sys.argv[1] else: print('The following argument is required: translation-key') sys.exit() relay = MediaRelay() recorder = MediaRecorder(f'rtmp://a.rtmp.youtube.com/live2/{trans_key}', format='flv') audio, video = get_tracks() recorder.addTrack(audio) recorder.addTrack(relay.subscribe(video)) loop = asyncio.get_event_loop() loop.create_task(recorder.start()) loop.run_forever()