我正在调用一个名为 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文档中有更详细的介绍。