关于MPEG4 码流(mpeg4 raw data)的格式分析

2023-11-04

 MPEG4码流开头往往如下:

      

    00 00 01 B0 F5 00 00 01 B5 09 00 00 01 00 00 00
    01 20 08 86 84 00 3F 18 58 21 20 A3 1F 00 00 01
    B2 58 76 69 44 30 30 36 32 00 00 01 B6

 

其格式为:

 

     MP4V type b0 size 5     //vosh
     MP4V type b5 size 5     //vo
     MP4V type 0 size 4   
     MP4V type 20 size 16    //vol
         ParseVol: timeBits 15 timeTicks 24000 frameDuration 1001
     MP4V type b6 size 5606   //vop

其宏定义为:

  #define MP4AV_MPEG4_VOL_START 0x20
  #define MP4AV_MPEG4_VOSH_START 0xB0
  #define MP4AV_MPEG4_VO_START 0xB5
  #define MP4AV_MPEG4_VOP_START 0xB6
  #define MP4AV_MPEG4_USER_DATA_START 0xB2

 

    使用格式工厂,看到如下

    根据标准,定义如下(http://bbs.lmtw.com/dispbbs.asp?boardID=20&ID=124481&star=2&page=15

    00 00 01 B0是视频对象序列开始标志(VISOBJSEQ_START_CODE),其后的数据只有一位F4,表示此视频对象编码序列编码的Profile与Level类型是XVID_PROFILE_AS_L4, Profile类型数值定义于xvid.h。

 

 

    00 00 01 B5是视频对象开始标志(VISOBJ_START_CODE),其后只有一位16进制数据09,从这一位数据可以获得视频对象版本号、视频类型和视频信号类型信息,详细介绍见图5-11。

 

 

    00 00 01 00是视频对象开始标志 (VIDOBJ_START_CODE),00 00 01 20是视频对象层开始标志(VIDOBJLAY_START_CODE),其后的11位16进制数据比较重要,解码所需要的VOP纵横比、视频对象形状和图像分辨率等数据都是从这11位数据获得的,详细介绍见图5-11,图中未标记用途的数据表示未使用。

 

 

    00 00 01 B2是用户数据开始标志(USERDATA_START_CODE),十六进制用户数据共有8位。

 

 

    00 00 01 B6是VOP开始标志(VOP_START_CODE),每个VOP编码数据都以VOP标识头开始,VOP标识头比较简单,如果用16进制数据表示其数值为00 00 01 B6。解码的时候,以00 00 01 B6来判定是不是一个VOP的开始,并从VOP标识头后的数据读取编码类型,量化值等参数后完成一帧VOP的解码。

    然后利用ffmpeg转码为mp4文件。

 

附:

    xvid yuv->m4v

    xvid_encraw.exe -i foreman_cif.yuv -w 352 -h 288
 -framerate 15 -csp i420 -o foreman_cif.m4v

    ffmpeg m4v->mp4

    ffmpeg -s cif -vcodec mpeg4 -i foreman_cif.m4v foreman_cif.mp4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于MPEG4 码流(mpeg4 raw data)的格式分析 的相关文章

  • 【总结】浏览器 User-Agent 大全

    一 基础知识 Http Header之User Agent User Agent中文名为用户代理 xff0c 是Http协议中的一部分 xff0c 属于头域的组成部分 xff0c User Agent也简称UA 它是一个特殊字符串头 xff
  • nginx中不同client设置User-Agent与user_agent的坑

    最近发现nginx内部用lua获取user agent xff0c 得到的是一个table值 xff0c 很奇怪 xff0c 自己测试记录一下 xff1a 1 nginx配置 location zcy hello set by lua re
  • @Control详解--Spring2.5

    一个简单的基于注解的 Controller 使用过低版本 Spring MVC 的读者都知道 当创建一个 Controller 时 我们需要直接或间接地实现 org springframework web servlet mvc Contr
  • VS调试技巧

    下面有从浅入深的6个问题 您可以尝试回答一下 一个如下的语句for int i 0 i lt 10 i if i 5 j 5 什么都写在一行 你怎么在j 5前面插入断点 在一个1000次的循环体内部设置断点 你希望当循环进行到900次后中断
  • oracle的stored outline的创建与维护

    author skate time 2011 09 17 执行计划的稳定 如何确定哪些sql的执行计划不稳定 如何固定执行计划 执行计划直接影响app的性能 有的时候执行计划固定是很有用的 有很多因素影响执行计划的不稳定 像optimize
  • 桌面图标有蓝色阴影终极解决方法

    桌面图标有蓝色阴影 桌面图标背景出现蓝色阴影是怎么回事呢 通常情况下桌面图标变成蓝色背景是由于一些错误的设置而导致的 虽然它不影响系统的正常运行 但是看起来总是不舒服的 网上也有很多处理桌面图标背景出现蓝色阴影的方法 但大都不太全面 引起这
  • Unknown column 'rownum' in 'where clause'解决方案

    Unknown column rownum in where clause 当在嵌套的查询语句里面用到rownum的时候会遇到这个问题 比如 SELECT FROM select t id t name from USER INFO t w
  • Linux查看文件夹大小的相关命令

    linux的 du 命令 1 简介 du show disk useage 查看磁盘使用情况 2 语法 du abcDhHklmsSx L lt 符号连接 gt X lt 文件 gt block size exclude lt 目录或文件
  • MySQL的启动问题 (ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO))

    2011 03 18 wcdj 解决方法如下 1 打开mysql的服务 因为我当时安装选择的手动启动 2 将mysql安装的bin目录添加到系统PATH环境变量里 用 分号 分割 3 然后打开cmd 键入命令 mysql u 用户名 p 密
  • Linux 系统的运行级别(Run Level)

    Linux 操作系统自从开始启动至启动完毕需要经历几个不同的阶段 这几个阶段就叫做 Runlevel 同样 当Linux操作系统关闭时也要经历另外几个不同的 Runlevel 下面详细介绍一下 Runlevel 并展示一些小技巧来让Linu
  • 编写Linux C++程序如何影响VIRT(虚存)和RES(实存/常驻内存)

    在Linux命令行中执行top命令 可以查询到所有进程使用的VIRT虚拟内存 RES常驻内存和共享内存SHR 那么 什么是VIRT虚拟内存 RES常驻内存和共享内存SHR 我们编写的Linux C 程序如何影响它们呢 查阅资料后 归纳一下
  • 如何在Linux中创建用户(useradd命令)

    Linux 是一个多用户系统 这意味着多个人可以同时与同一个系统交互 作为系统管理员 您有责任通过创建和管理系统的用户和组来管理系统的用户和组 删除用户并将它们分配给不同的groups 在本文中 我们将讨论如何使用创建新用户帐户userad
  • alter table move跟shrink space的区别

    author skate time2010 05 28 alter table move跟shrink space的区别 今天主要从两点说他们的区别 1 碎片的整理 2 空间的收缩 SQL gt select from v version
  • 字符设备驱动程序

    字符设备驱动程序 下面以一个简单的例子来讲解下字符设备驱动程序 首先需要有内核环境 Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合 通过这些函数使得Windows的设备操作犹如文件一般 在应用程序看来 硬件设备只 是一个设备
  • Collections.sort方法对list排序的两种方式

    Collections sort 分为两部分 一部分为排序规则 一部分为排序算法 规则用来判断对象 算法则考虑如何进行排序 对于自定义对象 sort 不知道规则 所以无法比较 这种情况下一定要定义排序规则 方式有两种 第一种 java la
  • AndroidManifest中activity属性参数设置大全

    activity属性设置大全 android alwaysRetainTaskState true false android clearTaskOnLaunch true false android configChanges mcc m
  • 测试alter table shrink space compact cascade及学习user_tables相关列的含义

    SQL gt alter table test shrink enable row movement alter table shrink space须开启行移动 Table altered SQL gt select table name
  • Linux 文本处理工具

    一 Linux 及Unix平台 sed awk grep 这三个工具都要用到正则表达式 把常用贴出来 1 行的匹配 root mypc sed n 2p etc passwd 打印出第2行 root mypc sed n 1 3p etc
  • 如何在 Debian 9 上添加和删除用户

    Debian 以及所有其他 Linux 发行版都是一个多用户操作系统 每个用户可以对各种命令行和 GUI 应用程序拥有不同的权限级别和特定设置 了解如何添加和删除用户是 Linux 用户应该了解的基本技能之一 本教程介绍如何在 Debian
  • ORA-01536: 超出表空间 'YYPART' 的空间限额

    ORA 01536 超出表空间 YYPART 的空间限额 author skatetime 2008 08 01 现象 研发提示空间不够用 日志显示 ORA 01536 超出表空间 YYPART 的空间限额 解决 alter user sk

随机推荐

  • echarts前后端交互数据_前后端交互技术有哪些

    我们都知道 一个完整的IT项目是由多个不同岗位的成员共同完成 包括UI设计 前端开发 后端开发 测试等 为了实现项目的完整性 前后端需要运用技术实现联通 不过 前后端交互技术有哪些 参加郑州Web前端培训班会学吗 且看小编的分析 目前常用的
  • Java常见算法(六)【省份数量- 分组算法:深度优先、广度优先、并查集 】

    文章目录 省份数量 经典的分组算法 1 深度优先遍历 2 广度优先 3 并查集 算法 实验源码 省份数量 经典的分组算法 https www bilibili com video BV1Jv411A7Ty p 34 比如现在有三个城市 A城
  • Ai-M61/62系列的固件烧录指导

    文章目录 前言 一 软硬件的准备 二 原始硬件接线 三 烧录软件的使用 联系我们 前言 本文介绍Ai M61 62系列模组 开发板的固件烧录 一 软硬件的准备 Ai M61 62系列模组或者开发板一个 Ai M61 62烧录软件 下载链接
  • 进程和计划服务管理

    一 进程和服务 服务 是在操作系统内部活依赖网络环境运行的一种软件组件提供特定的功能或服务 服务一般在后台运行 职责包括接受请求 处理数据 执行操作 服务可以是系统自带的 也可以是基于linux开发的应用程序 服务特点 1 服务可以通过端口
  • YouTube-8M: A Large-Scale Video Classification Benchmark

    Abstract Many recent advancements in Computer Vision are attributed to large datasets Open source software packages for
  • 基于Android studio 的rpg游戏大地图的绘制

    今天开始写第一篇博客 好激动呢 衷心希望自己能坚持下去 不说闲话了 我们马上开始 最近一直在做一个基于Android studio的rpg2D角色扮演游戏 虽然说这个游戏已经烂大街了 其中的逻辑也是有了很多准确的简便的解释 不过真正做起来还
  • 【c++迭代器模拟实现】

    目录 前言 一 STL初始 二 六大组件之迭代器 迭代器初始 迭代器的模拟实现 1 victor 正向迭代器 反向迭代器1 反向迭代器2 反向迭代器3 2 list 正向迭代器 反向迭代器 总结 前言 打怪升级 第52天 一 STL初始 什
  • Oracle如何查询和中止正在运行的JOB

    今天遇到一个问题 有一个JOB会一直不停的执行 不能按照设定的间隔来执行 通过查询相关资料发现原来如此 当一个oracle job运行时返回一个error时 oracle会再次设法执行它 第一次尝试是在一分钟后 第二次是在2分钟后 第三次是
  • 代码点和代码单元的简单理解

    简单来说 代码单元就是用来表示代码点的 char数据类型就是一个采用UTF 16编码表示Unicode码点的代码单元 那代码点是什么 就是在unicode编码中的每一个符号 在特殊符号没出现之前 每个unicode代码点 字符在内 可以用一
  • 数据结构【2019年408第41题】

    1 一个N长度的链表的为了按照题目的需求 我们观察可以发现可以将一个链表从中间分开然后逆置然后依次插入则我们大致的思路如下 1 将链表分为两段 L和L2 2 将L2逆置从顺的顺序变为反过来的顺序 3 将L和L2按照 L gt L2 gt L
  • 高通LK显示屏分辨率太大,下半部分显示异常-FB buff超了的问题

    问题解决 bootable bootloader lk include dev fbcon h define LOGO IMG OFFSET 12 1024 1024 改成 define LOGO IMG OFFSET 20 1024 10
  • 前端利用html2canvas+jspdf实现html转pdf

    公司业务的月报页面 要实现pdf下载 查了资料 大概有个方向 就是利用html2canvas把html转为图片 然后再生成pdf格式的文件实现了下载 核心代码 import html2canvas from html2canvas impo
  • @Async注解在springboot项目中的使用

    众所周知 Async注解是开启一个异步线程的执行 但在springboot项目中如何具体的使用这个注解 还需要一一分析 仔细研究如何能更好的使用 Async注解 1 在项目启动类上添加 EnableAsync注解 如果没有这个注解而仅仅只有
  • 虚拟机安装Ubuntu16.04详细步骤

    文章目录 系统下载 安装VMware 配置虚拟机 系统安装 系统下载 官方下载地址 https ubuntu com download 阿里云镜像 推荐 http mirrors aliyun com ubuntu releases 16
  • linux/vim 操作tips

    1 Linux查看物理CPU个数 核数 逻辑CPU个数 总核数 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看物理CPU个数 cat proc cpuinfo grep
  • 服务器部署redis和springboot整合redis详细步骤

    目录 redis服务器部署 在springboot项目中整合redis redis相关链接 文档 文件下载 阿里云服务器官网 云小站 专享特惠 云产品推荐 阿里云 redis服务器部署 购买阿里云服务器后 到控制台查看实例 获取公网IP 账
  • 蓝桥杯——方格填数(JAVA)

    题目 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 如下的 10个格子 填入 0 9 的数字 要求 连续的两个数字不能相邻 左右 上下 对角都算相邻 一共有多少种可能的填数方案 运行限制 最大运行时间 1s 最大运
  • 【全】正则表达式语法

    简单来说 正则表达式就是描述字符串的规则 其作用如下 1 校验数据的有效性 2 从文本中提取内容 3 文本内容替换 元字符 元字符即正则表达式中具有特殊含义的专用字符 主要分为5类 1 基础 任意字符 换行除外 d 任意数字 D 任意非数字
  • Android自定义控件之自定义属性(二)

    前言 上篇介绍了自定义控件的基本要求以及绘制的基本原理 本篇文章主要介绍如何给自定义控件自定义一些属性 本篇文章将继续以上篇文章自定义圆形百分比为例进行讲解 有关原理知识请参考Android自定义控件之基本原理 一 这篇文章 需求产生背景
  • 关于MPEG4 码流(mpeg4 raw data)的格式分析

    MPEG4码流开头往往如下 00 00 01 B0 F5 00 00 01 B5 09 00 00 01 00 00 00 01 20 08 86 84 00 3F 18 58 21 20 A3 1F 00 00 01 B2 58 76 6