ffmepg中的时间戳,是以微秒为单位,关乎timebase变量,它是作为dts、pts的时间基准粒度,数值会很大。

static intmpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt)

{

。。。

constint64_t delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE) * 2;

//开始时,pkt->dts为0,pkt->pts为7200。

int64_tdts = pkt->dts, pts = pkt->pts;

if(ts->copyts < 1) {

if (pts != AV_NOPTS_VALUE)

pts += delay;  //pts为133200

if (dts != AV_NOPTS_VALUE)

dts += delay; //dts为126000

}

。。。

}

视频

编码前,会设置帧率,如1秒25帧, 按90000的时间基,一帧就是3600。

avcodec_encode_video2成功后(如ffmpeg.c中do_video_out),pkt->pts被设置成帧序号,如33帧。

紧接着是av_packet_rescale_ts(&pkt, enc->time_base, ost->st->time_base);这个函数的分析如下:

void av_packet_rescale_ts(AVPacket *pkt,

AVRational src_tb,  //这个是个时间基,就是我们设置的帧率(num=1,den=25)

AVRational dst_tb) //这个是视频的时间基,就是(num=1,den=90000)

{
    if (pkt->pts != AV_NOPTS_VALUE)
        pkt->pts = av_rescale_q(pkt->pts, src_tb, dst_tb);       //帧序到时间的转换
    if (pkt->dts != AV_NOPTS_VALUE)
        pkt->dts = av_rescale_q(pkt->dts, src_tb, dst_tb);
    if (pkt->duration > 0)

pkt->duration = av_rescale_q(pkt->duration, src_tb, dst_tb);

......

}

最终ptk->pts变成了118800,除以3600刚好就是33。

音频

音频帧的DTS/PTS计算:
一个音频帧(对于AAC来说, 是1024个采样点),
相对于音频采样率(如 44100个采样点/second = 44.1KHz)来说,

累加上每帧的增量(1024*1000/44100 = 23.219ms/frame)

1024*1000/48000= 21.333ms/frame

mp3 每帧均为1152个字节, 则:

frame_duration = 1152 * 1000 / sample_rate

例如:sample_rate = 44100HZ时,计算出的时长为26.122ms,这就是经常听到的mp3每帧播放时间固定为26ms的由来。

问题:

Queue input is backward in time

Non-monotonous DTS in output stream 0:1; previous: 359040, current: 0; changing to 359041. This may result in incorrect timestamps in the output file.

*** dropping frame 100 from stream 0 at ts 0

.....

*** dropping frame 100 from stream 0 at ts 97

[hls @ 0x23015c0] Non-monotonous DTS in output stream 0:1; previous: 359227, current: 359040; changing to 359228. This may result in incorrect timestamps in the output file.

此问题由于音频突然出现了错误,导致输出音频的DTS变为0,这样为了保证音视频同步,再来的视频帧先丢掉,知道音视频DTS接近。

ffmpeg时间戳计算相关推荐

  1. ffmpeg time_base、FFmpeg时间戳整理、 ffmpeg 时间戳问题汇总

    转自:http://www.cnitblog.com/luofuchong/archive/2014/11/28/89869.html https://www.suninf.net/2018/02/f ...

  2. 自定义起始时间的时间戳计算(个人代码记录)

    个人代码记录,这个时间戳计算,由于项目数据特殊需求,自己设置的时间戳起始时间为2019年1月1日开始, 然后根据时间戳数据计算出现在时间,具体使用如下,这里setFullYear的月份是0到11,所以 ...

  3. android 时间差 秒_Android进阶之使用时间戳计算时间差

    本文实例为大家分享了Android使用时间戳计算时间差的具体代码,供大家参考,具体内容如下 因当前项目需要计算时间差,进行数据处理,所以在Csdn上找了一下,之后修修补补是可以用的,建议大家如果用到项 ...

  4. 面试题:根据Unix时间戳计算时间

    根据Unix时间戳计算时间,不分年月大小,每月三十天,每年按360天计算.开始时间1970/01/01 00:00:00,输入秒数,显示时间 思路一:进位,60秒进1分钟,60分进1小时,24小时进1 ...

  5. go 的时间与时间戳计算

    unix时间戳 unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数. go计算unix 时间戳 timestamp := time.Now().Unix() fmt.Prin ...

  6. SHELL脚本下获取文件时间转换时间戳,使用时间戳计算日期差

    SHELL脚本下获取文件时间使用时间戳计算日期差 获取时间戳按秒计算 获取 LINUX获取当前时间的时间戳 获取文件的时间戳 计算 获取时间戳按秒计算 获取 LINUX获取当前时间的时间戳 #确认时间 ...

  7. 在线时间戳计算时间差

    在线时间戳计算时间差 在线时间戳计算时间差 Unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒.Unix时间戳(英文为Unix epoch, Unix time, ...

  8. ExoPlayer 中的音频时间戳计算

    ExoPlayer 中的音频时间戳计算 ExoPlayer 中的音频时间戳计算 一 Audio 时间戳的计算 1.1 handleBuffer 1.2 AudioTrackPositionTracke ...

  9. 根据时间戳计算具体持续时间(天 时 分 秒)

    c_continueDateTime(timeStamp){// 根据时间戳计算具体持续时间,天 时 分 秒let totalTime = timeStamp;console.log(totalTim ...

  10. 通过时间戳计算天数结果为负值

    1.问题:通过时间戳计算天数结果为负值 2.原因:使用了int类型接收时间戳的差值,int类型最大值为2147483648,即天数大于24.85...天会变为负值 3.解决方式:使用long类型接收时 ...

最新文章

  1. 记一次mapreduce读取不到输入文件的问题
  2. 多种方式测量AMP328频率响应
  3. Gesture Based TableView
  4. curl wget之间的区别 以及推荐SimpRead插件
  5. Insightface项目爬坑指南+使用本地数据集训练流程(MXNET版)
  6. 面试官:你知道哪几种事务失效的场景?
  7. 基于以太坊的去中心化宠物商店构建教程
  8. sap IUT255 Integration of SAP CRM and SAP IS-U_EN_Col62.pdf
  9. oracle分片键,数据库SQL语句及性能优化
  10. js 异步执行_JS异步执行机制——事件循环(Event Loop)
  11. python哪个国家的品牌_Python之初识Web,打造属于你的个人品牌!
  12. PLSQL 的简单命令之三
  13. dz php表单发送邮件,php 发送邮件
  14. Android Palette吸色原理及源码解析
  15. 基础IT必备知识(一)
  16. 基于Labview开发TestStand用户界面时ConnectCommand List
  17. 使用IDEA工具配置和运行vue项目(详细其中的坑)
  18. 操作系统和指弹吉他的联系
  19. Android P+通过反射调用系统API实现高级功能
  20. MathType7安装使用及please restart word to load mathtype addin properly的问题。

热门文章

  1. 自动对比度、灰阶调整
  2. android 4 时间限制,Android触摸精灵
  3. python与环境统计学--两样本均值的差异显著性检验之z检验,t检验和对应例题代码展示(一)
  4. Linux上层关机和reboot流程
  5. 【寻找最佳小程序】11期:车来了——时时公交就在你身边,到站准确率可控制在90%以上...
  6. css过度效果及动画效果
  7. python中pass语句的作用是什么_Python中pass语句的作用
  8. PeopleSoft
  9. 视频分割合并软件哪个好用:试试Fast Video Cutter Joiner吧
  10. AI 让已故歌手重聚,再发4首原创新歌