P12 音视频复合流——TS流讲解

news2024/11/16 14:19:43

 前言 

                             

从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板

🎬 个人主页:@ChenPi

🐻推荐专栏1: 《C++_@ChenPi的博客-CSDN博客》✨✨✨ 

🔥 推荐专栏2: 《Linux C应用编程(概念类)_@ChenPi的博客-CSDN博客》✨✨✨

🛸推荐专栏3:《嵌入式音视频_@ChenPi的博客-CSDN博客》
🌺本篇简介  :本章讲解音视频中的复合流——ts流

 01 什么是复合流

复合流是指在一条音视频数据流中同时包含视频ES和音频ES数据。

常见的复合流一般为TS流,MP4流,FLV流

02 TS流的介绍

TS流:英文全称为Transport Stream(传输流)。它由MPEG公司推出的全新MPEG2的压缩标准,TS流的出现是为了让音视频的实时交互更加方便,并且随着数字电视的发展,TS流数据在电视领域,网络音视频领域也有很大作用。

03 TS流的格式

TS流的格式大概分为三层,它分别为Transport Stream层,Packet Element Stream层,Element Stream层。

  

  1. es层就是音视频数据
  2. pes层是在音视频数据上加了时间戳等对数据帧的说明信息
  3. ts层就是在pes层加入数据流的识别和传输必须的信息

04 Transport Stream层讲解

Transport Stream层主要有三个部分组成,TS Header ,ADaption Field,TS Payload

  1. TS Header:TS Header为头部
  2. ADaptation Field:可能存在也可能不存在,主要作用是给不足188字节的数据做填充
  3. TS payload:pes数据

TS Header头部信息(四字节) 

就是4个Bit

 ts层的内容是通过PID值来标识的,主要内容包括:PAT表、PMT表、音频流、视频流。

解析ts流要先找到PAT表,只要找到PAT就可以找到PMT,然后就可以找到音视频流了。

PAT表的PID值固定为0。PAT表和PMT表需要定期插入ts流,因为用户随时可能加入ts流,这个间隔比较小,通常每隔几个视频帧就要加入PAT和PMT。

PAT和PMT表是必须的,还可以加入其它表如SDT(业务描述表)等,不过ts流只要有PAT和PMT就可以播放了。

  • PAT表:他主要的作用就是指明了PMT表的PID值。

  • PMT表:他主要的作用就是指明了音视频流的PID值。

  • 音频流/视频流:承载音视频内容。

ADaption Field

四BIT后就是自适应区

DTS、PTS 的概念如下所述: 

  • DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。
  • PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。

Adaptional Field Length指的是自适应长度,它主要包含传输错误标识符的字节。

PCR是节目时钟参考表,PCR的PTS和DTS都是对同一个系统时间进行采样,PCR的值是逐渐递增的。在对TS流打包的时候,PAT表和PMT表是没有Adaptional Field,若长度不够则使用0xff.

4.1 PAT表(定义了当前TS流中的所有节目、要查询节目必须从PAT表开始)

4.2 PMT表格(查询当前节目中所有的PID信息,比方说包含多少个VIDEO、AUDIO)

  

05 PES (Packet Element Stream)

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

  

以下是比较常用的 PES包信息

   

 pts是显示时间戳、dts是解码时间戳,视频数据两种时间戳都需要,音频数据的pts和dts相同,所以只需要pts。有pts和dts两种时间戳是B帧引起的,I帧和P帧的pts等于dts。如果一个视频没有B帧,则pts永远和dts相同。从文件中顺序读取视频帧,取出的帧顺序和dts顺序相同。dts算法比较简单,初始值 + 增量即可,pts计算比较复杂,需要在dts的基础上加偏移量。

音频的pes中只有pts(同dts),视频的I、P帧两种时间戳都要有,视频B帧只要pts(同dts)。

打包pts和dts就需要知道视频帧类型,但是通过容器格式我们是无法判断帧类型的,必须解析h.264内容才可以获取帧类型。

06  ES层结构:

ES数据流就是我们常说的裸流数据,这其中就包括视频裸流数据(H264/HEVC)、音频裸流数据(AAC)。可以看主页前几章得文章

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

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

相关文章

C# 程序员如何进行职业规划?

C# 程序员如何进行职业规划? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「C#的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&…

中通快递查询,中通快递单号查询,批量删除不需要的快递单号

快递单号的管理现在是许多企业和个人日常工作中不可或缺的一部分,面对堆积如山的快递单号,如何快速、准确地处理成了许多人的难题。今天,我们将为大家带来一款强大的快递单号处理软件——快递批量查询高手,让你从此告别繁琐的手动…

分布式系统架构设计之分布式缓存的数据拆分、数据同步和数据淘汰策略

三、数据拆分和同步策略 1、数据拆分 数据拆分是计算机科学中的一个概念,主要目的是为了提高数据访问速度或者在受限于存储空间大小时,对被访问的数据进行分块处理的技术,这种技术可以确保数据更高效地存储和访问。 在分布式系统中&#x…

59.网游逆向分析与插件开发-游戏增加自动化助手接口-文字资源读取类的C++还原

内容来源于:易道云信息技术研究院VIP课 上一个内容:游戏菜单文字资源读取的逆向分析-CSDN博客 码云地址(master分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:55358fb135a0c821d8e8…

前台收款单选择的保险公司 提示 往来户不属于该财务组织

前台收款单选择的保险公司 提示 往来户不属于该财务组织 问题避免 新增保险公司的时候,找一个已经存在的保险公司,利用多页签复制的方式来新增 保险公司 不然不能够自动生成 财务客户

STM32学习笔记二十二:WS2812制作像素游戏屏-飞行射击游戏(12)总结

至此,飞行射击游戏已经基本实现该有的功能,已经比较接近早期的商业游戏了。 如果采用脚本,可以完成关卡游戏,如果不用,也可以做成无限挑战游戏。 我们汇总一下制作的过程: 1、建模UML 2、主循环处理过程…

学习笔记:C++之 switch语句

Switch语句 作用:执行多条件分支语句 语法: switch(表达式){ case 结果1:执行语句;break; case 结果2:执行语句;break; ... default:执行语句&a…

百度自由DIY小程序源码:PHP+MySQL组合开发 带完整的搭建教程

随着移动互联网的快速发展,小程序已成为企业与用户互动的重要平台。然而,对于许多中小企业和开发者来说,从零开始开发一款小程序需要投入大量的时间和资源。 以下是部分代码示例: 系统特色功能一览: 1.高度自定义&…

一致化和一致量纲化问题

归一化/标准化实质是一种线性变换,线性变换有很多良好的性质,这些性质决定了对数据改变后不会造成“失效”,反而能提高数据的表现, (1)无量纲化 例如房子数量和收入,因为从业务层知道&#xf…

不是小米SU7买不起,而是17.58万的银河E8更有性价比

作者 |Amy 编辑 |德新 疯狂的2023年车市已过。这一年,新势力与传统车企自主品牌在新能源战略上多次交锋。 新能源汽车市场不再由新势力独领风骚,传统车企的新能源品牌进步迅猛,增长势头强劲。 以吉利汽车集团为例,2023年其新能…

AI数字人国内人工智能产业发展趋势

随着科技的不断进步,人工智能(Artificial Intelligence,简称AI)已成为当今社会的热门话题。作为一种复杂而高级的技术,人工智能在国内发展势头迅猛。本文将探讨AI数字人国内人工智能产业的发展趋势。 首先&#xff0c…

PPT插件-大珩助手-文字整理功能介绍

删空白行 删除文本中的所有空白行 清理编号 删除文本中的段落编号 清理格式 删除文本中的换行、空格符号 清理艺术 删除文本的艺术字效果 清理边距 删除文本框与文字之间的间隙 软件介绍 PPT大珩助手是一款全新设计的Office PPT插件,它是一款功能强大且实…

信源编码与信道转移矩阵

目录 一. 信息论模型 二. 点对点通信模型 三. 信源编码 四. 信道转移矩阵 4.1 二进制对称信道 4.2 二进制擦除信道 五. 小结 (1)信道直射与反射 (2)信道散射 (3) 信道时变性 一. 信息论模型 194…

C++ 中的指针和引用有什么区别?

C 中的指针和引用有什么区别? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&#…

自定义View之重写onMeasure

一、重写onMeasure()来修改已有的View的尺寸 步骤: 重写 onMeasure(),并调用 super.onMeasure() 触发原先的测量用 getMeasuredWidth() 和 getMeasuredHeight() 取到之前测得的尺寸,利用这两个尺寸来计算出最终尺寸使用 setMeasuredDimensio…

04-微服务-Nacos

Nacos注册中心 国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。 1.1.认识和安装Nacos Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在…

c++比Java更不容易失业吗?

c比Java更不容易失业吗? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&#xff01…

Linux目录切换相关命令( cd命令和pwd命令)

1.cd命令 我们可以通过cd命令,更改当前所在的工作目录。cd命令来自英文:Change Directory 功能:切换工作目录 语法:cd [目标目录] 参数:目标目录,要切换去的地方,不提供默认切换到当前登录用户…

生成式AI在自动化新时代中重塑RPA

生成式AI的兴起正在推动行业的深刻变革,其与RPA技术的结合,标志着自动化领域新时代的到来。这种创新性结合极大地提升了系统的适应性,同时也推动了高级自动化解决方案的发展,为下一代RPA的诞生奠定了坚实的基础。 核心RPA技术专注…

Blazor项目如何调用js文件

以下是来自千问的回答并加以整理:(说一句,文心3.5所给的回答不完善,根本运行不起来,4.0等有钱了试试) 在Blazor项目中引用JavaScript文件(.js)以实现与JavaScript的互操作&#xff…