mp4v2 基本知识
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 基本知识的更多相关文章
- 嵌入式 使用mp4v2将H264+AAC合成mp4文件
录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是: (1)接收并解析RTP包,分离出H264和AAC数据流: (2)将H26 ...
- 使用mp4v2将H264+AAC合成mp4文件
录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是: (1)接收并解析RTP包,分离出H264和AAC数据流: (2)将H26 ...
- MP4v2 基本使用(二)
MP4转H264文件 本文最目标是基本的MP4v2接口的使用,并且实现一个简单的提取mp4文件里面264流的功能: 1.264文件基本知识 下看看H264文件的基本常识 NAL 头 0x00 0x00 ...
- 00.mp4v2工具的用法
1.交叉编译mp4v2库# ./configure --prefix=/usr/local/mp4v2-2.0.0 --host=arm-hisiv300-linux CC=arm-hisiv300 ...
- 你必须知道的EF知识和经验
注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- 学点HTTP知识
不学无术 又一次感觉到不学无术,被人一问Http知识尽然一点也没答上来,丢人丢到家了啊.平时也看许多的技术文章,为什么到了关键时刻就答不上来呢? 确实发现一个问题,光看是没有用的,需要实践.看别人说的 ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?
你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...
随机推荐
- eclipse配置Js环境spket
网上下载spket-1.6.16.jar破解版(目前最新版本) 1.如果你的JDK在1.6以上,可以直接双击spket-1.6.16.jar运行安装. 其它,使用命令行方式.(注意:自己切换命令行到s ...
- python----并发之协程
<python并发之协程>一: 单线程下实现并发,即只在一个主线程,并且cpu只有一个的情况下实现并发.(并发的本质:切换+保存状态) cpu正在运行一个任务,会在两种情况下切去执行其他的 ...
- php Only variables can be passed by reference
最近做项目,发现了一个报错 Only variables can be passed by reference, 意思是"只有变量能通过'引用'" 就是在代码中 使用了一个方法 ...
- wxWidgets与其他工具库的比较(下)
2009-07-25 12:37:51 GTK+ ● GTK+的网站:www.gtk.org: ● GTK+原本是Gimp的一个工具库,是在LGPL协议下发布的Unix系统GU ...
- nginx 哈希表数据结构
1.哈希表ngx_hash_t的优势和特点 哈希表是一种典型的以空间换取时间的数据结构,在没有冲突的情况下,对任意元素的插入.索引.删除的时间复杂度都是O(1).这样优秀的时间复杂度是通过将元素的ke ...
- tcp3次握手,https加密,ca认证
参考: https://baijiahao.baidu.com/s?id=1570143475599137&wfr=spider&for=pc
- query:callback
function getName(callback) { setTimeout(function() { callback('Aaron') }, 1000) } //等待callback回调 get ...
- js-jquery-数组遍历
一.原生方法支持 1.普通for循环 for(j = 0; j < arr.length; j++) { } 说明:性能很高,但是仍可以优化. 2.优化版for循环[推荐] for(j = 0, ...
- office 2016 install(office2016组件自定义安装激活程序) v5.9.3中文绿色版
下载地址 http://www.ddooo.com/softdown/71741.htm#dltab office 2016 install是目前下载office2016和office2016组件最 ...
- 学JS必看-JavaScript数据结构深度剖析
回归简单 要理解JavaScript,你得首先放下对象和类的概念,回到数据和代码的本原.前面说过,编程世界只有数据和代码两种基本元素,而这两种元素又有着纠缠不清的关系.JavaScript就是把数据和 ...