首页 > 解决方案 > libavfilter - 使用 avfilter_graph_parse_ptr 重新配置过滤器图返回 -22

问题描述

我正在使用transcode.cffmpeg 示例中的示例,它按预期工作。它用于avfilter_graph_parse_ptr设置过滤器图并且工作正常。

但是,我需要动态更改过滤器图并且avfilter_graph_parse_ptr失败。它返回-22。我不确定这是否是一个有效的操作(重新配置)?如果可能,它是否需要超过avfilter_graph_parse_ptravfilter_graph_parse_ptr?libavfilter 文档没有说明重新配置或重置现有图形。

我可以创建一个新图表,但我会避免它,因为它会影响现有的缓冲区。

感谢您的见解。

标签: ffmpeglibav

解决方案


根据我的经验,您无法动态重新配置过滤器图。我猜这个设计只是“静态的”,因为一旦你构建了它,你就不应该改变它。

你有两个选择。一种是完全破坏图形并重新创建它。

另一种选择是(如果您使用 C++)在它自己的类中封装一个过滤器,每个类都有一个图。然后,您将有一个队列或列表,您可以在其中添加过滤器,并且每次都将帧通过它们。没有太多性能损失,可能只是您将使用更多内存和编写更多代码。这是我顺便采取的方法,它有效


推荐阅读