跳到主要内容

TS 格式(流传输)

TS(MPEG-2 Transport Stream,MPEG-2 传输流)是 MPEG 组织 1995 年针对数字电视广播开发的传输协议。将音视频分割为 188 字节固定长度包,内置纠错码和时钟同步机制,支持实时流传输,广泛应用于数字电视、IPTV 和蓝光碟片(BDMV 目录),但文件体积冗余度较高。

格式简介

TS 是一种用于数字电视广播和流媒体传输的容器格式。TS 格式设计用于在不可靠的传输介质(如广播、网络)上传输音视频数据,具有强大的错误纠正和同步机制。

TS 文件扩展名为 .ts,MIME 类型为 video/mp2tvideo/MP2T。TS 格式是数字电视广播的标准格式,也被广泛用于 IPTV 和流媒体服务。

技术特点

核心特性

  • 固定包大小:每个传输包固定为 188 字节
  • 错误纠正:内置纠错码(FEC)
  • 时钟同步:精确的时钟同步机制
  • 多路复用:支持多个节目流
  • 实时传输:专为实时流传输设计

传输包结构

每个 TS 包包含:

  • 同步字节(1 字节):0x47
  • 传输错误指示(1 位)
  • 有效载荷单元起始指示(1 位)
  • 传输优先级(1 位)
  • PID(13 位):包标识符
  • 传输加扰控制(2 位)
  • 适配字段控制(2 位)
  • 连续计数器(4 位)
  • 有效载荷(可变长度,最多 184 字节)

支持的编解码器

  • 视频编解码器:MPEG-2 Video、H.264、H.265/HEVC
  • 音频编解码器:MPEG-2 Audio、AAC、AC-3

文件结构

TS 文件由连续的传输包组成:

[TS 包 1]                # 188 字节
- 同步字节 (0x47)
- PID
- 有效载荷
[TS 包 2] # 188 字节
[TS 包 3] # 188 字节
...

关键组件

  • PAT(Program Association Table):节目关联表
  • PMT(Program Map Table):节目映射表
  • PES(Packetized Elementary Stream):打包的基本流
  • PSI(Program Specific Information):节目特定信息

使用场景

适用场景

  • 数字电视广播:DVB、ATSC 等数字电视标准
  • IPTV:网络电视服务
  • 蓝光光盘:BDMV 目录中的视频文件
  • 直播流媒体:实时视频流传输
  • 视频录制:数字电视录制

优缺点

优点:

  • 专为实时传输设计
  • 强大的错误纠正能力
  • 精确的时钟同步
  • 支持多节目流
  • 广播标准格式

缺点:

  • 文件体积冗余度较高
  • 结构复杂
  • 不适合存储(更适合传输)
  • 某些播放器可能不支持

代码示例

Python 处理 TS

import ffmpeg

# 转换为 MP4
ffmpeg.input('video.ts').output(
'output.mp4',
vcodec='libx264',
acodec='aac'
).run()

# 合并多个 TS 文件
ffmpeg.input('concat:file1.ts|file2.ts|file3.ts').output(
'output.ts',
c='copy'
).run()

使用 FFmpeg

# 转换 TS 到 MP4
ffmpeg -i input.ts -c:v libx264 -c:a aac output.mp4

# 合并 TS 文件
ffmpeg -i "concat:file1.ts|file2.ts|file3.ts" -c copy output.ts

# 提取视频流
ffmpeg -i input.ts -c:v copy -bsf:v h264_mp4toannexb output.h264

# 提取音频流
ffmpeg -i input.ts -c:a copy output.aac

Python 使用 m3u8 下载 TS

import m3u8
import requests

# 下载 M3U8 播放列表
playlist = m3u8.load('playlist.m3u8')

# 下载所有 TS 片段
for segment in playlist.segments:
url = segment.absolute_uri
response = requests.get(url)
with open(f'segment_{segment.sequence}.ts', 'wb') as f:
f.write(response.content)

相关工具

  • 播放器
    • VLC Media Player:跨平台播放器
    • MPC-HC:Windows 播放器
    • Kodi:媒体中心
  • 处理工具
    • FFmpeg:支持 TS 处理
    • tsMuxer:TS 复用工具
    • TSDuck:TS 处理工具集
  • 编程库
    • Python: ffmpeg-pythonm3u8
    • C/C++: libavformatlibavcodec(FFmpeg)

相关链接

参考