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 がクラッシュします。これはおそらく、再生される映画のエンコーディングの誤りが原因であることはわかっていますが (ほとんどの映画は問題なく動作するため)、この不測の事態を説明する方法はありますか? 外出先でバッファのサイズを正しいサイズに変更する方法はありますか? 必要な長さでバッファーの末尾を切り取ろうとしましたが、ムービーは再生されますが、出力が破損しています。