Example #1
0
    def roundtrip_audio(self, codec, output_channels, output_sample_rate):
        """
        Round-trip an AudioFrame through encoder then decoder.
        """
        encoder = get_encoder(codec)
        decoder = get_decoder(codec)

        input_sample_rate = 8000
        input_sample_count = int(input_sample_rate * AUDIO_PTIME)
        input_timestamp = 0

        output_sample_count = int(output_sample_rate * AUDIO_PTIME)
        output_timestamp = 0

        for frame in self.create_audio_frames(channels=1, sample_rate=input_sample_rate, count=10):
            # encode
            self.assertEqual(len(frame.data), 320)
            packages, timestamp = encoder.encode(frame)

            # depacketize
            data = b''
            for package in packages:
                data += depayload(codec, package)

            # decode
            frames = decoder.decode(JitterFrame(data=data, timestamp=timestamp))
            self.assertEqual(len(frames), 1)
            self.assertEqual(len(frames[0].data),
                             output_sample_rate * AUDIO_PTIME * output_channels * 2)
            self.assertEqual(frames[0].channels, output_channels)
            self.assertEqual(frames[0].sample_rate, output_sample_rate)
            self.assertEqual(frames[0].sample_width, 2)
            self.assertEqual(frames[0].pts, output_timestamp)
            self.assertEqual(frames[0].time_base, fractions.Fraction(1, output_sample_rate))

            # tick
            input_timestamp += input_sample_count
            output_timestamp += output_sample_count
Example #2
0
    def roundtrip(self, width, height):
        """
        Round-trip a VideoFrame through encoder then decoder.
        """
        encoder = get_encoder(H264_CODEC)
        decoder = get_decoder(H264_CODEC)

        # encode
        frame = VideoFrame(width=width, height=height)
        packages = encoder.encode(frame)

        # depacketize
        data = b''
        for package in packages:
            packet = RtpPacket(payload=package)
            decoder.parse(packet)
            data += packet._data

        # decode
        frames = decoder.decode(data)
        self.assertEqual(len(frames), 1)
        self.assertEqual(frames[0].width, width)
        self.assertEqual(frames[0].height, height)
Example #3
0
    def roundtrip_audio(self, codec, output_channels, output_sample_rate):
        """
        Round-trip an AudioFrame through encoder then decoder.
        """
        encoder = get_encoder(codec)
        decoder = get_decoder(codec)

        # encode
        frame = AudioFrame(
            channels=1,
            data=b'\x00\x00' * 160,
            sample_rate=8000)
        self.assertEqual(len(frame.data), 320)
        data = encoder.encode(frame)

        # decode
        frames = decoder.decode(data)
        self.assertEqual(len(frames), 1)
        self.assertEqual(len(frames[0].data),
                         output_sample_rate * AUDIO_PTIME * output_channels * 2)
        self.assertEqual(frames[0].channels, output_channels)
        self.assertEqual(frames[0].sample_rate, output_sample_rate)
        self.assertEqual(frames[0].sample_width, 2)
Example #4
0
    def roundtrip_video(self, codec, width, height):
        """
        Round-trip a VideoFrame through encoder then decoder.
        """
        encoder = get_encoder(codec)
        decoder = get_decoder(codec)

        for timestamp in range(0, 90000, 3000):
            # encode
            frame = VideoFrame(width=width, height=height, timestamp=timestamp)
            packages = encoder.encode(frame)

            # depacketize
            data = b''
            for package in packages:
                data += depayload(codec, package)

            # decode
            frames = decoder.decode(JitterFrame(data=data,
                                                timestamp=timestamp))
            self.assertEqual(len(frames), 1)
            self.assertEqual(frames[0].width, width)
            self.assertEqual(frames[0].height, height)
            self.assertEqual(frames[0].timestamp, timestamp)
Example #5
0
 def test_decoder(self):
     decoder = get_decoder(VP8_CODEC)
     self.assertTrue(isinstance(decoder, Vp8Decoder))