一款在线可视化多媒体格式解析工具: MediaInsight

1 月 20 日
 chen495810242

MediaInsight 使用说明

电梯直达:MediaInsight

简介

MediaInsight 是一款在线可视化多媒体格式解析工具,专为音视频开发者和学习者打造。无需安装任何软件,打开浏览器即可深入分析各类媒体文件的内部结构。通过直观的树形结构、十六进制数据对照、图表统计等功能,帮助用户快速理解音视频封装格式的原理,定位开发中遇到的各类问题。

核心特性

广泛的格式支持

支持主流的音视频封装格式,包括:

多维度解析视图

音视频预览

数据可视化


各格式详细解析说明

FLV (Flash Video)

FLV 是一种流媒体封装格式,结构简单,常用于直播场景。MediaInsight 提供完整的 FLV 结构解析:

文件头 (FLV Header)

Tag 结构 每个 FLV Tag 包含以下字段:

音频 Tag 详情

视频 Tag 详情

脚本数据 (onMetaData)


MP4 / fMP4

MP4 基于 ISO Base Media File Format ,采用 Box (也称 Atom )嵌套结构。MediaInsight 以树形视图展示完整的 Box 层级:

顶层 Box

moov 内部结构

编码配置解析


MKV / WebM

MKV 采用 EBML (Extensible Binary Meta Language) 结构,类似 XML 的二进制格式:

顶层元素

  • EBML:EBML 头,包含版本和文档类型
  • Segment:片段容器,包含所有媒体数据

Segment 内部结构

  • SeekHead:索引表,快速定位其他元素
  • Info:片段信息
    • TimestampScale:时间戳精度(纳秒)
    • Duration:总时长
    • MuxingApp/WritingApp:创建工具信息
  • Tracks:轨道定义
    • TrackEntry:轨道条目
      • TrackNumber:轨道编号
      • TrackType:类型( 1=视频, 2=音频, 17=字幕)
      • CodecID:编码标识(如 V_MPEG4/ISO/AVC )
      • CodecPrivate:编码私有数据
      • Video:视频参数(宽高、显示尺寸)
      • Audio:音频参数(采样率、声道数、位深)
  • Cluster:数据簇,包含实际媒体数据
    • Timestamp:簇时间戳
    • SimpleBlock/BlockGroup:数据块

MPEG-TS

MPEG-TS 是广播电视和流媒体常用的传输流格式,采用固定 188 字节的包结构:

TS 包头 (4 字节)

  • sync_byte:同步字节,固定为 0x47
  • transport_error_indicator:传输错误标志
  • payload_unit_start_indicator:负载单元起始标志
  • transport_priority:传输优先级
  • PID:包标识符( 13 位)
  • transport_scrambling_control:加扰控制
  • adaptation_field_control:自适应域控制
  • continuity_counter:连续计数器( 4 位)

自适应域 (Adaptation Field)

  • adaptation_field_length:自适应域长度
  • discontinuity_indicator:不连续标志
  • random_access_indicator:随机访问点标志
  • PCR_flag:PCR 存在标志
  • PCR:节目时钟参考( 42 位)

PSI 表

  • PAT (PID=0x0000):节目关联表,映射节目号到 PMT PID
  • PMT:节目映射表,定义节目内的流
    • program_number:节目号
    • PCR_PID:PCR 所在的 PID
    • stream_type:流类型( 0x1B=H.264, 0x24=H.265, 0x0F=AAC )
    • elementary_PID:基本流 PID
    • descriptors:描述符

PES 包

  • packet_start_code_prefix:起始码前缀 (0x000001)
  • stream_id:流标识
  • PES_packet_length:包长度
  • PTS/DTS:显示/解码时间戳

MPEG-PS

MPEG-PS 是节目流格式,常用于 DVD 和监控录像(如 GB28181 ):

Pack Header

  • pack_start_code:包起始码 (0x000001BA)
  • system_clock_reference:系统时钟参考 (SCR)
  • program_mux_rate:复用速率
  • pack_stuffing_length:填充长度

System Header

  • system_header_start_code:系统头起始码 (0x000001BB)
  • rate_bound:速率上限
  • audio_bound:音频流数量上限
  • video_bound:视频流数量上限
  • stream_id/buffer_bound_scale/buffer_size_bound:流缓冲信息

Program Stream Map (PSM)

  • stream_type:流类型
  • elementary_stream_id:基本流 ID
  • 支持的编码:H.264, H.265, G.711, AAC 等

PES 包 与 MPEG-TS 中的 PES 结构相同


RTP

RTP (Real-time Transport Protocol) 用于实时音视频传输:

RTP 头 (12 字节)

  • V:版本号( 2 位),固定为 2
  • P:填充标志( 1 位)
  • X:扩展标志( 1 位)
  • CC:CSRC 计数( 4 位)
  • M:标记位( 1 位),通常表示帧结束
  • PT:负载类型( 7 位)
    • 0 = PCMU (G.711 μ-law)
    • 8 = PCMA (G.711 A-law)
    • 96-127 = 动态类型( H.264, H.265, AAC 等)
  • sequence_number:序列号( 16 位)
  • timestamp:时间戳( 32 位)
  • SSRC:同步源标识( 32 位)

扩展头

  • extension_profile:扩展配置
  • extension_length:扩展长度
  • extension_data:扩展数据

H.264/H.265 Annex B 裸流

Annex B 是 H.264/H.265 的字节流格式,使用起始码分隔 NAL 单元:

起始码

  • 3 字节:0x000001
  • 4 字节:0x00000001 (通常用于 SPS/PPS/VPS/IDR )

NAL Unit Header

H.264:

  • forbidden_zero_bit:禁止位,必须为 0
  • nal_ref_idc:参考级别( 2 位)
  • nal_unit_type:NAL 类型( 5 位)
    • 1 = 非 IDR 图像片
    • 5 = IDR 图像片
    • 6 = SEI
    • 7 = SPS
    • 8 = PPS

H.265:

  • forbidden_zero_bit:禁止位
  • nal_unit_type:NAL 类型( 6 位)
    • 0-9 = 非 TSA/STSA 片
    • 16-21 = BLA/IDR/CRA 片
    • 32 = VPS
    • 33 = SPS
    • 34 = PPS
    • 39-40 = SEI
  • nuh_layer_id:层 ID ( 6 位)
  • nuh_temporal_id_plus1:时域 ID ( 3 位)

SPS 关键字段

  • profile_idc/level_idc:档次和级别
  • pic_width_in_mbs/pic_height_in_map_units:图像尺寸
  • frame_mbs_only_flag:仅帧编码标志
  • chroma_format_idc:色度格式
  • bit_depth_luma/bit_depth_chroma:位深

MP3

MP3 采用帧结构,每帧独立可解码:

帧头 (4 字节)

  • sync:同步字( 11 位全 1 )
  • version:MPEG 版本( 2 位)
    • 00 = MPEG 2.5
    • 10 = MPEG 2
    • 11 = MPEG 1
  • layer:层( 2 位)
    • 01 = Layer III
    • 10 = Layer II
    • 11 = Layer I
  • protection_bit:CRC 保护
  • bitrate_index:码率索引( 4 位)
  • sampling_frequency:采样率索引( 2 位)
  • padding_bit:填充位
  • private_bit:私有位
  • channel_mode:声道模式
    • 00 = 立体声
    • 01 = 联合立体声
    • 10 = 双声道
    • 11 = 单声道
  • mode_extension:模式扩展
  • copyright:版权标志
  • original:原始标志
  • emphasis:强调模式

帧大小计算

  • Layer I: (12 * bitrate / samplerate + padding) * 4
  • Layer II/III: 144 * bitrate / samplerate + padding

字段级详情与十六进制对照

MediaInsight 的一大特色是字段级的详细解析。当您在树形视图中点击任意字段时:

  1. 字段值显示:显示解析后的值,如数字、字符串、枚举名称
  2. 位置信息:显示该字段在文件中的字节偏移和位偏移
  3. 十六进制高亮:右侧的十六进制视图会自动高亮对应的原始字节
  4. 位级解析:对于位域字段,显示具体的位范围和二进制值

这种对照方式让您能够:

  • 验证解析结果的正确性
  • 学习各字段的二进制编码方式
  • 快速定位异常数据的具体位置

隐私安全

MediaInsight 采用纯前端解析技术,所有文件处理均在浏览器本地完成,不会上传任何数据到服务器,充分保障您的数据隐私和安全。

适用场景

  • 音视频入门学习:通过可视化界面直观理解各种封装格式的内部结构
  • 开发调试:快速定位编码异常、时间戳错乱、容器结构错误等问题
  • 质量分析:评估码率分布、帧间隔稳定性等指标
  • 协议分析:分析流媒体协议的数据包结构

快速开始

  1. 访问 MediaInsight 网站
  2. 点击「打开文件」选择本地媒体文件,或点击「打开链接」输入流媒体地址
  3. 等待解析完成,即可浏览各项分析结果
  4. 点击左侧树形结构中的字段,查看详细信息和十六进制数据
  5. 切换到「帧列表」查看逐帧信息,点击帧可预览视频画面或播放音频
  6. 切换到「图表」查看码率分布和帧间隔统计

MediaInsight —— 让多媒体格式解析变得简单直观。

1210 次点击
所在节点    分享创造
3 条回复
dinjufen
1 月 21 日
👍
hugogo
1 月 21 日
厉害,可以部分替代 ffprobe 了
chen495810242
1 月 21 日
@hugogo 才部分替代吗?还有哪些功能没有的?像 tag header ,ts header 解析,ffprobe 也做不到吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1187170

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX