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

视频封装格式篇(TS)

本篇介绍下TS的封装格式。

1.什么是TS?

        TS(Transport Stream,传输流),一种常见的视频封装格式,是基于MPEG-2的封装格式(所以也叫MPEG-TS),后缀为.ts。

2.TS的分层结构

TS文件分为三层,如下所示(可以倒序看更好理解):

◆ TS层(Transport Stream):在PES层基础上加入了数据流识别信息和传输信息。一个ts视频文件含有多个ts单元包。

◆ PES层(Packet Elemental Stream):在ES层基础上加入时间戳(PTS/DTS)等信息。每个ts单元含有一个pes头+多个es包。

◆ ES层(Elementary Stream):压缩编码后的音视频数据。

    xB表示字节数不确定,4B表示字节数为4个。

2.1 TS层

        TS传输流,是由固定⻓度的包组成,含有独⽴时间基准的⼀个或多个节⽬,适⽤于误码较多的环境,并且从流的任意⼀段开始都可以独⽴解码。PS(Program Stream):节⽬流,PS流与TS流的区别在于,PS流的包结构是可变⻓度,⽽TS流的包结构是固定⻓度。

◆ ts包大小固定为188字节,ts层分为三个部分:ts header、adaptation field、payload。

◆ ts header固定4个字节;每188字节单元就有一个ts header。

◆ adaptation field可能存在也可能不存在,主要作用是给不足188字节的数据做填充。

◆ payload是 PES 数据,或者PAT,PMT等。PAT、PMT是解析ts寻找音视频流很重要的表。

◆ ts Header + adaptation field 格式如下:

2.1.1 TS Header

◆ TS Header格式如下:

◆ PID信息非常关键,它直接表征本次TS包的用途。比较重要的是PAT和PMT。常用的PID值:

        如果PID为0x0,那么此ts的payload为PAT;如果为表中未列出的值,那么为分配给此ts包的一个唯一标识,用来区分ts包属于哪个节目。一个节目包含多个ts包。

PID取值 

PID值使用描述

0x0000

节目关联表(program association table, PAT)

0x0001

条件访问表(conditional access table, CAT)

0x0002

传送流描述表(transport stream description table, TSDT)

0x0003~0x000F

保留

0x0010~0x1FFE

可以分配为network PID, Program map PID,  elementary PID, 或其它

0x1FFF

空包(8191)

2.1.2 Adaptation field 

        在MPEG-2 TS中,为了传送打包后长度不足188B的不完整TS,或者为了在系统层插入节目时钟参考(program clock reference, PCR),需要在TS包中插入可变字节的调整字段。调整字段其中一个重要作用是解决编解码器的音视频同步问题。一般在视频帧中的TS包的调整字段中,每隔一定传输时间,传送系统时钟27MHz的一个抽样值给接收机,作为解码器解码时的时钟参考信息PCR。PCR通常每隔100ms至少被传输一次。PCR的数值所表示的是解码器在读完这个抽样值的最后那个字节时,解码器本地时钟所应处的状态。通常情况下,PCR不直接改变解码器的本地时钟,而是作为参考基准来调整本地时钟,使之与PCR趋于一致。

2.1.3  payload

        前边提到了PAT和PMT,它们都是PSI之一(节目专用信息(Program Special Information, PSI)。MPEG-2 TS传送的TS包携带两类信息:已压缩的音视频(PES)和与之相关的符号化表(PSI),由传送包PES的PID来标识。如果是PSI,那么payload内容为PAT表结构、PMT表结构;如果为音视频,那么payload内容为PES包。

        如下为ts文件的PAT和PMT。PAT表指定节目列表以及节目对应的PID;PMT指定某节目的所有音视频流及其对应的PID。由下图右侧可知,PAT指出只有一个节目0x001,且此节目对应的PMT的PID为256;PMT指出0x001节目所有视频流PID为258,音频PID为257;左侧是ts文件的PAT PMT PID的统计。

 

(1)PAT表结构 (指明PMT表的PID值)

         节目关联表(Program Association Table, PAT),得出所有节目的PID。N loop为一个数组,是节目列表及其对应的pid,每个节目就是指一段视频,具有唯一id。

 

(2)PMT表(指明音视频流的PID值)

        PMT提供一路节目包含的所有原始码流的PID映射表。原始码流的PID从ts header的pid读取。

        程序在读取N环的时候会读取该节目所有的码流列表及其PID,解析的时候可以根据PID来分离。N环描述符包括的信息如下图所示。节目时钟参考PCR的PID和视频的PID是相等的。由PAT得出所有的节目列表,选定收看的节目后,筛选出等于该节目PID的TS包,就可以得到该节目的所有码流的PID映射表,这样接收机就可以只接收PID等于该节目的码流的TS包即可收看该节目。

(3)补充说明

◆ 打包ts流时PAT和PMT表是没有调整字段的,不够的长度直接补0xFF即可。

◆ 视频流和音频流都需要加adaptation field,通常加在一个帧的第一个ts包和最后一个ts包里,中间的ts包不加。

2.2 PES 层

        分组的原始码流,将原始码流ES流根据需要,分成⻓度不等的数据包,并加上包头就形成了打包的基本码流PES流。是⽤来传输ES的⼀种数据结构。

◆ PES(Packetized Elementary Stream,打包的ES),在 ES 层的基础上加入了时间戳(PTS/TDS)等信息。

◆ ES数据包比较大,加入PES头时需将ES进行分割,只在第一个分割的ES上加PES头,如下图所示

◆ PES packet length — 指示PES 包中跟随该字段最后字节的字节数。0 值指示PES 包长度既未指示也未限定并且仅在这样的PES 包中才被允许,该PES 包的有效载荷由来自传输流包中所包含的视频基本流的字节组成。

◆ PES结构如下:

◆ PES 关键字段说明

  PES包的第5个字节标识一整个PES包的长度,一般来说,一个PES包包含一帧图像,获取了PES的包长度Len,当接收到Len个字节后,将接收到的字节组成一个block,放入FIFO中,等待解码线程解码。DTS和PTS也在PES包中传送。

2.3 ES 层

◆ ES(Elementary Stream,基本码流),就是不分组的⾳频、视频或其他信息的连续码流,比如视频H.264,音频AAC。

◆ 一个 ES 流中只包含一种类型的数据(视频,或音频,或字幕)。

3. MPEGTS 动态,静态分析工具 --- easyice下载

easyice下载

两种方式都可以

(1) https://www.easyice.cn/archives/85

(2)链接:https://pan.baidu.com/s/1N3SA4UBjfL0KD67dN52qww  提取码:1234

ts视频下载

http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8 m3u8播放地址 打开可查看是否可用

(1)打开网址,找到m3u8文件

        发现文件里面还是m3u8文件

 (2)拼接地址

        将文件中的m3u8地址替换掉url中的最后一个m3u8文件名,然后继续访问。

 (3)此时可看见ts文件

 (4)拼接ts下载地址

        用ts文件名替换掉url中的m3u8文件名。获得ts下载地址

 (5)ts下载地址使用迅雷下载或者直接输入Google浏览器即可下载。

4. ts视频流分析

(1)使用EasyICE打开ts文件

        可以看到ts文件的十六进制流。然后换算成二进制对比协议即可得出数据含义。FF是填充为,因为不满180字节,所以填充。

        每行 为一个ts单元包,都包括ts、adaption field、payload。

 (2)对照协议

        左边为协议解释,右边浅蓝低为抓包到的十六进制数据。十六进制转换为二进制时需要一位一位转化,不能够两位十六进制转化。

相关文章:

视频封装格式篇(TS)

本篇介绍下TS的封装格式。 1.什么是TS? TS(Transport Stream,传输流),一种常见的视频封装格式,是基于MPEG-2的封装格式(所以也叫MPEG-TS),后缀为.ts。 2.TS的分层结构 …...

静态路由+DHCP实验(四路由器八PC)

一.200.1.1.0/24子网划分 1.划分八个子网 2.选用前5个,第五个子网再划分4个子网作为骨干 二.规划路由 三.配置(下一跳) 1.先依次实现四个路由器之间全网可通 2.为路由器配置地址池,使用全局模式获取dhcp,指定网关…...

数据挖掘(作业汇总)

目录 环境配置 实验1 数据 作业2 环境配置 实验开始前先配置环境 以实验室2023安装的版本为例: 1、安装anaconda:(anaconda自带Python,安装了anaconda就不用再安装Python了) 下载并安装 Anaconda3-2022.10-Windows-x86_64.ex…...

基于微信小程序的图书馆选座系统源码

开发环境及工具: 大等于jdk1.8,大于mysql5.5,idea(eclipse),微信开发者工具 技术说明: springboot mybatis 小程序 代码注释齐全,没有多余代码,适合学习(…...

K8S 三种探针 readinessProbe、livenessProbe和startupProbe

一、POD状态 Pod 常见的状态 Pending:挂起,我们在请求创建pod时,条件不满足,调度没有完成,没有任何一个节点能满足调度条件。已经创建了但是没有适合它运行的节点叫做挂起,这其中也包含集群为容器创建网络…...

Android 设置背景颜色透明度

前言 本章是对设计给出的颜色做透明度的处理 原因 一般情况下我们是不需要做处理的,那为什么又需要我们做透明度呢,原因就是咱们的设计小哥哥、小姐姐们没有自己做处理,如果处理了的话,我们直接使用设计标注的AHEX颜色就行&a…...

聚类算法层次聚类

###cluster.py #导入相应的包 import scipy import scipy.cluster.hierarchy as sch from scipy.cluster.vq import vq,kmeans,whiten import numpy as np import matplotlib.pylab as plt #生成待聚类的数据点,这里生成了20个点,每个点4维: pointsscipy.randn(20,4) #加一…...

js 数据类型

1.概念 数据类型指的是可以在程序中存储和操作的值的类型,每种编程语言都有其支持的数据类型,不同的数据类型用来存储不同的数据,例如文本、数值、图像等。 JavaScript 是一种动态类型的语言,在定义变量时不需要提前指定变量的类…...

多级评论单表结构设计

这里的多级,本质上其实也就二级,例如微博的评论, 一级评论: 对微博的评论 二级评论: 对微博下的评论的回复评论 ,这里包括二种 1. 回复的是一级评论, 2, 回复的是二级评论 效果如下 表数据 查…...

Mac M1通过VMWare Fusion安装Centos7记录(镜像和网络有大坑)

以前用linux系统基本都在我的服务器上或者是在win上进行,从没有在M1上进行创建,因此走了一些坑吧,这里会列出我的详细安装步骤。 下载镜像 镜像的下载网站:https://www.centos.org/download/ 在该网站中,不管是Every…...

女生适合当程序员吗?

在这个节日里,让我们来讨论一个比较热门的话题吧。女生到底适不适合当程序员? 在开启这个话题前,我们先来认识一位伟大的女性吧。 阿达洛芙莱斯(Augusta Ada King)是著名英国诗人拜伦之女,她本职是一位数…...

昇腾AI机器人发布,12家企业、5家高校签约,昇腾AI开发者创享日全国巡展沈阳首站成功举办

“创未来,享非凡”昇腾AI开发者创享日2023年全国巡回首站活动成功举办,本次活动由辽宁省科技厅指导,由沈阳市科技局、浑南区人民政府、沈阳高新区管理委员会、华为技术有限公司共同主办,沈阳昇腾人工智能生态创新中心承办&#xf…...

anaconda如何改变虚拟环境安装路径

1、查看anaconda的环境配置(对应结果如下图所示) conda config --show 或者 conda info 查看虚拟环境安装位置的结果如上图所示 2、修改配置语法 conda config --add key value #添加语法 conda config --remove key value #删除语法 其中&#xff0…...

根据卫星运动矢量计算轨道六根数

前言 STK软件在给定六根数时,可求得卫星位置和速度矢量,但有时我们通过星历参数得到卫星的位置和速度矢量,希望能够反演得出卫星轨道的六根数。从而方便对该卫星轨道进行仿真模拟。 计算过程 给定卫星在J2000坐标系下的的位置矢量r和速度矢…...

关于微信小程序安装npm的过程,从下载到小程序内部安装完成

1.先从官网下载nodejs 网站为Node.js (nodejs.org),选择左边第一个2 然后一直next,选默认就行 选择自己喜欢的路径我的是D:\nodejs-v18.12.1 3 下载完成后,先在安装文件夹中新建两个文件夹 node_cache node_global 4 配置一下环境变量&…...

IO-操作系统

用户态和内核态 现代操作系统,为了保护系统的安全,都会划分出内核空间和用户空间,或者我们经常说的内核态和用户态。简单来说,就是划分为内核态和用户态两个等级,运行在用户态的进程大都是一些应用程序,能够…...

Downie 4 4.6.12 MAC上最好的一款视频下载工具

Downie for Mac 简介 Downie是Mac下一个简单的下载管理器,可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们。 Downie 4 Downie 4 for Mac Downie 4 for Mac软件特点 支持许多站点 -当前支持1000多个不同的站点&…...

unity 玩家移动时idle和run动画频繁切换

项目场景: unity 控制玩家移动 问题描述 idle和run动画频繁切换 void Movement(){ xVelocity Input.GetAxisRaw("Horizontal"); anim.SetFloat("speed",Mathf.Abs(rb.velocity.x));//跑动动画 if(xVelocity !0){ transform.localScal…...

小程序 table组件

最近有在小程序中用table的需求,但是没有找到有符合要求的组件,所以自己弄了一个,能满足基本需求。 组件下载:https://download.csdn.net/download/weixin_67585820/85047405 引入 "usingComponents": {"table": "…...

利用摄影测量进行地形建模的介绍

一、前言 从一个地方到另一个地方的地球表面由连续和突然的海拔变化组成,个人和社会都必须应对这些变化。 水从高山和丘陵向下流,从溪流流入河流,形成三角洲,最终汇入大海。 三维 (3D) 地面信息的获取和表示一直是与行星表面相关的…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...

OCR MLLM Evaluation

为什么需要评测体系?——背景与矛盾 ​​ 能干的事:​​ 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。​​干不了的事:​​ 碰到复杂表格(合并单元…...