美文网首页音视频
音视频时间戳计算

音视频时间戳计算

作者: cx7 | 来源:发表于2018-11-08 21:10 被阅读0次

    时间戳

    时间戳分为解码时间戳(DTS)和显示时间戳(PTS) 分别表示某一帧解码和显示相对于起始时间的时间戳
    通常来说视频不带B帧的情况下 视频的DTS和PTS相同
    带B帧的情况下 由于B帧是前后双向参考编码
    B帧的解码时间戳可能会晚于它的显示时间戳 这种情况下DTS和PTS不同
    音频的DTS和PTS则始终相同

    时间戳的计算

    计算时间戳时涉及到几个概念

    1. 采样频率 : 表示时间戳的增量单位
      采样频率假设为1000HZ 则表示一秒采样100次 时间戳的单位就是1ms 也即是时间基
      设为90000HZ 则表示一秒采样90000次 时间戳的增量等于1/90ms
      这里的采样频率指的是时间戳的采样频率 和音频的采样频率概念不同
    2. 帧率 : 视频一秒的显示帧数
      常见的有25fps 30fps 60fps这些帧率
    3. 音频采样频率 : 音频一秒的采样次数
    4. 音频采样数 : 某种音频格式一帧的采样次数
      比如一帧AAC包含1024次采样的数据 也就是1k字节的数据
      一帧mp3则包含1152次采样的数据

    视频时间戳的计算

    视频时间戳计算公式 : video_ts = n * ts_freq / fps;
    n : 第n帧视频
    ts_freq : 选定的时间戳的采样频率
    fps : 视频帧率
    
    1. 计算时间戳首先需要选定采样频率从而计算出时间基
      ffmpeg选择的时间基是1000 所以ffmpeg的时间戳单位是ms(1s=1000ms)
      RTP则规定视频的时间基必须是90000 这么做是为了兼容25fps 29.97fps 30fps这些帧率
      90000恰好是25,30,60fps的倍数
    2. 时间戳的增量确定后 比如1000hz的采样频率对应增量1
      fps假设为25 那么一帧可以得到40ms的时间显示 时间戳的增量(上一帧和下一帧的间隔)
      就应该等于40 * 1 = 40ms

    音频时间戳的计算

    音频时间戳计算公式 : audio_ts = n * frame_size * ts_freq / sample_rate
    n : 第n帧音频
    ts_freq : 选定的时间戳的采样频率
    frame_size : 一帧音频的采样数 也即是帧的大小
    sample_rate : 音频的采样频率
    
    1. 音频的时间戳采样频率一般选1000
    2. 音频帧的播放时间=一个AAC帧对应的采样样本的个数/采样频率(单位为s)

    相关文章

      网友评论

        本文标题:音视频时间戳计算

        本文链接:https://www.haomeiwen.com/subject/qwrwxqtx.html