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
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)
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)
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)
def test_decoder(self): decoder = get_decoder(VP8_CODEC) self.assertTrue(isinstance(decoder, Vp8Decoder))