频道栏目
首页 > 资讯 > 其他 > 正文

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

17-05-03        来源:[db:作者]  
收藏   我要投稿

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;

相关TAG标签
上一篇:FloatMath.sqrt android6.0 23报错
下一篇:android studio 设置Eclipse Code Formatter的图文教程
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站