网络协议之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/

posted @ 2015-03-27 19:22  midu  阅读(2618)  评论(0编辑  收藏  举报