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) frame.pts = timestamp frame.time_base = VIDEO_TIME_BASE 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(frames[0].width, width) self.assertEqual(frames[0].height, height) self.assertEqual(frames[0].pts, timestamp) self.assertEqual(frames[0].time_base, VIDEO_TIME_BASE)
def roundtrip_video(self, codec, width, height, time_base=VIDEO_TIME_BASE): """ Round-trip a VideoFrame through encoder then decoder. """ encoder = get_encoder(codec) decoder = get_decoder(codec) input_frames = self.create_video_frames( width=width, height=height, count=30, time_base=time_base ) for i, frame in enumerate(input_frames): # encode 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(frames[0].width, frame.width) self.assertEqual(frames[0].height, frame.height) self.assertEqual(frames[0].pts, i * 3000) self.assertEqual(frames[0].time_base, VIDEO_TIME_BASE)
def roundtrip_audio(self, codec, output_layout, output_sample_rate, drop=[]): """ Round-trip an AudioFrame through encoder then decoder. """ encoder = get_encoder(codec) decoder = get_decoder(codec) input_frames = self.create_audio_frames( layout="mono", sample_rate=8000, count=10 ) output_sample_count = int(output_sample_rate * AUDIO_PTIME) for i, frame in enumerate(input_frames): # encode packages, timestamp = encoder.encode(frame) if i not in drop: # 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].format.name, "s16") self.assertEqual(frames[0].layout.name, output_layout) self.assertEqual(frames[0].samples, output_sample_rate * AUDIO_PTIME) self.assertEqual(frames[0].sample_rate, output_sample_rate) self.assertEqual(frames[0].pts, i * output_sample_count) self.assertEqual( frames[0].time_base, fractions.Fraction(1, output_sample_rate) )
def roundtrip_audio(self, codec, output_channels, output_sample_rate, drop=[]): """ Round-trip an AudioFrame through encoder then decoder. """ encoder = get_encoder(codec) decoder = get_decoder(codec) input_frames = self.create_audio_frames(channels=1, sample_rate=8000, count=10) output_sample_count = int(output_sample_rate * AUDIO_PTIME) for i, frame in enumerate(input_frames): # encode self.assertEqual(len(frame.data), 320) packages, timestamp = encoder.encode(frame) if i not in drop: # 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, i * output_sample_count) self.assertEqual(frames[0].time_base, fractions.Fraction(1, output_sample_rate))
def roundtrip_video(self, codec, width, height): """ Round-trip a VideoFrame through encoder then decoder. """ encoder = get_encoder(codec) decoder = get_decoder(codec) # encode frame = VideoFrame(width=width, height=height) packages = encoder.encode(frame) # depacketize data = b'' for package in packages: data += depayload(codec, package) # decode frames = decoder.decode(data) self.assertEqual(len(frames), 1) self.assertEqual(frames[0].width, width) self.assertEqual(frames[0].height, height)