# 第九章 常见问题
如何排查错误
av_strerror
函数根据返回值获取错误信息
找不到编码器/解码器
手工编译ffmpeg,将编码器/解码器链接进去
编码/解码的控制台一直在报缓存空间不足
造成这个问题的原因是,编码器/解码器写入帧的速度大于读取帧的速度,导致累积的帧占满缓冲区。解决方法是,处理完所有缓冲区的帧后再编码新的帧
遇到段错误怎么办
一旦遇到段错误,那么可以肯定前面有函数调用失败并且没有处理。注意排查下前面函数的返回值
写出的多媒体文件概率性出问题
调用 av_interleaved_write_frame
或 av_write_frame
时加上锁
内存一直涨
AVFrame
没有释放AVPacket
没有释放AVAudioFifo
写入速度大于读取速度
解决方式:注释掉所有可能有内存泄露的地方,直到不泄露时,一行一行解开注释调试
音频播放速度变快或变慢
确认音频的采样率及通道数
音频播放时候大体正常,但会有规律的出现杂音
播放时不要使用 linesize
,自己计算长度
音频失真
排查音频编码方式是否正确
开始播放视频时,出现几秒绿屏,后面才正常
绿屏出现原因是,YUV像素格式的所有值均为0,所以原因很可能是还没有接收或解析到视频帧,但将空的帧数据绘制到屏幕上了
没法使用
h264_high
进行编码,即使设置后,也会退化为h264_main
或h264_baseline
编码速度从 ultrafast
调整为 superfast
或更慢