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()
Beispiel #2
0
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
        }))
Beispiel #3
0
 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())
Beispiel #4
0
    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())
Beispiel #5
0
    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)
Beispiel #7
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)
Beispiel #9
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())
Beispiel #10
0
 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()
Beispiel #13
0
        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()