在正常开发中遇到花屏时怎么处理呢?可以把解码后的数据直接保存成帧图片保存起来,然后直接看图片有没有花屏来排除是否是显示的问题,如果花屏,则代表显示无问题,如果图片中没有花屏,则可以往显示的方向去排查了。
void saveFrame(AVFrame* pFrame, int width, int height, int iFrame)
{
FILE *pFile;
char szFilename[32];
int y;
//如果在android上
//sprintf(szFilename, "sdcard/frame%d.ppm", iFrame);
sprintf(szFilename, "frame%d.ppm", iFrame);
pFile = fopen(szFilename, "wb");
if (pFile == NULL)
return;
fprintf(pFile, "P6\n%d %d\n255\n", width, height);
/*
pFrame->data[0]是数据头,y是目前写入的行数,pFrame->linesize[0]是每行的字节数,
pFrame->data[0]+y*pFrame->linesize[0]就是每行数据开头的地址。width是每行像素个数,
width*3就是每行要写的数据个数,以像素分量为单位。
*/
for (y = 0; y < height; y++)
fwrite(pFrame->data[0] + y*pFrame->linesize[0], 1, width * 3, pFile);
fclose(pFile);
}
int main(int argc, char* argv[])
{
AVFormatContext *pFormatCtx;
int i, videoI