不足请指正.... 请勿转载,因为结论还不成熟
1. provide packet is too small
原因:编码的时候, packet没有释放就使用
解决:
av_free_packet();
av_init_packet();
avcodec_encode_vidoe2();
这里如果把av_free_packet()写在后面都不行,真是怪了
2. sws_scale();提示错误
原因:
sws_scale中的frame都要分配空间和大小和格式,这样才可以成功,如果用指针,那么指针指向的地方是否有上述三点要求
3. avcode_decode_video234();或者avcodec_dencode_video2()错误
原因:
很大可能是packet和frame没有对应好,没有分配空间或者分配空间不对,或者格式
4 . 这个是看源代码发现的,不过一般是初学的
Unable to find a suitable output format for:
原因:
因为没有调用av_register_all();
如果有网络,就要调用另一个register
注意是否没有调用其它的初始化函数
5.
avcodec_encode_audio(audioStream->codec,audioBuffer,AUDIO_BUFFER_SIZE, frame.data.bytes);并没有输入参数来说明原始帧的长度,意味着ffmpeg在编码音频时默认音频原始帧长度是固定的,这个值由
audioStream->codec->frame_size来指定。
传入buffer区数据大小则由
audioStream->codec->frame_size * bytes per channel *channels来决定
ffmpeg音频编码时需要够一帧长度才会编码
6. 我这有个很简单原则:
ffmpeg如果出现警告,那一定要解决,否则到最后,就不知道错误来自何方.
警告累积多了,就会产生错误, 所以,警告一定要重视
7. ffmpeg 音频转码中,不能直接解码后马上编码,否则数据会出错。声音很杂,里面有主要声音
原因:两者的frame相关数据是不一样的,不能马上解码,只是data数据域相同,最重要的格式不一样
现象:1.打不开codec,原因是aac的需要s16.而不能乱设置。
2. 声音无法写进去
3. 噪声太大
解决: 重新分配一个frame ,把数据赋值过来