mp4v2 和mp4的一些基础知识

由于项目需要做mp4文件的合成(264+aac)和mp4文件的解析; 
MP4文件本身就是一个容器,对于视频来说就是把不同的内容放按照mp4的规则存放而已; 
如果完全自己写代码实现,可能需要完全理解mp4的规则;才能做好mp4文件的解析; 
测试过程中,考虑到简单易用性同时对生成mp4文件的兼容性考虑,采用开源项目mp4v2作为mp4文件的muxer和demuxer工具;

1.mp4v2 源代码下载.

http://www.codeforge.cn/article/259182 
最新版本是mp4v2-2.0.0

2.mp4v2 Linux编译

./configure –prefix=/home/installtest/ –disable-debug –disable-shared
make
make install

3.mp4v2一些基本sample的使用

其实在sample下面这些基本的命令代码基本以及包含常用mp4v2的api使用方法.

-rwxr-xr-x 1 ll ll 405K Nov  4 15:49 mp4art
-rwxr-xr-x 1 ll ll 598K Nov 4 15:49 mp4chaps
-rwxr-xr-x 1 ll ll 162K Nov 4 15:49 mp4extract
-rwxr-xr-x 1 ll ll 241K Nov 4 15:49 mp4file
-rwxr-xr-x 1 ll ll 511K Nov 4 15:49 mp4info
-rwxr-xr-x 1 ll ll 164K Nov 4 15:49 mp4subtitle
-rwxr-xr-x 1 ll ll 279K Nov 4 15:49 mp4tags
-rwxr-xr-x 1 ll ll 860K Nov 4 15:49 mp4track
-rwxr-xr-x 1 ll ll 98K Nov 4 15:49 mp4trackdump

4.mp4文件一些基础知识

./mp4info 20161024091151_180.MP4
./mp4info version 2.0.
20161024091151_180.MP4 :
Track Type Info
audio MPEG- AAC LC, 180.096 secs, kbps, Hz
video H264 Baseline@4.2, 180.000 secs, kbps, 1920x1080 @ 30.000000 fps
./mp4track 20161024091151_180.MP4 --list
track[] id=
type = audio
enabled = true
inMovie = false
inPreview = false
layer =
alternateGroup =
volume = 1.0000
width = 0.00000000
height = 0.00000000
language = Undetermined
handlerName =
userDataName = <absent>
track[] id=
type = video
enabled = true
inMovie = false
inPreview = false
layer =
alternateGroup =
volume = 0.0000
width = 1920.00000000
height = 1080.00000000
language = Undetermined
handlerName =
userDataName = <absent>

解析mp4的一些基本内容;比如长宽 和trackid 音视频的编码算法等等基本知识;

比如解析track 2 是一个视频通道,这个id从面mp4track 内容里面获取的.

./mp4trackdump 20161024091151_180.MP4  -t
./mp4trackdump version 2.0.
mp4file 20161024091151_180.MP4, track , samples , timescale
sampleId , size duration time ::00.000 S
sampleId , size duration time ::00.033
sampleId , size duration time ::00.066
sampleId , size duration time ::00.100
sampleId , size duration time ::00.133
sampleId , size duration time ::00.166
sampleId , size duration time ::00.200

这儿有一些关键信息:

sampleId 就是mp4 里面frame的索引;每个sampleId 对应一帧264的视频 
size 就是frame的大小 
duration 这个是给播放器使用的,播放器需要显示这一帧的时间就是 3000 / 90000 (timescale) 秒;这个视频是30帧的,就是1/30秒;后面的rtsp发流的时间撮也是根据这个时间来处理的; 
后面的时间就是转化为秒为单位的时间;

比如解析track 1 音频通道

./mp4trackdump 20161024091151_180.MP4  -t
./mp4trackdump version 2.0.
mp4file 20161024091151_180.MP4, track , samples , timescale
sampleId , size duration time ::00.000 S
sampleId , size duration time ::00.128 S
sampleId , size duration time ::00.256 S
sampleId , size duration time ::00.384 S
sampleId , size duration time ::00.512 S
sampleId , size duration time ::00.640 S
sampleId , size duration time ::00.768 S
sampleId , size duration time ::00.896 S
sampleId , size duration time ::01.024 S
sampleId , size duration time ::01.152 S

sampleId 就是mp4 里面aac frame的索引;每个sampleId 对应一阵aac的视频 
size 就是frame的大小 
duration 音频和视频一样,1024 就是在1024/8000 S时间内音频采样数据通过aac压缩算后得到的,其它音频算法压缩算法也基本一样; 
后面的时间就是转化为秒为单位的时间;

mp4v2的api就是隐藏了复杂的mp4结构解析流程,返回给用户直接是一帧帧数据的方式; 
你只需要通过对应的接口~以帧的方式读取处理即可;

简单高效,基本和其它的文件操作没啥区别;

mp4v2 基本知识的更多相关文章

  1. 嵌入式 使用mp4v2将H264+AAC合成mp4文件

    录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是: (1)接收并解析RTP包,分离出H264和AAC数据流: (2)将H26 ...

  2. 使用mp4v2将H264+AAC合成mp4文件

    录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是: (1)接收并解析RTP包,分离出H264和AAC数据流: (2)将H26 ...

  3. MP4v2 基本使用(二)

    MP4转H264文件 本文最目标是基本的MP4v2接口的使用,并且实现一个简单的提取mp4文件里面264流的功能: 1.264文件基本知识 下看看H264文件的基本常识 NAL 头 0x00 0x00 ...

  4. 00.mp4v2工具的用法

    1.交叉编译mp4v2库# ./configure --prefix=/usr/local/mp4v2-2.0.0 --host=arm-hisiv300-linux  CC=arm-hisiv300 ...

  5. 你必须知道的EF知识和经验

    注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...

  6. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  7. 学点HTTP知识

    不学无术 又一次感觉到不学无术,被人一问Http知识尽然一点也没答上来,丢人丢到家了啊.平时也看许多的技术文章,为什么到了关键时刻就答不上来呢? 确实发现一个问题,光看是没有用的,需要实践.看别人说的 ...

  8. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  9. [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?

    你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...

随机推荐

  1. 打jar包

    1.在文件夹中新建文件manifest.mf 2.在dos窗口中jar cvfm 名字.jar  manifest.mf 所有的编译的类class,中间有空格 3.在dos窗口java -jar 名字 ...

  2. 南阳理工大学oj 题目15 括号匹配(二)

    括号匹配(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:6   描述 给你一个字符串,里面只包含"(",")","[&qu ...

  3. opencv的基本数据类型CvPoint,CvSize,CvRect,CvScalar

    转自http://blog.csdn.net/gdut2015go/article/details/46301821 opencv的基本数据类型CvPoint,CvSize,CvRect,CvScal ...

  4. POJ 2912 - Rochambeau - [暴力枚举+带权并查集]

    题目链接:http://poj.org/problem?id=2912 Time Limit: 5000MS Memory Limit: 65536K Description N children a ...

  5. POJ 2528 - Mayor's posters - [离散化+区间修改线段树]

    题目链接:http://poj.org/problem?id=2528 Time Limit: 1000MS Memory Limit: 65536K Description The citizens ...

  6. ORACLE中Drop table cascade constraints之后果.

    当你要drop一个table时,如果删除table的动作会造成trigger或constraint产生矛盾,系统会出现错误警告的讯息而不会允许执行..一个极简单的例子,例如你有一个员工基本资料表,上面 ...

  7. msc文件

    MSC微软管理控制台(Microsoft Management Control)文件.可以点击开始/运行,然后输入下列文件名就可以打开相应的控制窗口. 除第三个文件外,其他均在C:\WINDOWS\s ...

  8. http://www.cnblogs.com/linxiyue/p/8244724.html

    http://www.cnblogs.com/linxiyue/p/8244724.html

  9. WordCount优化

    Github 地址:chaosrings/wcPro 1.PSP2.1表格 psp 2.1 psp阶段 预估耗时(分钟) 实际耗时(分钟) Planning 计划 10 10 Estimate 估计这 ...

  10. Windows server 2016 安装及ORACLE 12C 安装

    首先创建虚拟机,选择windows server 2016 启动虚拟机,进入安装界面,语言默认中文,选择下一步 选择标准安装(桌面) 选择接受条款 选择自定义安装 进行分区,如下图所示 进行安装 设定 ...