首先,ts主要是用于dvb的传输,ts可以理解成一种传输上的协议,要不怎么叫transport-stream,但是也可以理解成一种封装格式。
不管是ts文件,还是ts实时流,都可以这样来看,它由N个独立的packet构成,每个大小188Bytes。
每个packet都由两部分构成,header和data,header描述了一些关于这个packet的信息,而data就是这个packet所携带的音频数据,视频数据,字幕数据,当然也可能是节目信息数据。
typedef struct _tag_PACKET_HEADER {
//同步字节,总是0x47(0100 0111),表示这个包是正确的ts包
unsigned sync_byte: 8; 
//传输错误指示符,1:暂且定义为本包有个无法修复的错误
unsigned transport_error_indicator: 1; 
//负载单位开始指示符,1:PES或者PSI的开始部分,0:其他
unsigned payload_unit_start_indicator: 1; 
//传输优先指示符,1:比相同PID的包有更高的优先级
unsigned transport_priority: 1; 
//Packet ID
unsigned PID: 13;
//加扰控制指示符
//00:未加扰(俗称清流);01:留着等以后使用
//10:以even key方式加扰;11:以odd key方式加扰
unsigned scrambling_control: 2;
//适配区存在指示符
//00:留着等以后使用;
//01:本报不含适配区,只有负载区
//10:本包只含适配区,没有负载区
//11:本包不仅含有适配区,还含有负载区
//其实可以把这两bit分开来理解,第一个bit指示是否有适配区,第二个指示是否有负载区
unsigned adaptation_field_exist: 2;
//当本包目前有负载区时,它才回递增
//例如,当上面的字段为01or11时,本字段才回递增
unsigned continuity_counter: 4;
} PACKET_HEADER;
以上就是header的结构,可见sizeof(PACKET_HEADER) == 4 Bytes
根据header的情况,我可以推测出剩余的PACKET_DATA最长只有184Bytes了
typedef _tag_PACKET_DATA {
//0或者更长,依据PACKET_HEADER.adaptation_field_exist的第一bit而定
struct adaptation_field;
//0或者更长,依据PACKET_HEADER.adaptation_field_exist的第二bit而定
struct payload_data
}
下面请看adaptation_field的结构定义:
typedef struct adaptation_field {
//本区域除了本字节剩下的长度(不包含本字节!!!切记)
adaptation_field_length: 8;
//不连续指示符
//1:本ts包在continuity_counter或者PCR,是处于不连续状态的
discontinuity_indicator: 1;
//可随机访问指示符
//1:本包中的PES包可以启动一个视频/音频序列
//就是说如果是1,可以从这个包开始牵出该条ES流
random_access_indicator: 1;
//es流优先级指示符
//1:当同pid时,该es流有更高级的优先权
elementary_stream_priority_indicator: 1;
//Program Clock Reference,含有“节目时钟参考”标志
//1:适配区里面含有PCR field字段,0:不含有
PCR_flag: 1;
//1:适配区里面含有splice_countdown字段
splicing_point_flag: 1;
//1:适配区里面含有private_data_bytes字段
trasport_private_data_flag: 1;
//1:适配去里面含有adaptation_field_extension字段
adaptation_field_extension_flag: 1;
//下面几个字段依据上面几个指示器的值而存在与否
//Program Clock Reference,共6个字节,48bits,大端模式存储!
//33bits是基本的,6个填充bits,9个扩展bits
//时间参考,至少约100ms会确定一次audio和video之间的同步问题
PCR: 33+6+9;
//Original Program Clock Reference
//原始PCR,当一个ts包被复制到另一个包里面去了,这里保留其原始的PCR值
OPCR: 33+6+9
//分隔倒数器,我自己翻译的,求指点
//表示当一个分割点出现时,从这个ts包起,还剩多少个ts包(有可能是负数)
splice_countdown: 8;
//填充字节,全0xFF,目的是为了使得每一个packet的长度为188Bytes
//这个的结果可以使得码流为恒定值
//当然,如果一次想携带的内容超过184字节了怎么办?那就得分隔成多个ts packet了
stuffing_bytes: 不定长;
}
看完adaptation_field了,那struct payload_data呢?即使有,其实也没什么值得看的,payload_data结构就是所携带的纯粹的数据了,那个没什么好说的,但是还是遵守不足184Bytes就填充FF,超过184Bytes就分隔的原则啦。
所以ts包可以这样表示
【header】+【data】 == 【188Bytes】
【header】== 4 Bytes
【data】 == 184 Bytes == 【adaptation_field】+【payload_data+填充】
【adaptation_field】 == adaptation_field->adaptation_field_length
【payload_data+填充】 == 184 - field.adaptation_field_length
如果有兴趣,直接耐住性子看【http://mumudvb.braice.net/mumudrupal/sites/default/files/iso13818-1.pdf 】,会更加详细,透彻地了解mpeg2-ts

mpeg2-ts格式解析相关推荐

  1. MPEG2 TS与ISMA的比较

    简单的比较如下: MPEG-2 TS/UDP方式将媒体数据,包括视频.音频和其他数据封装成MPEG-2 TS格式,再承载在UDP和IP协议之上,其优点是能够承载不同编码标准的媒体数据,并且视频和音频数 ...

  2. 数字电视之TS流解析

    做了这么久的TV方案,对数字电视也很了解,今天来总结一下,MPEG-2 TS流解析的细节: TS流中有两种标识符,一种是包标识符,一种是表标识符.具有相同PID的不用信息表由表标识符table Id来 ...

  3. MPG(MPEG2 Program Stream)格式解析

    参考自: https://blog.csdn.net/yu_yuan_1314/article/details/11477261 https://blog.csdn.net/dancing_night ...

  4. MPEG-TS 格式解析

    文章目录 #一.背景介绍 MPEG-TS一种标准数据容器格式,传输与存储音视频.节目与系统信息协议数据,应用于数字广播系统,譬如DVB,ATSC与IPTV.传输流在MPEG-2第1部分系统中规定,正式 ...

  5. TS流解析【PCR】自己的总结

    http://www.cnblogs.com/ztteng/articles/3166025.html http://blog.csdn.net/liuhongxiangm/article/detai ...

  6. 视频解码研究之PTS(1)TS格式和FLV格式

    相关文章: 视频解码研究之PTS(1)TS格式和FLV格式 视频解码研究之PTS(2)Mp4格式,AVI格式和MKV格式 MKV格式的PTS解析代码 FLV格式的解复用和PTS分析代码 今天来讨论下P ...

  7. 视频基础知识:告别菜鸟 高清视频编码及封装格式解析

    告别菜鸟 高清视频编码及封装格式解析 在如今的互联网时代,对于全高清视频文件来说,非常容易获取.不像以前在拨号上网的年代,可谓是资源匮乏,平时电脑看个VCD,就已经觉得是比较出色的画质了.时代在发展, ...

  8. MPEG2 TS 总汇

    MPEG2 TS的基本格式,其中包括PES,PS和TS,以及相关字段的介绍.那么作为一种传输流,TS将内容进行打包/复用,让其媒体内容变成TS传输,并最终在解码端解码.简单来看,TS是一个传输层的协议 ...

  9. ffmpeg——TS流解析

    RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据.RTSP ...

  10. 转:YUV RGB 常见视频格式解析

    转: http://www.cnblogs.com/qinjunni/archive/2012/02/23/2364446.html YUV RGB 常见视频格式解析 I420是YUV格式的一种,而Y ...

最新文章

  1. 反应式系统实现MQTT客户机
  2. 《图谋职场——最经济的图形沟通》 专题讲座圆满成功
  3. 小米wifi每天晚上准时断网_小米路由器遭恶意抹黑 官方回应:抵制这种下三滥...
  4. go语言编程小游戏--贪吃蛇
  5. xml的方式配置AOP:Aspect Oriented Programming
  6. 主流语言实现冒泡排序算法
  7. 解构控制反转(IoC)和依赖注入(DI)
  8. CTF中一点进制转换脚本记录
  9. NIO系列六:流行 NIO Framework netty 和 mina 性能测评与分析
  10. OpenCV教程(C++)
  11. 使用adb命令启动APK方法
  12. 机器学习教程 - 分步指南
  13. C语言switch语句无break
  14. 【微分方程数值解】有限差分法(二)两点边值问题数值算例(附python代码)
  15. psa加密_PSA:请注意这种新的Google翻译网络钓鱼攻击
  16. SAGAN: Self-attention GAN
  17. JavaScript------常用JS方法(utils.js)骨灰级总结
  18. 针对Arduino IDE 2.0安装后找不到端口的问题(USB转串口驱动)(Win11)
  19. win10鼠标右键恢复
  20. 计算机网络清单,网络系统材料清单

热门文章

  1. 【计算机网络】如何避免Chrome/Firefox/Edge主页被搜狗/360/2345等流氓劫持
  2. php 如何判断手机(m端)和电脑(pc端)
  3. MapGis 二次开发 注册DLL失败问题
  4. NC65【单据转换规则】新增下游单据类型,下游单据生成仅支持后台(以【到货单 23】to【其他入库单 4A】为例)
  5. Python之三天打鱼两天晒网
  6. 华为是怎么研发的(17)——组织氛围
  7. 聚类优化算法——基于Kmeans算法
  8. 2017第3周二假期里该做的事
  9. 贝叶斯优化算法python实例_贝叶斯优化/Bayesian Optimization
  10. 好玩的熊猫头表情包图片生成PHP源码+实测可用