zoukankan      html  css  js  c++  java
  • 网络协议之ts---ts 流分析详解

    名词缩写翻译:

    es:elements stream 基本流

    pes:packet elements stream 打包流

    pts:presentation time stamp 显示时间戳

    dts:decoding time stamp  解码时间戳

    pcr:program clock referrence 节目时钟参考

    pat:program association table节目关联表

    pmt:program map table 节目映射表

    sdt:service description section 服务描述段

    vbv:video buffer verifer 视频缓冲验证

    psi:节目专用信息PSI(Program Specific Information)

    std:PTS表示显示单元出现在系统目标解码器(STD: system target decoder)的时间

    SCR:(system clock reference) 系统时钟参考 for es sync

    STC:(system time clock) 系统时间时钟 for es sync

    AVI / PS(Program Stream)/ TS(Transport Stream)/ MKV(Matroska)

    (0)264 转换成ts

     

    (1)ts packet 打包发送

    (2)ts demux 解析

    --------------------------------------------author:pkf

    ----------------------------------------------------time:2014-5-4

    ----------------------------------------------------------qq:1327706646

    (0)264 转换成ts

     264->es->pes->ts

     在打包成pes的时候,需要注意的一个问题就是pts/dts,其单位应该是系统时钟。需要在找到每个图像的起始slice的时候,在打包成pes的时 候加上pts/dts。这次的CMMB中,其视频帧只含I/P图像(帧),且每个图像只有1个片,所以就在读取264原始数据时读到I_slice或 P_slice的时候,一并打入pts。CMMB流正好又有现成的pts,只需读出来,按照CMMB中的换算方法,每22500就是1秒,就能得出pts 的值,而不需要我自己手动的去计算添加。每个IPB帧的包头都有一个PTSDTS,但PTSDTSB帧都是一样的无须标出B帧的DTS。对I帧和P帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再显示,一定要分别标明PTSDTS
     
          例如,视频帧率为25HZ的时候,即1秒25帧,每帧的间隔40ms。按90Khz的视频频率来算的话,其对应的系统时钟数应该是
          1/25*90000 = 3600 个clk。
         所以当分析pes时,其pts字段的33个bit算出来的话,就是按这个clk为单位的。相邻的视频帧的pts之差值为3600.
     http://blog.sina.com.cn/s/blog_92b4f4910101ciku.html
         2、pes -> ts
         h264打包成ts的时候,还需要打入pat和pmt。pmt里指定了视频的类型和pid。
         pes打包的时候,按ts协议格式封装即可。
         PCR使用和视频一样的pid,这里把pts当成pcr打进ts包。
    http://blog.sina.com.cn/s/blog_92b4f4910101ciku.html
    http://blog.csdn.net/zxh821112/article/details/17587215

    (1)ts packet 打包发送

    1, MPEG-2 TS中的PSI
    PSI信息主要包括以下的表:
        PAT(Program Association Table):节目群丛表,该表的PID是固定的0x0000,它的主要作用是指出该传输流ID,以及该路传输流中所对应的几路节目流的 MAP 表和网络信息表的PID。
        PMT(Program Map Table):节目映射表,该表的PID是由PAT提供给出的。通过该表可以得到一路节目中包含的信息,例如,该路节目由哪些流构成和这些流的类型(视频,音频,数据),指定节目中各流对应的PID,以及该节目的PCR所对应的PID。
        NIT(Network Information Table):网络信息表,该表的PID是由PAT提供给出的。NIT的作用主要是对多路传输流的识别,NIT提供多路传输流,物理网络及网络传输的相关的一些信息,如用于调谐的频率信息以及编码方式。调制方式等参数方面的信息。
        CAT(Conditional Access Table):条件访问表,PID - 0x0001。
    除了上述的几种表外,mpeg-2还提供了私有字段,用于实现对MPEG-2的扩充。

    2, DVB中的SI
    Mpeg-2的PSI中提供了不少的相关节目组成和相互关系的信息,从而使得在接收端可以正确的对多路传输流进行分解。但是这些信息在实际使用时仍显得不够,为此在DVB中采用SI对PSI信息进行了进一步的扩展。
    除了在PSI中的信息之外,DVB还定义了一些其他的一些表。
    SI的主要用途有:
    a、根据NIT,PAT,PMT等信息可以进行自动的频道调谐;
    b、更方便的对节目进行选择和定位;
    c、实现电子节目指南EPG(Electronic Program Guide),等等。
    PSI中的信息基本上都是与当前码流相关的,即它们所涉及的内容都与当前码流中的部分信息相关。与PSI不同的是,SI的信息可以包括不在当前码流中的一些服务和事件,允许用户进行更多的选择和了解更多的其他服务信息。
    DVB规定携带SI信息的传输包必须用指定的PID,指定的PID如下表:

    TABLE TYPE                PID Value
    PAT                                0X0000
    CAT                               0X0001
    TSDT               0X0002
    RESERVED                   0X0003 TO 0X000F
    NIT,ST                         0X0010
    SDT,BAT,ST 0X0011
    EIT,ST                         0X0012
    RST,ST                        0X0013
    TDT,TOT,ST             0X0014
    Network Synchroniztion 0X0015
    Reserved for future use 0X0016 TO 0X001B
    Inband signaling             0X001C
    Measurement                 0X001D
    DIT                                 0X001E
    SIT                                 0X001F

    在该表中可以看到同一个PID可以对应不同的表,要把这样的表区分开来,需要进一步找到TableID 进行识别。TableID表如下:         
    Value   Description 
    0x00 Program_association_section
    0x01 Conditional_access_section
    0x02 Program_map_section
    0x03 Transport_stream_description_section
    0x04 TO 0x3F Reserved
    0x40 Network_information_section-actual_network
    0x41 Network_information_section-other_network
    0x42 Service_description_section-actual_transport_stream
    0x43 TO 0x45 Reserved for future use
    0x46 Service_description_section-other_transport_stream
    0x47 TO 0x49 Reserved for future use
    0x4A Bouquet_association_section
    0x4B TO 0x4D Reserved for future use
    0x4E Event_information_section-actual_transport_stream,P/F
    0x4F Event_information_section-other_transport_stream,P/F
    0x50 TO 0x5F Event_information_section-actual_transport_stream,schedule
    0x60 TO 0x6F Event_information_section-other_transport_stream,schedule
    0x70 Time_data_section
    0x71 Running_status_section
    0x72 Stuffing_section
    0x73 Time_offset_section
    0x74 TO 0x7D Reserved for future use
    0x7E Discontinuity_information_section
    0x7F Selection_information_section
    0x80 TO 0xFE User defined
    0xFF Reserved
    有了这两个ID我们可以在码流中找到我们想要的任何一张表。
    SI主要包括以下一些信息表:
    NIT(Network Information Table):NIT的作用主要是对多路传输流的识别,NIT
    提供多路传输流,物理网络及网络传输的相关的一些信息,如用于调谐的频率信息以
    及编码方式。调制方式等参数方面的信息。根据此信息设置IRD(Integrated Receiver
    Decoder)可以进行多路传输流之间的切换。 
    SDT(Service Description Table):用于描述系统中各路节目的名称,该节目的提
    供者,是否有相应的时间描述表等方面的信息。该表可以描述当前传输流,也可以描
    述其他的传输流,这由TableID进行区分。
    EIT(Event Information Table):该表示对某一路节目的更进一步的描述。它提供
    事件的的名称,开始时间,时间长度,运行状态等。
    TDT(Time and Data Table):该表提供当前的时间信息,该表用来对IRD的解码
    时钟进行更新
    BAT(Bouquet Association Table):该表提供一系列类似节目的集合。这些节目
    可以不在同一个传输流中,利用该表可以很方便的进行相关节目或某一类节目的浏览
    和选择。
    RST(Running Status Table):该表提供某一具体事件的的运行状态,可用于按时
    自动的切换到指定的事件
    TOT(Time Offset Table):该表提供当地时间与TDT之间的关系,该表与TDT
    配合使用。
    TSDT(Transport Stream Description Table):由PID0x0002标识,提供传输流的一
    些参数.
    ST(Stuffing Table):该表表明其内容是无效的,只是作为填充字节。

    send ts

    http://blog.csdn.net/xsckernel/article/details/39671025 打包流

    (2)ts demux

    http://blog.csdn.net/zxh821112/article/details/17587215 ts流格式

    http://blog.chinaunix.net/uid-9688646-id-1998407.html ts解码过程

    http://www.360doc.com/content/11/0727/11/7399771_136097761.shtml pts dts

    http://blog.csdn.net/heanyu/article/details/6229724 概念缩写

    http://ttxk.blog.163.com/blog/static/16335079200975115823959

    http://blog.csdn.net/haomcu/article/details/7162012  dvb si psi

    http://news.cnblogs.com/n/520273/  酷炫动画

    http://www.matrix67.com/ m67

    http://i.m67.blog.163.com/blog/#m=0 关于青春淡淡的稀里哗啦

    http://blog.163.com/laorenyuhai126@126/blog/static/19350779201045080528/

  • 相关阅读:
    day63-webservice 03.解析cxf提供的例子
    day63-webservice 02.cxf环境搭建
    30个非常有趣的404错误页面设计欣赏
    30个非常有趣的404错误页面设计欣赏
    30个非常有趣的404错误页面设计欣赏
    JS一些常用的类库
    JS一些常用的类库
    JS一些常用的类库
    100+ 值得收藏的 Web 开发资源
    100+ 值得收藏的 Web 开发资源
  • 原文地址:https://www.cnblogs.com/pengkunfan/p/4372675.html
Copyright © 2011-2022 走看看