ts复合流讲解

news2024/9/21 0:37:40

一、什么是复合流

复合流指的是一条音视频数据流中同时包含了音频ES和视频ES数据(ES指的是从编码器出来的音视频裸流比如H264,AAC)。在音视频开发中最常见的复合流一般是TS、MP4、flv等。TS和flv一般用于网络传输,MP4一般用于本地保存。

二、TS流的介绍

TS流,英文全称是 Transport Stream(传输流)。它是由MPEG公司推出来的全新的MPEG2的压碎标准,TS流的出现是为了让音视频事实交互更加方便,并且随着数字电视的发展,TS流数据在电视领域、网络音视频通信方面也扮演者举足轻重的地位。

三、TS流的数据格式

 

 TS流的数据分为三层,分别是Transport Stream层、Packet Element Stream层、Element Stream层。

 3.1Transport Stream层

Transport Stream层包含了三部分,TS Header、 Adaption Field、TS Payload。TS Header是TS层的头部,固定为4字节,Adaption Field的作用是填充188个字节,TS Payload是pes(Packet Elementary Stream层)的具体数据。

Transport Stream层主要内容包含了:PAT表、PMT表、音频流、视频流。PAT表的作用是通过PMT找到对应的音视频流。PAT表的PID值一般为0,而PAT和PMT需要不定时插入TS流。

 TS Header表格

sync byte8b字节同步,固定0x47
transport_errror_indicator1b传输错误字节符号一般为0
payload start indicator1b负载单元起始标识符,通常为1
transport priority1b传输的优先级,通常为0,0代表低优先级,1代表高优先级
PID13bTS流的PID
transport scrambling control2b传输加密控制,0b00表示没有加密
adaptional filed control2b自适应区间的判断,00代表保留,01代表无自适应区间,仅含有效负载,10仅含自适应区域,无有效载荷,11代表的是既有自适应区域和有效载荷
continutiy counter4b递增计数器,数指必须连续

Adaption Field具体内容(B表示字节)

Adaptional Field Lengt指的是自适应长度,他主要包含传输错误标识符的字节。PCR是节目时钟参考表,PCR的PTS和DTS都是对同一系统时间进行采样,PCR的值是逐渐递增的。在对TS流进行打包时,PAT表和PMT表是没有Adaptional Field的,若长度不够则使用0xff

 PAT表定义了当前TS流的所有节目、要查询节目必须从PAT表开始,PAT表指明了PMT表的PID

typedef struct TS_PAT{
    unsigned table_id                 :8  //固定位0x00,表示该表是PAT
    unsigned section_syntax_indicator :1  //段语法标志,固定为1
    unsigned zero                     :1  //固定为0
    unsigned reserved_1               :2  //第一个保留位
    unsigned section_length           :12 //表示这个字节之后有用的字节数,包括CRC_32
    unsigned transport_stream_id      :16 //传输流的ID,区别于一个网络中其他多路复用的流
    unsigned reserved_2               :2  //第二个保留位
    unsigned version_number           :5  //表示PAT的版本号
    unsigned current_next_indicator   :1  //表示发送的PAT是当前有效还是下一个有效,为1时代表当前有效
    unsigned section_number           :8  //如果PAT分段传输,那么此值每次递增1
    unsigned last_section_number      :8  //最后一个分段的号码
    for(int i=0;i<N;i++){
        unsigned Program_number           :16 //节目号
        unsigned Reversed_3               :3  //保留位
        if(Program_number == 0)
            Network_id                    :13 //网络信息表(NIT)的PID
        else
            Program_MAP_PID               :13 //节目映射表的PID,每个节目都有一个
    }
    unsigned CRC_32                   :32 //CRC32校检码
}TS_PAT

PMT表(查询当前节目中所有的PID信息,比如说有多少个VIDEO,AUDIO)

 
typedef struct TS_program_map_section{
    unsigned Table_id                    :8  //标志PSI分段的内容,对于PMT,此值为0x02
    unsigned Section_syntax_indicator    :1  //置为1
    unsigned Zero                        :1  //固定为0
    unsigned Reserved                    :2  //保留位
    unsigned Section_length              :12 //指明了自此到最后CRC_32的字节数
    unsigned Program_number              :16 //指出该节目的节目号,与PAT表对应
    unsigned Reserved                    :2  //保留位
    unsigned Version_number              :5  //取值0-31,代表当前PMT的版本号
    unsigned Current_next_indicator      :1  //代表当前PMT是否有效
    unsigned Section_number              :8  //给出了当前所处段的数目
    unsigned Last_section_number         :8  //给出了最后一个分段,即分段的最大数目
    unsigned Reserved                    :3  //保留位
    unsigned PCR_PID                     :13 //指示TS包的PCR值,该TS包含有PCR字段
    unsigned Reserved                    :4  //保留位
    unsigned Program_info_length         :12 //该字段描述跟随其后对节目信息描述的字节数
    for(int i = 0; i < N; i++)
        Descriptr()
    for(int i = 0; i < N; i++){
        unsigned Stream_type             :8  //0x00:保留, 0x01:MPEG1视频,0x02:MPEG2视频,0x03:MPEG1音频,0x04:MPEG2音频,0x05:私有字段,0x06:含有私有数据的PES包 ......
        unsigned Reserved                :3  //保留
        unsigned Elementary_PID          :13 //指示TS包的PID,这些TS包含有相同的PID
        unsigned Reserved                :4  //保留
        unsigned ES_info_length          :12 //指示跟随其后描述相关节目元素的字节数
        for(int j = 0; j < N2; j++)
            Descriptr()
    }
    unsigned CRC_32                      :32 //循环校检位
}
//:1表是占用1bit

 3.2PES层

PES层的结构是包含在TS层PAYLOAD里的,PES主要功能是在每一帧音视频数据帧添加时间戳内容。比方说在FFPLAY或VLC播发TS文件时,会出现关于PTS、DTS的数据,这就是PES的作用。

 PTS:指的就是显示时间戳,单位为90MS

 DTS:指的是解码时间戳,单位是90MS

 PCR:指的是节目时间参考,单位是90300毫秒

 3.3ES层结构

ES数据指的就是音视频裸流数据,音频裸流:H264/H265,音频裸流AAC

四、总结

ES音视频裸流加上时间戳和头部信息形成PES流,PES流加上PAT、PMT节目形成TS流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2123101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【区块链 + 人才服务】教育区域初中综合素质评价系统 | FISCO BCOS应用案例

根据国家及相关省份制定的高中阶段学校考试招生制度改革实施意见&#xff0c;全国部分地市将开展初中学生综合素质评 价工作。评价将从思想品德、学业水平、身心健康、艺术素养和社会实践五个维度来记录学生的发展过程。例如&#xff0c; 学生的党团社团活动参与情况、公益活动…

windows手工杀毒-关闭恶意弹窗

上篇回顾&#xff1a;windows手工杀毒-寻找可疑进程之网络连接-CSDN博客 上篇主要介绍了如何通过网络连接发现可疑进程。滥用公认端口的软件可能是可疑软件&#xff0c;因为占用公认端口&#xff0c;可能导致正常服务不能正常使用。可以查询ip或域名的相关情报信息&…

一篇文章了解Pytest单元测试框架

文章目录 1.Pytest是什么2.Pytest的安装3.Pytest快速入门4.Pytest文件规范5.常用的断言类型 1.Pytest是什么 pytest 是一个功能强大且灵活的 Python 测试框架,主要优点包括简洁易用、自动测试发现、丰富的插件生态系统、参数化测试、详细的断言错误信息、以及强大的 fixtures …

虚拟化数据恢复—虚拟机误还原几年前的快照怎么恢复数据?

虚拟化技术原理是将硬件虚拟化供不同的虚拟机使用&#xff0c;一台物理机上可以有多台虚拟机。人为误操作或者物理机故障会导致上层虚拟机不可用&#xff0c;甚至虚拟机里的重要数据丢失。下面给大家分享一个vmware虚拟化误操作还原快照的数据恢复案例。 虚拟化数据恢复环境&am…

基于GPT3打造你的专属的个人知识库

DocsGPT是一个基于GPT3的知识库平台&#xff0c;其支持训练、本地部署&#xff0c;并支持结果导出 https://github.com/arc53/DocsGPT DocsGPT本地部署 前置依赖&#xff1a; pippython3.8版本以上&#xff08;python3.7不支持langchain 0.0.100以上版本&#xff09;如使用ma…

【原理图PCB专题】案例:Cadence能设计一个没有管脚的器件吗?

在工作中突发奇想,如果Capture原理图中设计一个没有管脚的器件是不是可行?比如说有一些logo,如果在PCB绘制或完成时进行放置,那又怕会忘记。如果说在原理图就能放置,那么导入PCB后就可以直接变成器件的形式,是否就能完美的从设计上解决这个忘记放置的问题? 因此做一个案…

走进低代码表单开发(一):可视化表单数据源设计

在前文&#xff0c;我们已对勤研低代码平台的报表功能做了详细介绍。接下来&#xff0c;让我们深入探究低代码开发中最为常用的表单设计功能。一个完整的应用是由众多表单组合而成的&#xff0c;所以高效的表单设计在开发过程中起着至关重要的作用。让我们一同了解勤研低代码开…

从“N 号房”看Deepfake乱象,如何证明“我”不是我?

从“N 号房”看Deepfake乱象&#xff0c;如何证明“我”不是我&#xff1f; “9张玛丽莲梦露的照片里&#xff0c;有2张是AIGC伪造的&#xff0c;你能看出来哪张是假的吗&#xff1f;” 这是出现在外滩大会AI创新赛全球Deepfake攻防挑战赛的表演赛上激动人心的一刻。9月6日下…

[SC]Windows VS2022下配置SystemC环境

Windows VS2022下配置SystemC环境 一、安装Visual Studio 2022 下载地址&#xff1a;Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com) 进入Visual Studio Installer后选择“通用Windows平台开发”并勾选“可选”中的“通用Windows平台工具”。 二、下…

在Application中全局获取context

首先自定义一个application&#xff0c;继承Application&#xff0c;并在AndroidManifest.xml文件中配置它。 class TvApplication : Application() {companion object {Volatilevar context: Application? nullprivate setfun getContext(): Context {return context ?: t…

[笔记]电参数测量的现有方案[进行中...]

1.关键字&#xff1a; 电参数测量 Electrical Parameter Measurement 2.相关信息搜集 》》电参数测量仪是如何测量电压电流相位差的&#xff1f;对于变频器那种比较毛的波形&#xff0c;也能测量&#xff1f; 电参数测量仪测量电压电流相位差的方法主要依赖于其内部的高精度…

喜报!大模型助力产业升级,卓翼智能荣获科大讯飞AI开发者大赛冠军

8月9日&#xff0c;科大讯飞AI开发者大赛专场路演圆满落幕&#xff0c;这是一个面向全球开发者的人工智能竞赛平台。经过激烈角逐&#xff0c;《大模型助力下的航空航天产业转型升级赛道》最终有8支队伍进入决赛&#xff0c;专业评委从项目可行性、功能完备程度、创新性、商业价…

复仇时刻 华为的狙击还没结束

文&#xff5c;琥珀食酒社 作者 | 积溪 华为的复仇时刻已到啊 名场面即将再次上演 看过华为和苹果发布会的人 应该都有似曾相识的感觉 去年8月底 雷女士访华第二天 华为发布了Mate 60先锋计划 9月13日苹果发布iPhone 15 恰恰就在这天 华为咔嚓一下 又放出了大折叠屏…

用Python爬虫制作一个简易翻译器

我们通常是通过requestsBS4的方法来获取网页内容&#xff0c;这种方法导入模块较多&#xff0c;速度相对有点儿慢&#xff0c;此时我们可以用requests的post方法向指定服务器发送请求&#xff0c;获取数据后格式化为json&#xff0c;然后获取相关键值。这种方法用到了requests和…

电脑系统找不到mfc100u.dll,无法继续执行代码的多种解决方法

当你试图打开某些应用程序或游戏时&#xff0c;可能会收到“mfc100u.dll文件丢失”的错误消息。这个错误通常会使应用程序或游戏无法正常启动。以下关于mfc100u.dll丢失的解决方法的一些分析。 一.什么是mfc100u.dll文件 mfc100u.dll是Microsoft Visual Studio 2010应用程序使…

通过API使用通义千问

1. 获取API-KEY 开通百炼服务并获得API-KEY 登录阿里云百炼大模型服务平台。 鼠标悬停于页面右上角的个人中心&#xff08;人性标志&#xff09;上&#xff0c;再在下拉菜单中单击API-KEY。 在左侧导航栏&#xff0c;选择全部API-KEY或我的API-KEY。&#xff08;说明&#x…

BEV学习---LSS-2

前言一、相关参数设置二、LSS算法前向过程 1.整体步骤2.创建视锥3.坐标变换4.视锥点云特征5.VoxelPooling 5.1 cumsum_trick(池化累积求和技巧):5.2 VoxelPooling总结 前言 目前在自动驾驶领域&#xff0c;比较火的一类研究方向是基于采集到的环视图像信息去构建BEV视角下的特征…

Mysql基础练习题 1527.患某种疾病的患者 (力扣)

查询患有 I 类糖尿病的患者 ID &#xff08;patient_id&#xff09;、患者姓名&#xff08;patient_name&#xff09;以及其患有的所有疾病代码&#xff08;conditions&#xff09;。I 类糖尿病的代码总是包含前缀 DIAB1 。 题目链接&#xff1a; https://leetcode.cn/proble…

【JS逆向学习】快乐学堂登陆接口(自定义DES加密、ddddocr验证码识别)

逆向目标 网址&#xff1a;https://www.91118.com/Passport/Account/Login接口&#xff1a;https://www.91118.com/passport/Account/LoginPost参数&#xff1a; passr 逆向过程 输入手机号、密码、验证码 点击登陆&#xff0c;多试几次&#xff0c;然后观察并比较不通请求…

具有RC反馈电路的正弦波振荡器(文氏桥振荡器+相移振荡器+双T振荡器)

2024-9-10&#xff0c;星期二&#xff0c;22:13&#xff0c;天气&#xff1a;雨&#xff0c;心情&#xff1a;晴。今天从下午开始淅淅沥沥一直在下雨&#xff0c;还好我有先见之明没骑自行车&#xff0c;但是我忘带伞了&#xff0c;属于说是有点脑子但是不多了&#xff0c;2333…