FLV科普7 FLV时间戳计算

论坛 期权论坛 脚本     
匿名网站用户   2020-12-21 08:15   54   0

题记:时间戳将每一秒分成90000份,即将每一毫秒分成90份 在flv中直接存储的都是毫秒级 在TS存储的是时间戳级

其中TS、flv一般按照编码顺序排列

一个视频tag一般只包含一帧视频的码流

其中视频tag的时间戳对应的是解码时间戳(DTS/90)

当前序列:

编码顺序 I P P B B B......
对应帧号 0 1 5 3 2 4.......

flv对每一个tag都规定了它将要播放的时间戳

每个时间戳都可以对应转换特性的时间
其中script(脚本)、video(视频)、audio(音频)的第一个tag的时间戳值都为0
时间戳占4个字节 其中第四个字节是高位 前三个字节是低位(每个tag的5~8字节)
如6E 8D A8 01 = 0x 01 6E 8D A8 = 24022440
其中时间戳与时刻的转换代码如下:
#include "stdio.h"

int main()
{
    unsigned int timestamp = 0;

    while(scanf("%d",×tamp)!=EOF)
    {
        int hour = timestamp/(3600*1000);
        printf("%2d:",hour);
        timestamp-= hour * 3600*1000;
        int minutes = timestamp/(60*1000);
        timestamp-= minutes * 60*1000;
        printf("%2d:",minutes);
        int seconds = timestamp/1000;
        printf("%2d:",seconds);
        timestamp-= seconds*1000;
        printf("%3d\n",timestamp); //millisecond       
    }
    return 0;

}

CompositionTime 每个视频tag的第14~16字节(表示PTS相对于DTS的偏移值 )

CompositionTime 单位为ms 显示时间 = 解码时间(tag的第5~8字节) + CompositionTime

例如(注意显示时间最后一个字节是高位
tag0 (脚本) :时间戳为0
tag1 (视频) :第一个视频时间戳 值为0 无CompositionTime (头信息)
tag2 (音频) :第一个音频时间戳 值为0
tag3 (视频) :00 00 00 00 值:0 00:00:00:00 (解码时间) CompositionTime:0x 00 00 50 值:80 00:00:00:80I帧显示时间:00:00:00: 80 poc=0
tag4 (视频) :00 00 28 00 值:40 00:00:00:40 (解码时间) CompositionTime:0x 00 00 50 值:80 00:00:00:80 P帧 显示时间:00:00:00: 120 poc=1
tag5 (视频) :00 00 50 00 值:80 00:00:00:80 (显示时间) CompositionTime:0x 00 00 C8 值:200 00:00:00:200 P 显示时间:00:00:00: 280 poc=5
tag6 (音频) :00 00 50 00 值:80 00:00:00:80(显示时间)
tag7 (音频) :00 00 67 00 值:103 00:00:00:103(显示时间)
tag8 (视频) :00 00 78 00 值:120 00:00:00:120 (解码时间) CompositionTime:0x 00 00 50 值:80 00:00:00:80 B显示时间:00:00:00: 200 poc=3
tag9 (音频) :00 00 7E 00 值:126 00:00:00:126(显示时间)
tag10 (音频) :00 00 96 00 值:150 00:00:00:150(显示时间)
tag11 (视频) :00 00 A0 00 值:160 00:00:00:160(解码时间) CompositionTime:0x 00 00 00 值:00 00:00:00:00 b显示时间:00:00:00: 160poc=2
tag12 (音频) :00 00 AD 00 值:173 00:00:00:173(显示时间)
tag13 (音频) :00 00 C4 00 值:196 00:00:00:196(显示时间)
tag14(视频) :00 00 C8 00 值:200 00:00:00:200(解码时间) CompositionTime:0x 00 00 28 值:40 00:00:00:40 b显示时间:00:00:00: 240 poc=4

我们可以看到 每个视频tag相差约40ms 刚好是25fps视频 每帧视频的播放时长

在上例中,我们会看到按照解码时间排列

编码顺序 I P P B B B......
对应帧号 0 1 5 3 2 4.......




分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP