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



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

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

有没有办法添加库中定义的类?我通读了我在网上能找到的文档,但没能找到这个问题的好答案。

首先需要将AVFormatContext结构转换为ctypes声明。您可以通过从Structure类派生来实现这一点。

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

avformat_alloc_context.restype = POINTER(AVFormatContext)

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

contextPtr = avformat_alloc_context()

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

context = contextPtr.contents

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

ctypes文档中详细介绍了这些信息。

最新更新