使用ctypes调用FFmpeg库时如何指定非默认类型

时间:2013-08-01 15:10:33

标签: python ffmpeg ctypes

我正在调用一个名为avformat_alloc_context()的FFMPEG库,它返回一个指向AVFormatContext类型的指针。结构AVFormatContext在avformat库中定义。

显然;这不是一个ctypes默认类型,当我尝试将引用传递给我的代码中的另一个ffmpeg库时会导致错误。

有没有办法添加库内定义的类?我读了一下我在网上找到的文件,并且无法找到这个问题的好答案。

1 个答案:

答案 0 :(得分:1)

首先,您需要将AVFormatContext结构转换为ctypes声明。您可以通过deriving from the Structure class执行此操作。

然后,您需要指定avformat_alloc_context函数返回指向该结构的指针。您指定restype来执行此操作:

avformat_alloc_context.restype = POINTER(AVFormatContext)

然后你可以这样调用这个函数:

contextPtr = avformat_alloc_context()

要获取指针的内容,请阅读contents属性:

context = contextPtr.contents

当你完成指针时,不要忘记调用avformat_free_context()

这些信息在ctypes documentation中有更详细的介绍。