TS协议之PES(ES数据包)
TS协议之PAT(节目关联表)
TS协议之PMT(节目映射表)
TS协议之PES(ES数据包)
该文档已上传:下载地址
1. 概要
1.1 TS数据包(PES)协议数据组成
TS=TS头+PES头+ES。TS,PES头是在音视频流传输过程中需要的数据信息,而ES其实就是我们所说的要打包的音视频原始流数据:视频流(H264/H265), 音频流:(AAC)。
协议:ISO/IEC 13818-1
1.2 TS数据包(PES)协议格式
1.3 字段解释
1.3.1 TS
1.3.1.1 TS头
| 字段 | 字段描述 |
| 同步字节 | 固定为0x47 |
| 错误标识 | 通常为0 |
| 负载起始标识符 | 因为一个TS包规定为188字节,一帧数据可能被分为好多切片,帧数据第一个切片该标识为1,其余切片为0; |
| 传输优先级 | 0:低优先级,1:高优先级,通常取0; |
| PID值 | 用于数据标识 |
| 传输加扰控制 | 00:未加密,通常取001 10 11 :用户定义 |
| 是否包含自适应区 | 00:保留01:为无自适应域,仅含有效负载10:为仅含自适应域,无有效负载11:为同时带有自适应域和有效负载。 |
| 递增计数器 | 大小4bit,范围:0-15,不一定从0开始,但是必须是连续递增的,如果加到15,从0重新开始++。 |
1.3.1.2 自适应区
| 字段 | 字段描述 |
| 自适应区长度 | 自适应区的数据长度 |
| 是否包含PCR | 0x50:包含PCR,0x40:不包含PCR(有时候0x00也表示不包含PCR) |
| PCR | 五个字节的PCR数据,PRC系统用于同步音视频数据的传输与播放,PCR是一个时钟参考值,用来指示从传输流的开始到当前位置的时间戳。它以90 kHz的时钟频率进行计数 |
| 填充字节 | 不够188字节用0xFF做填充数据。TS数据包一般自适应区后面接PES数据,在PES载荷中做填充 |
1.3.2 PES
1.3.2.1 PES头
| 字段 | 字段描述 |
| 包起始码 | 固定00 00 01 |
| 流ID | 音频取值:0xc0-0xdf,一般取值0xc0 视频取值:0xe0-0xef,一般取直0xe0 |
| pes包长度 | 可选信息头的长度+ES(原始流数据(H264或AAC))数据长度,例如:要打包一个视频帧,长度我123456,可以分片为很多个ts包,但是pes包的长度为可选头长度+123456,因为PES描述的是一帧数据的信息不是一个ts信息,所以每帧的第一个ts包才有PES信息,详情参考文章结尾。 |
1.3.2.2 PES可选头信息
| 字段 | 字段描述 |
| 10 | 固定为10. |
| PES加扰控制 | 0:不加密 |
| PES优先级 | 0:低优先级,1:高优先级,一般取值为0 |
| 数据定位符 | 1:ES数据紧跟PES头,0:不一定紧跟,一般选0; |
| 版权 | 标识PES的有效负载是有版权的,一般取值为0 |
| 原始或者复制 | 1:负载是原始数据,0:负载是备份 |
| 7个标志位 | 可以看作是8个bit代表8种状态,取值规则参考后面描述 |
7个标志位取值规则,8bit一个bit代表一种状态:
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|---|---|---|---|---|---|---|---|
| PTS | DTS | ESCR | ES率 | OSM模型 | 附加信息 | 前一个CRC | 扩展域 |
例如:
0x80:只含有PTS
0xc0:含有PTS和DTS
2. 实例数据分析
TS头 TS自适应区 PES头 ES(H264)
47 41 00 30 07 50 00 00 00 00 7E 00 00 00 01 E0 00 00 80 80 05 21 00 01 00 01 00 00 00 01 09 F0 00 00 00 01 67 42 00 2A 96 35 40 F0 04 4F CB 37 05 01 05 02 00 00 00 01 68 CE 31 B2 00 00 00 01 06 E5 01 B0 80 00 00 00 01 65 B8 00 00 1B 68 C0 00 00 B7 19 40 38 2E E0 05 4C 10 40 02 88 40 71 20 C3 3C 18 45 E2 F3 C5 B5 7B CB 8F 71 1E AF BE 7E F7 DF 7D F7 DF 7D F7 DE AF BE F3 63 EF 26 3D 5F 7D F7 93 1F 7B BC F8 F7 7B BE FB EF 72 77 9B 1E AF 72 77 10 0D 44 A7 C3 E1 F7 A7 94 5F A4 94 BD C8 21 C7 88 70 F2 14 83 53 CA 21 EF 24 A1 67 89 86 19 0F 89 48 37 93 77 DF 7D EE
2.1 PES包传输规则
一帧数据被分为很多分片,每个分片的数据结构不尽相同如下:
第一个ts:TS头+PES头+部分ES;
第二个ts:TS头+部分ES;
...
最后一个ts:TS头+填充字节+部分ES;
也就是一帧数据只有一个PES。
相关文章:
TS协议之PES(ES数据包)
TS协议之PAT(节目关联表)TS协议之PMT(节目映射表)TS协议之PES(ES数据包) 该文档已上传:下载地址 1. 概要 1.1 TS数据包(PES)协议数据组成 TSTS头PES头ES。TS…...
银河麒麟V10 SP3 X86 二进制文件部署 mysql-5.7.29 GTID 半同步复制的双主架构
文章目录 [toc]啰嗦一下mysql 的 AB 复制和 gtid 复制的优缺点AB 复制(Asynchronous Replication)GTID 复制(Global Transaction Identifier Replication) mysql gtid 并行复制和半同步复制的优缺点并行复制(Parallel …...
python爬虫3:requests库-案例1
python爬虫3:requests库-案例1 前言 python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 本系列所涉及的代码仅用于个人研究与讨论,并不会对网…...
面部表情识别(Pytorch):人脸检测模型+面部表情识别分类模型
目录 0 相关资料1 基于人脸检测面部表情分类识别方法2 项目安装2.1 平台与镜像2.2 项目下载2.3 模型下载2.4 上传待测试图片2.5 项目安装 3 demo测试 0 相关资料 面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码):https://blog.csdn.net…...
外卖点餐小程序开源源码——支持扫码点餐
一套支持店内扫码点餐、外卖点餐配送于一体的餐饮系统,支持商家创建优惠券,支持商家自定义打印机功能,支持商家财务管理,支持商户菜品管理,支持菜品自定义分类,支持商家招募骑手入驻功能。系统基于thinkphp…...
十分钟掌握使用 SolidJS 构建全栈 CRUD 应用程序
我们可以开始讨论 SolidJS,说它比React更好,但没有必要做这种比较。SolidJS只是众多前端框架之一,旨在在Web上快速创建数据驱动。那么,我们为什么要突出这个新孩子呢? 首先,我们不能忽视SolidJS不使用虚拟…...
LabVIEW开发多材料摩擦电测量控制系统
LabVIEW开发多材料摩擦电测量控制系统 摩擦电效应是两个物体摩擦在一起,电荷从一个物体转移到另一个物体的现象,从而导致两个物体携带相等和相反的电荷。接触和充电是主导该过程的两个关键因素。当静电荷累积到一定水平时,可能会出现放电现象…...
【Linux】网络基础1
文章目录 网络基础11. 计算机网络背景1.1 网络发展 2. 认识协议2.1 网络协议2.2 OSI七层模型2.3 TCP/IP五层(或四层)模型 3. 网络传输基本流程3. 1 数据报封装和分用 4. 网络中的地址管理4.1 认识IP地址 5. 认识MAC地址 网络基础1 1. 计算机网络背景 1…...
HTML - Javascript - 原生的JS HTTP请求:实用主义的一篇文章
HTML - Javascript - 原生的JS HTTP请求:实用主义的一篇文章 前言 虽然现在使用JQuery等可以做到很方便的HTTP请求,但是这样做毕竟要引入一些JS文件。 如果想使用原生的JS进行HTTP网络请求应该怎样呢?可以使用XMLHttpRequest。 使用方法 …...
Intellij IDEA运行报Command line is too long的解决办法
想哭,vue前端运行起来,对应的后端也得起服务。 后端出的这个bug,下面的博客写的第二种方法,完整截图是下面这个。 Intellij IDEA运行报Command line is too long的解决办法 - 知乎 (zh…...
信号槽传输过程中指针所指对象的生命周期
在子线程中的一个槽函数,当读取到dxf文件完成后,结果通过在该槽函数中的 dx_data* pDxfData 指针变量读取。 然后通过QVariant封装该指针变量。发送到主线程中。 void qcWorker::slotReadDxfFile(QString dir) {bool bRtn{ false }; //定义一个局部指针…...
c++ 递归锁的使用
非递归锁 同一个线程里,在锁未释放的情况下反复加锁,会导致死锁。 示例 #include <iostream> #include <mutex> #include <thread> #include <unistd.h> using namespace std;std::mutex m_mutex;void Func() {m_mutex.lock(…...
Oracle TDE wallet
1. 钱夹密码千万不能忘记,这也是使用TDE 需要承担的风险。 2. 只要将wallet cwallet.sso 拷贝过去,加密没有意义! 钱夹的备份 正如上述,已经加密过的表列或者表空间,钱夹必须打开才能够查询到里面的数据。如果钱夹丢…...
多模态学习
一、目标 三、多模态核心任务 题目:...
Android学习之路(2) 文本设置
Android学习之路(1) 文本 一、设置文本内容 设置文本内容的两种方式: 一种是在XML文件中通过属性android:text设置文本代码如下 <TextViewandroid:id"id/tv_hello"android:layout_width"wrap_content"android:layout_height"wrap_c…...
手写springboot
前言 首先确定springboot在spring基础上主要做了哪些改动:内嵌tomcatspi技术动态加载 一、基本实现 1. 建一个工程目录结构如下: springboot: 源码实现逻辑 user : 业务系统2.springboot工程项目构建 1. pom依赖如下 <dependencies>…...
报错Uncaught (in promise) Error: Manifest request to...
在使用nuxt框架时,出现如下报错: 解决方案: 不要打开两个以上的开发者工具更换nuxt的端口号 参考资料:https://github.com/nuxt/nuxt.js/issues/6202...
微信私域更好玩了
之前分享过,“小绿书”“公众号文章转音频”等内测中或悄悄已升级的功能。 其实,微信还在内测很多新功能,只是没公开 今天,小编又发现新升级 就是『附近』功能 增加了一个本地生活的入口,这里面是短视频和图文 展示…...
基于ant-design的a-modal自定义vue拖拽指令
写一个dragDialog.js 在main.js中引入 import ‘./core/directives/dragDialog.js’ // 让 dialog 支持鼠标拖动 import Vue from vueVue.directive(DragDialog, {update: function (el, binding, vnode) {if (!binding.value || !binding.value.reset) returnconst dialog e…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
