前言
在了解TS之前还应该知道一些基本知识
容器格式的基本知识介绍
容器格式(Container Format)是一种多媒体文件格式,用于封装不同类型的媒体数据(例如视频、音频、字幕等)并将它们存储在同一个文件中。容器格式允许将多个独立的流(视频流、音频流、字幕流等)打包在一个文件里,同时管理它们的同步和解码。
1. 容器格式的基本概念
容器格式并不直接对视频或音频进行压缩,而是将已压缩的数据流(通常由不同的编码格式产生)封装在一起。它负责存储流的顺序、时间戳、解码方式以及如何将这些流同步播放。
举个例子:
一个 MP4 文件(扩展名 .mp4
)可能包含:一个视频流,使用 H.264 编码。一个音频流,使用 AAC 编码。一个字幕流,使用 SRT 或 VTT 格式。虽然视频和音频都是经过压缩的,但它们被存储在同一个 MP4 容器内,并且容器负责管理这些流的播放顺序和同步。
2. 容器格式的作用
容器格式主要有以下几个作用:
(1)多路复用:容器格式可以将不同类型的流(视频、音频、字幕等)整合在一个文件中,使得这些流可以同时播放。例如,在一个电影文件中,你可以有多个音频轨道(不同语言)、不同的字幕流(不同语言),以及一个视频流。
(2) 同步管理:容器格式会确保视频流、音频流和字幕流之间的同步。无论是流媒体播放还是本地播放,容器格式帮助播放器知道如何协调多个流的播放,以确保视频和音频匹配。
(3) 支持多种编码格式:容器格式允许不同类型的编码格式存在于同一个文件中。例如,你可以在同一个 MKV 文件中使用 H.265 编码的视频流、AAC 编码的音频流和 ASS 格式的字幕流。
4. 常见的容器格式
不同的容器格式支持不同的编码方式和特性。以下是一些常见的容器格式及其特点:
(1) MP4(.mp4)
最常用的容器格式之一,尤其是在互联网视频流媒体和存储中广泛应用。
支持的编码格式:常见的有 H.264(视频编码)、AAC(音频编码)、MP3(音频编码)等。
优点:广泛支持,兼容性好,压缩效率高。
缺点:不支持某些高级特性(例如多音轨和多字幕流)。
(2) MKV(Matroska,.mkv)
开源容器格式,非常灵活,支持更多的视频和音频编解码器,以及多音轨和多字幕流。
支持的编码格式:H.264、H.265、VP9(视频编码);AAC、MP3、FLAC(音频编码);SRT、ASS(字幕编码)。
优点:灵活、支持多种媒体流、支持高质量音视频。
缺点:某些旧设备或播放器可能不支持。
(3) AVI(Audio Video Interleave,.avi)
由微软推出的容器格式,曾是 Windows 平台的标准格式。
支持的编码格式:DivX、Xvid、H.264、MP3 等。
优点:兼容性强(尤其是在 Windows 平台上)。
缺点:文件较大,压缩效率不如 MP4;不如 MKV 灵活,支持的流类型较少。
(5) TS(Transport Stream,.ts)全称:MPEG-2 Transport Stream(MPEG-2 传输流)
主要用于 广播 和 流媒体传输,常用于电视广播、卫星广播等场景。
支持的编码格式:视频流常使用 MPEG-2 或 H.264,音频流使用 MP2 或 AAC 等。
优点:支持多路复用,容错能力强。
缺点:文件较大,压缩效率不高,不适合长时间存储。
容器格式是用于封装不同类型的多媒体数据(如视频、音频、字幕)的文件格式,它并不直接对数据进行压缩,而是管理数据的封装、同步和播放。常见的容器格式包括 MP4、MKV、AVI、MOV 等,每种格式有其特定的用途和优缺点。在选择容器格式时,通常需要考虑兼容性、文件大小、支持的编码格式等因素。
一,TS 简单介绍
1. TS 格式概述
- 全称:MPEG-2 Transport Stream(MPEG-2 传输流)
- 文件扩展名:通常为
.ts
- 用途:主要用于视频和音频的传输,尤其是在网络广播、卫星、地面和有线电视中,用于高效地传输多路数据流(视频、音频、字幕等)。
2. TS 格式的特点
- 多路复用:TS 格式支持多路数据流的复用(例如,音频、视频、字幕流等),并且每个流都有一个时间戳,便于同步。它的设计能够容忍丢包和数据错误,所以在不稳定的网络环境中也能稳定传输。
- 容错性强:在传输过程中,TS 格式能够较好地处理数据丢失和错误,这是因为它内置了错误恢复和纠错机制。例如,它的 包大小 通常是 188 字节,这使得数据传输更具鲁棒性。
- 流媒体传输:TS 格式广泛用于网络流媒体协议(如 HTTP Live Streaming, HLS),通过将视频拆分为小段(通常为几秒钟一个段)进行传输,使得播放端可以随时开始播放而不需要等待整个视频下载完成。
3. TS 格式与其他格式的区别
- 与 MP4 格式的区别:MP4 格式通常用于存储视频文件,在压缩和存储效率方面表现较好,但它的错误恢复能力不如 TS 格式。TS 格式则侧重于流式传输、广播和容错传输,因此更适合需要高可靠性的实时传输和广播。
- 与 MKV 格式的区别:MKV 格式也是一种容器格式,但与 TS 格式不同,MKV 支持更复杂的多媒体内容(例如多种字幕、音轨、章节等)。而 TS 格式则更适合视频传输和存储,尤其是广播电视。
4. TS 格式的优点和缺点
优点:
- 高容错性:适用于不稳定的网络传输环境,能有效处理丢包、错误。
- 适合流媒体和广播:支持实时传输,可以有效地进行视频广播和直播流式传输。
- 多路复用:能够同时处理多个音视频流,适合同时传输多个媒体内容。
缺点:
- 文件大小较大:由于 TS 格式的文件通常包含多个流,并且没有进行压缩,因此文件相较于其他格式可能较大。
- 不适合存储:尽管 TS 格式适合流媒体传输,但它并不适合作为存储格式。若需要将视频文件进行压缩和存储,MP4、MKV 等格式更为高效。
二,TS 包头结构(前 4 个字节,32 位)
在 TS (Transport Stream) 容器中,文件的前四个字节是非常重要的,它们构成了 TS 包头(TS Packet Header),这些字节对解析 TS 流的结构和同步非常关键。
TS 文件的每个数据包(Packet)大小为 188 字节,其中前 4 字节组成了包头部分。以下是 TS 包头 前 4 字节 的结构和意义:
掩码 | 比特 | 含义 |
---|---|---|
0xFF000000 | 0x47(同步字节) | 同步字节(Sync Byte):这是每个 TS 包的第一个字节,值为 0x47(即 01000111),用于标记数据包的开始。 |
0x00800000 | 传输错误标志 | 传输错误标志(Transport Error Indicator, TEI):1 bit,表示是否发生传输错误。 |
0x00400000 | Payload开始标记 | 同步标志(Payload Unit Start Indicator, PUSI):1 bit,表示数据包是否是某个数据流(如视频或音频)的起始部分 |
0x00200000 | 优先级标记 | 1 bit,标识该包是否有优先级,若为 1,表示该包有更高优先级,通常用于关键数据流的传输。 |
0x001FFF00 | PID (13 bits) | PID(Packet Identifier) 13 位 PID。 |
0xC0 | Transport scrambling control (TSC) | ’00’ = Not scrambled.For DVB-CSA and ATSC DES only:[12] ’01’ (0x40) = Reserved for future use ’10’ (0x80) = Scrambled with even key ’11’ (0xC0) = Scrambled with odd key |
0x30 | Adaptation field control | 01 – no adaptation field, payload only,10 – adaptation field only, no payload,11 – adaptation field followed by payload,00 – RESERVED for future use [13] |
0xF | Continuity counter | Sequence number of payload packets (0x00 to 0x0F) within each stream |
关于PID
在 MPEG-2 Transport Stream (TS) 中,PID(Packet Identifier)是一个非常重要的字段,用于标识和区分不同的 数据流。每个 TS 包都包含一个 PID,通过它可以知道该 TS 包属于哪种类型的流(比如视频流、音频流、字幕流、私有数据流等)。
PID 是一个 13 位 的数字,根据 PID 的值,TS 包可以属于不同的流类型。常见的 PID 值范围和其对应的流类型如下:
PID 值范围 | 流类型 | 说明 |
---|---|---|
0x0000 | PAT(Program Association Table) | 用于传输程序关联表(PAT),每个 TS 流都包含一个 PAT。它指示程序的存在和每个程序对应的 PMT。 |
0x0001 | PMT(Program Map Table) | 用于传输程序映射表(PMT),该表包含每个程序的所有流信息,如视频流、音频流、字幕流等。 |
0x0002 – 0x1FFF | 视频、音频、数据流 | 这些 PID 对应的 TS 包携带的是视频流、音频流或其他类型的数据流。每个 PID 代表一个特定的数据流。 |
0x03 – 0x1FF | 音频流 | 例如,PID 为 0x0100 可能对应一个音频流。 |
0x0100 – 0x1FF | 字幕流 | 例如,PID 为 0x0200 可能对应一个字幕流。 |