分析二进制文件是一件痛苦的事情,最近在做一个关于流媒体的项目研究,涉及到webm这种开源视频文件,它其实就是用Matroska(也就是大家熟悉的MKV容器格式)包裹VP8和VBRIS,没什么特别的。

因为要研究视频流的传输过程,所以我需要把IMediaSample保存下来,下面是一个SimpleBlock十六进制显示。

0xA3, 0xB6, 0x81, 0x00, 0x28, 0x00, 0xD1, 0x05, 0x00, 0x05, 0x10, 0xA4, 0x00, 0x18, 0x00, 0x18,
0x58, 0x2F, 0xF4, 0x00, 0x08, 0x80, 0x04, 0x00, 0x00, 0x80, 0x09, 0x67, 0x31, 0xD7, 0x6A, 0xB4,
0x61, 0x8C, 0x65, 0xBA, 0x8D, 0x16, 0x53, 0x0D, 0x66, 0x9B, 0x41, 0x90, 0xBF, 0x59, 0xA5, 0x0E,
0x63, 0xAE, 0xD5, 0x68, 0xC3, 0x14, 0x00, 0x00

A3是SimpleBlock的标志位,B6=10110110,所以计算这段SimpleBlock大小的使用了一个字节去计算(0+1),大小为:00110110=54,故有效数据为54字节,实际在webm filter中截取的IMediaSample包中,只有50个字节。B6后面的0x81, 0x00, 0x28, 0x00这四个字节是SimpleBlock Header。

关于SimpleBlock Header的相关信息如下:

SimpleBlock Header
Offset Player Description
0x00+ must Track Number (Track Entry). It is coded in EBML like form (1 octet if the value is < 0x80, 2 if < 0x4000, etc) (most significant bits set to increase the range).
0x01+ must Timecode (relative to Cluster timecode, signed int16)
0x03+ -
Flags
Bit Player Description
0 - Keyframe, set when the Block contains only keyframes
1-3 - Reserved, set to 0
4 - Invisible, the codec should decode this frame but not display it
5-6 must Lacing

  • 00 : no lacing
  • 01 : Xiph lacing
  • 11 : EBML lacing
  • 10 : fixed-size lacing
7 - Discardable, the frames of the Block can be discarded during playing if needed
Lace (when lacing bit is set)
0x00 must Number of frames in the lace-1 (uint8)
0x01 / 0xXX must* Lace-coded size of each frame of the lace, except for the last one (multiple uint8). *This is not used with Fixed-size lacing as it is calculated automatically from (total size of lace) / (number of frames in lace).
(possibly) Laced Data
0x00 must Consecutive laced frames

简单解释下,因为我的SimpleBlock Header中第一个字节为0x81大于0x80,所以我的这条视频的Track Number(轨道号)为:2,也就是说这段SimpleBlock是音频。紧接着的0x00, 0x28表示的是时间码,因为时间码用两个字节来表示的,其值为0.040s。最后的0x00大家可以对照上图“0x03+”看看具体含义。

注:上面的那段SimpleBlock总共有56个字节,减去标志位A3和计算SimpleBlock大小的B6,剩下54个字节,再减去SimpleBlock Header所占用的四个字节,正好是50个字节。这里我做了个SimpleBlock模块解析说明,Matroska文件格式其他模块解析过程类似,其他的可以参考官方文档:http://www.matroska.org/technical/specs/index.html

Matroska文件解析之SimpleBlock相关推荐

  1. webM文件解析--基于Matroska和EBML

    1. 什么是webM 要说webM,先说Matroska,Matroska是一个可扩展的,开源的多媒体容器(说简单点,容器的作用,就是把视频和音频封装到一个文件).使用这种容器的常见文件,一个是MKV ...

  2. Json文件解析(下

    Json文件解析(下) 代码地址:https://github.com/nlohmann/json 从STL容器转换 任何序列容器(std::array,std::vector,std::deque, ...

  3. Json文件解析(上)

    Json文件解析(上) 代码地址:https://github.com/nlohmann/json 自述文件 alt=GitHub赞助商 data-canonical-src="https: ...

  4. OpenCV读写视频文件解析(二)

    OpenCV读写视频文件解析(二) VideoCapture::set 设置视频捕获中的属性. C++: bool VideoCapture::set(int propId, double value ...

  5. OpenCV读写视频文件解析

    OpenCV读写视频文件解析 一.视频读写类 视频处理的是运动图像,而不是静止图像.视频资源可以是一个专用摄像机.网络摄像头.视频文件或图像文件序列. 在OpenCV 中,VideoCapture 类 ...

  6. cocosstudio csd文件解析为.lua

    在学习python过程中,有幸能够看到一位大神在网页中公开的一个关于<CocosStudio 文件解析工具CsdAnalysis>的源码.本人使用稍作改变,由原有的.csd文件转换为C++ ...

  7. java解析五元组_pcap文件解析,并且按照五元组分类

    [实例简介] pcap文件解析,并按照五元组分包,全部用java语言实现. [实例截图] [核心代码] PcapTestZZ ├── PcapTestZ │   ├── 111.206.37.1930 ...

  8. 文件解析库doctotext源码分析

    doctotext中没有make install选项,make后生成可执行文件 在buile目录下面有.so动态库和头文件,需要的可以从这里面拷贝 build/doctotext就是可执行程序. do ...

  9. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

最新文章

  1. Hadoop集群上使用JNI,调用资源文件
  2. 神策数据张何津:构建银行数字化运营体系,赋能业态新发展
  3. 设计模式(24)-----责任链模式
  4. C++笔记之CopyFile和MoveFile的使用
  5. 基于.net技术的 Rss 订阅开发
  6. Kotlin学习笔记 —— 函数,字符串,可空性以及标准库函数(2)
  7. 201912-3 化学方程式 的一种解法
  8. 固态硬盘用软件测试读不出来,为什么我测不出固态硬盘的官标性能值?
  9. .\Flash\Blinky.axf: Error: L6200E: Symbol SysTick_Handler multiply defined (by hal_cm0.o and blinky.
  10. 重置计算机的网络配置是什么意思,电脑怎么重置网络设置 win10网络重置后连不上网怎么办...
  11. OpenCV2.4.13 文本分割(水平垂直,直方图投影)
  12. VS下报LNK1104的一种解决方法
  13. 【调剂】东北石油大学计算机科学与技术专业接收调剂
  14. 世界互联网大会展示前沿技术热议创新方向
  15. 计算机工程与科学论文格式,论文模版 - 计算机工程与科学.doc
  16. Android Native jni 编程入门
  17. 使用Python批量旋转,镜像图片
  18. 名帖275 董其昌 行书《书画合璧山水册》
  19. mov和mp4格式哪个好_在线视频格式转换器哪个好?求一个能转换多种格式的工具...
  20. 第4次超级机器人大战精灵查姆的精神奇迹的修得方法

热门文章

  1. 在特征图上按照高斯公式计算置信度
  2. Java项目:汽车租赁信息网站(java+ssm+mysql)
  3. 安装ug时提示java出错_为什么安装ug许可证会失败?快速解决ug安装许可证会失败问题...
  4. 互联网起源之电磁波原理
  5. java去掉cdata,java-解析时CDATA XML被截断
  6. Android之代码混淆
  7. Verilog使用 $sformatf实现字符串拼接
  8. 49个影响网站排名的因素(完整版)(转自点石互动)
  9. yarn link 用法
  10. excel自动行高后只显示一行怎么回事?