class MoviePlayer(Process): def __init__(self, filename, *args,**kwargs): super(MoviePlayer, self).__init__(*args,**kwargs) TS_VIDEO_RGB24={ 'video1':(0, -1, {'pixel_format':PixelFormats.PIX_FMT_RGB24}), 'audio1':(1,-1,{})} ## create the reader object self.mp = FFMpegReader(seek_before=0) ## open an audio-video file self.mp.open(filename,TS_VIDEO_RGB24,buf_size=4096) def get_size(self): tracks = self.mp.get_tracks() return tracks[0].get_size() def set_buffer(self, buffer_data): self.buffer_data = buffer_data def render_to_buffer(self, frame): buffer_array = np.frombuffer(self.buffer_data, 'B') frame = np.flipud(frame) frame = frame.reshape((1, -1)) buffer_array[:] = frame def run(self): tracks = self.mp.get_tracks() tracks[0].set_observer(self.render_to_buffer) rate = tracks[1].get_samplerate() channels = tracks[1].get_channels() fps = tracks[0].get_fps() ap = AlsaSoundLazyPlayer(rate, channels, fps) tracks[1].set_observer(ap.push_nowait) self.mp.run() def seek(self, pos=0): if pos is not None and pos > 0: self.mp.seek_to_seconds(pos) def stop(self): self.mp.close() os.kill(self.pid, signal.SIGKILL)