avcodec_send_frame函数返回-22

来源:8-8 AAC编码器编码2

6分钟热度的程序猿

2022-09-25

avcodec_send_frame函数返回-22,同时控制台输出
[libfdk_aac @ 0x7fe44aa37a40] frame_size (2048) was not respected for a non-last frame
自己敲的代码以及跑老师的例子,都是这个错误?libfdk_aac已经编译进来了,同时终端用命令ffmpeg -ar 44100 -ac 2 -f s16le -i audio1_Demo.pcm -c:a libfdk_aac out.aac来进行编码是可以的,求解

写回答

3回答

小江同学4233265

2023-01-06

我也遇到了这个问题,困惑了好久,现在解决了。

你的frame的nb_samples必须等于codec_context的frame_size。

这里因为我们用的是aac,aac这个codec不支持可变输入大小,所以这个frame_size=2048。

然后解决方法就是你提到的那个凑满一个frame再往里面送。

我这里的swr_convert出来的buffer只有1024bytes,但是我的frame有4096bytes,所以我就每四轮才执行一次avcodec_send_frame()。

https://img.mukewang.com/szimg/63b7b5bd09aea44a06260593.jpg

0
5
qq_驰马奥_0
看不懂这个四次处理
2023-12-11
共5条回复

快乐的兰那罗

2022-09-26

我也遇到了相同的报错,确认已授权,并且关闭沙盒

0
0

李超

2022-09-25

参数传的不对,看下我上传的例子程序

0
9
李超
那就是你的参数没写对,采样格式必须是s16,如果你采集的数据不是这种格式需要重采样成这种格式
2022-10-15
共9条回复

音视频小白系统入门课 音视频基础+ffmpeg原理

掌握音视频采集、编解码、RTMP传输协议等核心基础

2214 学习 · 758 问题

查看课程