博客
关于我
【网络通信 -- 直播】音视频常见封装格式 -- MEPG2 TS
阅读量:352 次
发布时间:2019-03-04

本文共 2870 字,大约阅读时间需要 9 分钟。

【网络通信 -- 直播】音视频常见封装格式 -- MPEG2 TS

【1】相关码流基本概念

传输流(Transport Stream, TS)是MPEG-2标准中的一种高效数据传输格式,广泛应用于数字电视、网络直播等领域。TS流以固定长度的TS包(Transport Packet)的形式进行编码传输,能够在信道环境较差时提供可靠的数据传输。

1.1 MEPG2系统中编码实现单一码流的过程

  • A/D转换后,通过MPEG-2压缩编码得到ES基本流,该数据流包含I、P、B类型的视频帧或音频取样信息。
  • 通过PES打包器,将ES流分割成长度不等的数据包,并在每个帧中插入PTS/DTS时间戳标记,生成PES流。
  • 根据需要,将PES流打包成PS包(Program Stream)进行存储(如DVD)或传输(如DVB)。每路音视频数据流只包含相应的编码数据流,因此每路PES也只包含相应的数据流。

  • 【2】码流格式

    2.0 TS文件分层

    TS文件(Transport Stream File)是MPEG-2标准中的传输流文件,主要用于数字电视和网络直播。视频编码格式通常为H.264/MPEG-4,音频编码格式为AAC/MP3。TS文件分为三层:

  • TS层:在PES层的基础上加入数据流识别和传输必须的信息。
  • PES层:Packet Elementary Stream(分组基本码流),在音视频数据上加入时间戳等对数据帧的说明信息。
  • ES层:Elementary Stream(音视频数据),直接来源于编码器的原始数据流。

  • 2.1 PES包

    PES(Packetized Elementary Stream)是将ES流根据需要分成长度不等的数据包,并加上包头后形成的打包基本码流。PES包由包头和载荷(payload)组成,通常视频帧被打包成一个PES包,其长度通常大于TS包的188字节,因此需要进行切分。

    字段名称 类型 长度 说明
    pes_start_code 8 bits 3 bytes 固定值 0x000001
    stream_id 8 bits 1 byte 音频或视频流的标识符(0xc0-0xdf或0xe0-0xef)
    pes_packet_length 8 bits 2 bytes 后面pes数据的长度,0表示长度不限制
    flag 1 bit 1 byte 数据不加密标志(通常取0x80)
    flag 1 bit 1 byte 包含PTS/DTS标志(通常取0xc0)
    pes_data_length 1 bit 1 byte 后面数据的长度(通常取5或10 bytes)
    pts 33 bits 5 bytes 显示时间标记(Presentation Time Stamp)
    dts 33 bits 5 bytes 解码时间标记(Decoding Time Stamp)

    2.2 PS流

    PS(Program Stream)节目流由PS包组成,一个PS包由若干PES包组成。PS包的包头包含了同步信息与时钟恢复信息,一个PS包最多可以包含具有同一时钟基准的16个视频PES包和32个音频PES包。


    2.3 TS流

    TS(Transport Stream)传输流由固定长度的TS包组成,TS包是对PES包的一种重新封装,PES包的包头信息仍存在于TS包中。TS流的主要特点是:

  • 固定长度:TS包长度固定为188字节,其中4字节为包头,184字节为有效负载。
  • 独立时间基准:TS流含有独立时间基准,可以从流的任意一段开始独立解码。
  • 鲁棒性:当传输误码破坏某一TS包的同步信息时,接收机可在固定的位置检测其后面包中的同步信息,从而恢复同步,避免信息丢失。

  • 2.3.1 包头格式

    TS包头字段及其长度及说明如下:

    字段名称 类型 长度 说明
    Sync-byte 8 bits 1 byte 固定值 0x47
    Transport-error-indicator 1 bit 1 byte 出错标志
    Payload-unit-start-indicator(PUSI) 1 bit 1 byte 载荷单元起始指示标志
    Transport-priority 1 bit 1 byte 传输优先级规定
    PID 13 bits 1.5 bytes 包识别标志,用于区分不同类型的载荷
    Transport-scrambling-control 2 bits 1 byte 加扰标志
    Adaptation-field-control 2 bits 1 byte 适配域标志
    Continuity-counter 4 bits 1 byte 连续递增计数器

    2.3.2 Adaptation Field

    Adaptation Field字段包含以下信息:

    字段名称 类型 长度 说明
    adaptation_field_length 1 bit 1 byte 自适应域长度
    flag 1 bit 1 byte 取值0x50(包含PCR)或0x40(不包含PCR)
    PCR 5 bits 5 bytes 节目时钟参考(Program Clock Reference)
    stuffing_bytes 1 byte 1 byte 填充字节(通常取0xFF)

    2.4 ES流

    ES(Elementary Stream)是音视频数据的基本码流,不分段的音频、视频或其他信息的连续码流。ES流通过PES打包器进行打包,加入PTS/DTS时间戳标记后形成PES流。

    2.4.1 ES流 - H.264

    H.264视频数据打包时必须加上NALU(Network Abstraction Layer Unit)头,NALU包含NALU类型和NALU头。NALU类型决定了后续数据的内容,常见类型包括:

    NALU类型 说明
    0 帧开始(Nalu header固定为0x00000001)
    1 帧中(Nalu header固定为0x000001)
    2~6 slice组成的其他类型(如P-slice、B-slice)

    2.4.2 ES流 - AAC

    AAC音频数据打包时必须加上ADTS(Audio Data Transport Stream)头,共7字节,包括固定头和可变头。ADTS头的格式如下:

    字段名称 类型 长度 说明
    Frame Header 12 bits 3 bytes 帧头,包含ADTS版本号和编码器ID
    Audio ID 3 bits 1 byte 音频流ID
    Stream ID 3 bits 1 byte 音频流ID
    Fragment Count 2 bits 1 byte fragment计数
    More Fragments 1 bit 1 byte 是否有更多fragment
    Timestamp 33 bits 5 bytes 音频解码时间戳

    以上是MPEG-2 TS流的主要结构和格式描述,理解这些内容有助于更好地进行音视频流的编码、传输和解码。

    转载地址:http://yomr.baihongyu.com/

    你可能感兴趣的文章
    php寻找文本,寻找文本 · Leing中文PHP框架 · 看云
    查看>>
    实例分析Facebook激励视频广告接入
    查看>>
    实例:使用OKGO下载网络压缩包资源,然后解压缩放在本地使用
    查看>>
    实例:Gson解析泛型对象
    查看>>
    Android主题和样式精炼详解
    查看>>
    Shell脚本-KVM虚拟机添加(删除)硬件
    查看>>
    HDFS Missing Block诊断信息的改进
    查看>>
    解决mybatis嵌套查询使用PageHelper分页不准确
    查看>>
    关掉SpringBoot中的debug日志
    查看>>
    Redis源码分析(七)--- zipmap压缩图
    查看>>
    大规模集群自动化部署工具--Chef的安装部署
    查看>>
    一致性哈希算法
    查看>>
    HDFS源码分析(一)-----INode文件节点
    查看>>
    HDFS源码分析(六)-----租约
    查看>>
    自定义Hive Sql Job分析工具
    查看>>
    作为一名非Commiter,如何向开源社区提交自己的代码
    查看>>
    聊聊HDFS RBF第二阶段的主要改进
    查看>>
    公司如何使用开源软件
    查看>>
    流处理系统中的“Exactly Once”语义保证
    查看>>
    论分布式系统中单一锁控制的优化
    查看>>