美文网首页
音视频-帧、DTS、PTS

音视频-帧、DTS、PTS

作者: BKQ_SYC | 来源:发表于2019-08-15 16:31 被阅读0次

    采样率、比特率、帧率

    • 采样率:每秒钟的采样次数,声音/画面越高越连贯,单位为Hz
    • 比特率:在视频领域又称码率,每秒传送的bit数,越高则传的数据越多且画质越清晰,单位为bps(bit per second),MediaFormat.KEY_BIT_RATE
    • 码流率/码率/采样率:单位时间使用的数据流量,单位kb/s。该值越大,则精度越高,画面质量越高,体积越大
    • 帧率/帧速率:每秒钟刷新的图片帧数,单位fps(frame per second)。该值越高,动画越流畅,越逼真。MediaFormat.KEY_FRAME_RATE

    • 视频播放是一帧一帧的画面按照时间顺序呈现出来的
    • 为保证传输,会对视频进行压缩,所以,每一帧并不都完整
    • 视频帧分为:I帧、P帧、B帧

    I帧:帧内编码帧,不依赖前后帧
    P帧:帧间预测编码帧,需参考前面的I帧才能进行编码。表示当前帧与前一个I帧或者P帧的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。
    B帧:双向预测编码帧,记录的是本帧与前后帧的差别。解码时不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面与本帧数据的叠加取得最终画面。

    I帧只考虑本帧;P帧记录与前一帧(前一个I帧或者P帧)的差别;B帧记录的是前一帧及后一帧的差别

    问题

    1. B帧或P帧提前到达,必然会导致视频无法解码,如何解决?
    2. 三种帧之间的解码依赖关系如何?
    3.三种帧解码顺序如何?解码顺序和显示顺序有何关联?

    说明

    采集阶段:
    假定摄像头采集帧顺序为a b c d e。
    最终编码结果是:a编码成I帧,b、c、d编码成B帧,e编码成P帧。
    
    编码阶段:
    1 先编码a,编成I帧
    2 b、c、d编码成B帧,先缓存并记录采集时间点,后续作为PTS基准
    3 编码e,编成P帧 (注意:e虽先编码,DTS相对b、c、d靠前,但采集时间晚,因此PTS大于b、c、d) 
    4 编码b、c、d,编成B帧
    
    存储阶段:
    编码后立即经过mux写文件,所以存储顺序和编码顺序是一致的,编码顺序(DTS)为:
    a(I)   e(P)   b(B)   c(B)   d(B)
    
    解码阶段:
    a为I帧,e为P帧需要以a为基准才能解码,b、c、d为B帧需要以a和e为基准才能解码,所以最后解码顺序为:
    a   e   b   c   d
    
    显示阶段:
    帧的解码顺序由DTS决定,但帧的显示顺序由PTS决定,该顺序即为采集顺序,因此,显示顺序为:
    a   b   c   d   e
    

    DTS、PTS

    • DTS(Decoding Time Stamp):解码时间戳,用于告诉播放器该在什么时候解码这一帧的数据。
    • PTS(Presentation Time Stamp):显示时间戳,用于告诉播放器该在什么时候显示这一帧的数据。
    • 当视频流中无B帧时,通常DTS和PTS的顺序是一致的
    • 音频中无B帧,所以音频的DTS和PTS顺序是一致的

    音视频同步,通常需要选择一个参考时钟,参考时钟上的时间是线性递增的,编码音视频流时依据参考时钟上的时间给每一帧数据打上时间戳。播放时,读取数据帧上的时间戳,同时参考当前参考时钟上的时间来安排播放。

    相关文章

      网友评论

          本文标题:音视频-帧、DTS、PTS

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