Пример #1
0
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)