我有以下函数处理包含 GStreamer 提供的视频帧的缓冲区对象
def __handle_videoframe(self, appsink):
"""
Callback method for handling a video frame
Arguments:
appsink -- the sink to which gst supplies the frame (not used)
"""
buffer = self._videosink.emit('pull-buffer')
(w,h) = buffer.get_caps[0]["width"],buffer.get_caps[0]["height"]
reqBufferLength = w * h * 3 #Required buffer lenght for a raw rgb image of these dimensions
print "Buffer length: " + str(len(buffer.data))
print "Needed length: " + str(reqBufferLength)
img = pygame.image.frombuffer(buffer.data, self.vidsize, "RGB")
self.screen.blit(img, self.vidPos)
pygame.display.flip()
但是,在运行此代码时,pygame 会崩溃,因为提供的缓冲区大于所需的大小,并且此大小需要匹配。我知道这可能是由于播放的电影编码错误(因为大多数电影运行良好),但有没有办法解决这种意外情况?有没有办法将缓冲区的大小调整为正确的大小?我试图以所需的长度切断缓冲区的尾部,然后播放电影,但输出已损坏。