酷咪哥 2016-08-19 14:09 采纳率: 100%
浏览 3690
已采纳

FFMPE的pkt的PTS如何计算

使用av_read_frame读取的pkt,发现个别pkt.pts是AV_NOPTS_VALUE,求问如何正确的对该值进行计算呢?

目前使用了两种方法,效果都不好:
#if 0
if(pkt.pts==AV_NOPTS_VALUE){
ms_waring( "The stream(%d:%s) has no pts,auto set it", type,(type==AVMEDIA_TYPE_VIDEO) ? "video" : "audio" );
AVRational time_base1=in_stream->time_base;
int64 calc_duration=(double)AV_TIME_BASE/av_q2d(ifmt_ctx->streams[push_param->flagopt.videostream_index]->r_frame_rate);
pkt.pts=(double)(vframe_index*calc_duration)/(double)(av_q2d(time_base1)*AV_TIME_BASE);
pkt.dts=pkt.pts;
pkt.duration=(double)calc_duration/(double)(av_q2d(time_base1)*AV_TIME_BASE);
}
#else

if(pkt.pts==AV_NOPTS_VALUE){
ms_waring( "The stream(%d:%s) has no pts,auto set it", type,(type==AVMEDIA_TYPE_VIDEO) ? "video" : "audio" );
double m_frameRate = in_stream->r_frame_rate.num /(double)in_stream->r_frame_rate.den;
int64_t pts = (int64_t)(AV_TIME_BASE * vframe_index / m_frameRate);
pts = av_rescale_q(pts, AV_TIME_BASE_Q, in_stream->time_base);
if (in_stream->first_dts > -AV_TIME_BASE){
pts += in_stream->first_dts;
}
//pkt.pts=pts;
}
#endif

  • 写回答

1条回答 默认 最新

  • devmiao 2016-08-19 16:00
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献