我是靠谱客的博主 平淡小蚂蚁,最近开发中收集的这篇文章主要介绍Changing video/audio frame properties on the fly is not supported by all filters 原因及解决方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近在程序转码的时候发现音频给转没了,就消失了。但是使用ffmpeg自带的程序转码时却没有发生。

不由得好奇,导致出现的原因,检查日志发现了如下的错误

Changing audio frame properties on the fly is not supported by all filters

通过追踪代码发现该错误出现的位置为下图位置----向滤图中添加音频帧的时候错误,百思不得其解:

经过查看源码,该错误是以下一段代码产生的:

根据其调用的上下文,我们可以发现,这个其实就是拿FilterContext和解码后的frame的sample,channel_layout,channels,format来进行比较。

而这个FilterContext的初始化在下图处,可以看到本程序使用的是解码器信息,大部分情况没出现问题。

此例便是出现了,dec_ctx->chanel_layout = 4,但是dec_frame->channel_layout=3的情况才出现问题,所以出现了这种情况,到此出现此问题的原因基本清楚了。

其实,还有一个问题,为啥ffmpeg的程序没有问题,但是我们的程序出现了问题呢?既然到这了,那么就再扒一下ffmpeg.c的源码:

经过查找发现了熟悉的味道,ifilter,那么这个ifilter的数据又是从哪里来的呢,继续扒。

跟踪其调用堆栈,我们可以发现ifilter里的sample_rate等数据就是解码过的帧的数据。

在寻找此过程的时候我发现,ffmpeg.c程序的filter_graph初始化是在完成解码后才进行的初始化,而我们通常会受到雷神(https://blog.csdn.net/leixiaohua1020)和dev包里/example/transcoding.c文件的影响,在解码之前已经把filter_graph给初始化了,这才出现了这种情况,至此所有的疑问都得到了解决,满足。

当找到最后时,脑中突然出现了我之前处理过这种问题的印象,不由懊恼。想到百度时,并没有找到此问题的相关有用信息,转而打开许久不用的csdn博客,记录下来。

 

 

最后

以上就是平淡小蚂蚁为你收集整理的Changing video/audio frame properties on the fly is not supported by all filters 原因及解决方法的全部内容,希望文章能够帮你解决Changing video/audio frame properties on the fly is not supported by all filters 原因及解决方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部