当前位置: 首页 > news >正文

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

 前言 

                             

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

🎬 个人主页:@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)。可以看主页前几章得文章

相关文章:

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

前言 从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ 🔥 推荐专栏2: 《Linux C应用编程(概念类)_C…...

三维重建 3D Gaussian Splatting:实时的神经场渲染

目录 概念理解三维高斯喷洒 渲染实例 依赖项: 编译报错: 预训练模型 13G:...

Django Web框架

1、创建PyCharm项目 2、安装框架 pip install django4.2.0 3、查看安装的包列表 4、使用命令创建django项目 django-admin startproject web 5、目录结构 6、运行 cd web python manage.py runserver7、初始化后台登录的用户名密码 执行数据库迁移生成数据表 python man…...

ARCGIS PRO SDK GeometryEngine.Intersection的GeometryDimensionType 枚举

描述几何对象的维度。与 GeometryEngine.Intersection 一起使用。 ​ 成员描述EsriGeometry0Dimension零维(点或多点)。EsriGeometry1Dimension一维(折线)。EsriGeometry2Dimension二维(多边形或包络)。Es…...

Web网页开发-CSS层叠样式表1-笔记

1.CSS的引入方式 (1)内嵌式:把style双标签写在head标签里面,可以影响同种标签 (2)行内式:把style写在标签内部,只能影响当前标签 (3)外链式:创建css文件,使用link将html文件和css文件连接起来 (4)导入式&am…...

如何预防变种.halo勒索病毒感染您的计算机?

尊敬的读者: 在数字时代,威胁网络安全的.halo勒索病毒日益猖狂。本文将深入介绍.halo病毒的攻击方式,以及针对被加密文件的恢复方法和预防措施。在面对被勒索病毒攻击导致的数据文件加密问题时,技术支持显得尤为重要,…...

短网址的新玩法,短到只剩域名

短网址大家应该都不陌生了,一句话就可以解释清楚,把一串很长的网址缩短到只有几个字符依然可以正常访问,缩短之后会更加简洁美观。 那大家见过的短网址一般长啥样呢,比如t.cn/xxxxx、dwz.cn/xxxxx、c1ns.cn/xxxxx。这些短网址都有…...

FA2016AA (MHz范围晶体单元超小型低轮廓贴片) 汽车

随着科技的不断发展,智能汽车逐渐成为人们出行的首选。而其中,频率范围在19.2 MHz ~ 54 MHz的晶体单元超小型低轮廓贴片(FA2016AA)为汽车打造更智能、更舒适、更安全的出行体验。FA2016AA贴片的外形尺寸为2.0 1.6 0.5 mm&#x…...

【设计模式之美】面向对象分析方法论与实现(一):需求分析方法论

文章目录 一. 需求举例二. 对案例进行需求分析1. 第一轮基础分析2. 第二轮分析优化3. 第三轮分析优化4. 第四轮分析优化5. 最终确定需求 三. 小结 本文主要描述: 面向对象的需求分析方法论 一. 需求举例 假设,你正在参与开发一个微服务。微服务通过 HTT…...

MySQL视图索引执行计划相关十五道面试题分享

目录 一. 视图 1.1 含义 1.2 操作 创建视图 修改视图 删除视图 查看视图 二. 索引 2.1 什么是索引 2.2 为什么要使用索引 2.3 优点 2.4 缺点 2.5 何时不适用索引 2.6 索引何时失效 三. 执行计划 3.1 什么是执行计划 3.2 执行计划的作用 四. 面试题 表结构 …...

vue绑定背景颜色或背景图片 和 nuxtjs动态设置background-image:

v-bind绑定样式表&#xff1a; ---------------------------------------------------------------------------------------------------- HTML写法: <div class"myItem" style"text-align:center; background-image:url(); background-size:auto 100% ;ba…...

案例099:基于微信小程序的外卖小程序的研究与开发

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…...

数据库的设计

理解数据库第二范式2NF的必备知识 关系数据库基础&#xff1a; 了解关系数据库的基本概念&#xff0c;包括表格、行、列、主键、外键等。 第一范式&#xff08;1NF&#xff09;&#xff1a; 在理解第二范式之前&#xff0c;首先要了解第一范式。第一范式要求表格中的每个列都包…...

数据比较时String未转成BigDecimal的坑

如果价格的字段是String&#xff0c;要转换成BigDecimal等数字再比较&#xff0c;用String比较会出现奇怪的错误。 这句话看起来很多余&#xff0c;但是实际写代码的时候确是很容易忽略。 比如价格这个字段封装在对象里&#xff0c;而你只是a.getPrice().compareTo(b.getPrice…...

MySQL第三战:CRUD,函数1以及unionunion all

目录 前言 一.CRUD 1.查询 概念&#xff1a; 语法 含义 2.新增 概念&#xff1a; 语法 含义&#xff1a; 3.修改 语法 含义 4.删除 语法 含义 二.函数 1.字符函数 2.数字函数 3.日期函数 4.聚合函数 三.union&union all 概念 语法 专业词解释 使用…...

业务项目中Echarts图表组件的封装实践方案

背景&#xff1a;如果我们的项目是一个可视化类/营销看板类/大屏展示类业务项目&#xff0c;不可避免的会使用到各种图表展示。那在一个项目中如何封装一个图表组件既能够快速复用、UI统一&#xff0c;又可以灵活扩充Echarts的各种复杂配置项配置就变得极为重要。 封装目标 符…...

鸿蒙开发之拖拽事件

一、拖拽涉及的方法 Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//拖拽开始.onDragStart((event: DragEvent) > {console.log(drag event onDragStartevent.getX())})//拖拽进入组件范围&#xff0c;需要监听onDrop配合.onDragEnter((event: DragEvent) …...

C#使用纯OpenCvSharp部署yolov8-pose姿态识别

【源码地址】 github地址&#xff1a;https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov8-Pose算法是一种基于深度神经网络的目标检测算法&#xff0c;用于对人体姿势进行准确检测。该算法在Yolov8的基础上引入了姿势估计模块&#xff0c;通过联合检测和姿势…...

[AutoSar]基础部分 RTE 04 数据类型的定义及使用

目录 关键词平台说明一、数据类型分类二、Adt三、Idt四、Base 数据类型五、units六、compu methods七、data constraint 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (GCC) 一、数据…...

c#调试程序一次启动两个工程(多个工程)

概述 c# - Visual Studio : debug multiple projects at the same time? 以在解决方案中设置多个启动项目(右键单击解决方案&#xff0c;转到设置启动项目&#xff0c;选择多个启动项目)&#xff0c;并为包含在解决方案(无、开始、不调试就开始)。如果您将多个项目设置为开始…...

轻松搭建企业知识库:10款必备工具推荐

随着企业知识的不断积累和团队规模的扩大&#xff0c;如何高效地管理和利用这些知识成为了一个重要的问题。企业知识库作为一种有效的知识管理工具&#xff0c;可以帮助企业将分散的知识整合在一起&#xff0c;方便团队成员快速查找、学习和共享。接下来就分享10款很不错的企业…...

第三天学习记录

第二天 C++随便提一提重点学习编译原理选学离散数学形式语言与自动机理论数据结构C++ 随便提一提 C++面向对象编程。与强调算法的过程性编程(试图使问题满足语言的过程性方法)不同。面向对象编程强调的是数据,它试图让语言来满足问题的要求。其理念是设计与问题本质特征相对…...

内核线程创建-kthread_create

文章参考Linux内核线程kernel thread详解 - 知乎 大概意思就是早期创建内核线程&#xff0c;是交由内核处理&#xff0c;由内核自己完成&#xff08;感觉好像也不太对呢&#xff09;&#xff0c;创建一个内核线程比较麻烦&#xff0c;会导致内核阻塞。因此就诞生了工作队列以及…...

uniappVue3版本中组件生命周期和页面生命周期的详细介绍

一、什么是生命周期&#xff1f; 生命周期有多重叫法&#xff0c;有叫生命周期函数的&#xff0c;也有叫生命周期钩子的&#xff0c;还有钩子函数的&#xff0c;其实都是代表&#xff0c;在 Vue 实例创建、更新和销毁的不同阶段触发的一组钩子函数&#xff0c;这些生命周期函数…...

任务驱动式编程

main /** 模板代码*/#include "gd32f4xx.h" #include "systick.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include "main.h" #include "USART0.h" #include &quo…...

python数据可视化之折线图案例讲解

学习完python基础知识点&#xff0c;终于来到了新的模块——数据可视化。 我理解的数据可视化是对大量的数据进行分析以更直观的形式展现出来。 今天我们用python数据可视化来实现一个2023年三大购物平台销售额比重的折线图。 准备工作&#xff1a;我们需要下载用于生成图表的第…...

QT工具栏开始,退出

QT工具栏开始&#xff0c;退出 //初始化场景QMenuBar *bar menuBar();setMenuBar(bar);QMenu *startbar bar->addMenu("开始");QAction * quitAction startbar->addAction("退出");connect(quitAction , &QAction::triggered,[](){this->c…...

@Async正确使用姿势

Async注解可以使被修饰的方法成为异步方法&#xff0c;简单且方便&#xff0c;这篇文章将教你如何正确的使用它 先谈谈大多数人对Aysnc的认识&#xff1a; 如果直接使用Async&#xff0c;未指定线程池 并且 容器内也没有beanName为taskExecutor的bean&#xff0c;则会使…...

试除法判定质数算法总结

知识概览 质数的定义 在大于1的整数中&#xff0c;如果只包含1和本身这两个约数&#xff0c;就被称为质数&#xff0c;或者叫素数。 质数的判定——试除法 暴力算法 时间复杂度 改进算法 时间复杂度 暴力算法&#xff1a;时间复杂度O(n) 算法模版 bool is_pr…...

vuetify 回到顶部

参考链接 // 回到id#app-content-container 的dom节点顶部 onScroll() {const ele document.querySelector(#app-content-container)// this.$vuetify.goTo(0, duration)this.$vuetify.goTo(#app-content-container, { container: ele })},...

网站建设代码大全/有源码怎么搭建网站

习题课前言质数模板题--试除法判定质数模板题--分解质因数模板题--筛质数X的因子链约数模板题--试除法求约数模板题--约数个数模板题--约数之和模板题--最大公约数等差数列算法基础系列 前言 纯练习题&#xff0c;理论基础在上一篇博客&#xff0c;点击传送 算法基础–质数和约…...

嘉兴做网站公司/网站seo推广

为什么80%的码农都做不了架构师&#xff1f;>>> jspservletjavabean实现ssh的mvc模式 干了很久的项目都是使用SSH框架的&#xff0c;现在团队有位搞美工的美女突然想要搞java了&#xff0c;让我做下指导并打个基本的框架&#xff0c;需要使用最基本的架构&#xff…...

wordpress主题威客/南和网站seo

$0 Shell本身的文件名$1&#xff5e;$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…$$ Shell本身的PID&#xff08;ProcessID&#xff09;$! Shell最后运行的后台Process的PID$? 最后运行的命令的结束代码&#xff08;返回值&#xff09;$- 使用Set命令设定的Flag一览…...

容桂网站制作价格/友情链接怎么添加

目录1 加载ImageNet预训练模型2 准备数据集2.1 加载数据集2.2 使用matplotlib可视化数据集3 模型训练函数4 使用torchvision微调模型5 观察模型预测结果6 固定模型参数1 加载ImageNet预训练模型 在torchvision.model包中定义了许多模型用于完成图像方面的深度学习任务&#xf…...

商业网站设计方案/平台推广怎么做

前言 提起MySQL&#xff0c;其实网上已经有一大把教程了&#xff0c;为什么我还要写这篇文章呢&#xff0c;大概是因为网上很多网站都是比较零散&#xff0c;而且描述不够直观&#xff0c;不能系统对MySQL相关知识有一个系统的学习&#xff0c;导致不能形成知识体系。为此我撰…...

商城微网站建设多少钱/产品如何推广市场

随时随地阅读更多技术实战干货&#xff0c;获取项目源码、学习资料&#xff0c;请关注源代码社区公众号(ydmsq666) 1、常见几种java服务器&#xff1a; Tomcat,JBoss,Weblogic,Websphere 2、Tomcat和JBoss有什么区别&#xff1a; 同&#xff1a;Tomcat和JBoss都是按照官方的…...