利用ffmpeg解码H264,花屏
UINT CMP4File::VideoCap_Thread_Fun(void* pParam)
{
CMP4File *pMP4File=(CMP4File*)pParam;
//初始化AVPacket
av_init_packet(&pMP4File->m_AVPacket);
int nFrameFinished = 0;
while(true)
{
if(av_read_frame(pMP4File->m_pFormatCtx, &(pMP4File->m_AVPacket)) >=0) {
int nDecodeResult=avcodec_decode_video2(pMP4File->m_pCodecContext, pMP4File->m_pFrame,
&nFrameFinished, &(pMP4File->m_AVPacket));
if(nDecodeResult>0)
{
if(nFrameFinished>0)
{
int iReturn=sws_scale(pMP4File->m_pSwsContext, pMP4File->m_pFrame->data,
pMP4File->m_pFrame->linesize, 0, pMP4File->m_nFrameHeight,
pMP4File->m_pRGBFrame.data, pMP4File->m_pRGBFrame.linesize);
AVFRAME_INFO pFrame;
memset(&pFrame, 0, sizeof(AVFRAME_INFO));
int m=1980, n=1080;
pFrame.uWidth=pMP4File->m_nFrameWidth;
pFrame.uHeight=pMP4File->m_nFrameHeight;
//显示
unsigned char* outStream = (unsigned char*)(pMP4File->m_pRGBFrame.data[0]);
pMP4File->Drawer(&pFrame, outStream);
av_free_packet(&pMP4File->m_AVPacket);
}
}//if
}
return 0;
}
1 花屏的原因
2 视频的类型,如H264、MPEG,视频流的长度,在那个函数获得?
3 其实是播放MP4文件,提供解码MP4文件类似的代码吗?
谢谢! ffmpeg
[解决办法]
avcodec_decode_video2返回的是处理的字节数,这个要去ffmpeg的头文件里面找。
意思:
avcodec_decode_video2(AVCodecContext,解码后AVFrame,是否成功?,解码前AVPacket)