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;


                                              


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值