ffmpeg 3.2版本播放ts流正常,但是录制成为MP4的文件播放黑屏

          终于把黑屏的问题解决了。

          场景:用ffmpeg 3.2的库播放ts流或者m3u8文件正常,但是录制成为MP4文件的时候,只有声音,是黑屏的。

          解决过程:Step1:采用ffmpeg 2.7进行ts流的录制,存为A.mp4,录像播放正常

                            Step2:通过Video Pro Analyzer 工具分析每一包数据,第一帧的数据大小是19396字节

                            Step3:采用采用ffmpeg 3.2进行ts流的录制,存为B.mp4,录像播放只有声音,没有画面。A和B保证                                         是从同一地方录制(有少许误差),保证第一帧是同一个画面。

                            Step4:通过Video Pro Analyzer 工具分析每一包数据,第一帧的数据大小是19410字节

                            Step5:再次重复上述动作,对原文件是MP4进行录制,发现数居一致。

                           Step6:进而初步判断利用ffmpeg3.2,执行   

                                       

                 AVPacket stPkt;

                 int      iFlag = 0;

                 int      iRet = 0;

    

                 _RE_READ :

                 av_init_packet(&stPkt);

                iRet = av_read_frame(thiz->pstCtx, &stPkt);


                操作后,得到的AVPacket的size多了14个字节。

      解决办法:在dumxer ts流的时候,判断如果是H264,对长度进行减14,

              

    if (AV_CODEC_ID_H264 == thiz->pstCtx->streams[iIndex]->codec->codec_id && 

            pstPkt !=NULL && pstPkt->data != NULL && pstPkt->size > 0)

    {

         pstPkt->size = pstPkt->size -14;

    }

            结果:录制出来的MP4文件播放正常。

          (备注:1 之前采用的ffmpeg是2.7版本,现在换为3.2版本

                        2   2.7版本 设置

AVCodecContext的flags 如下:pstCodec->flags   =  CODEC_FLAG_GLOBAL_HEADER,

           3.2版本改为 如下:pstCodec->flags   =  AV_CODEC_FLAG_GLOBAL_HEADER;


                                              


你可能感兴趣的:(知识点积累)