mp4v2 基本知识

摘要:
mp4v2和mp4的一些基本知识。因为项目需要做mp4文件合成(264+aac)和mp4文件解析;MP4文件本身是一个容器。对于视频,它只是根据MP4的规则存储不同的内容;如果您编写自己的代码来实现它,您可能需要完全理解mp4的规则;做好mp4文件的解析工作;在测试过程中,考虑到生成的mp4文件的易用性和兼容性,开源项目mp4v2被用作mp4文件复用器和解复用器工具;一
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.0
20161024091151_180.MP4  :
Track   Type    Info
1       audio   MPEG-4 AAC LC, 180.096 secs, 16 kbps, 8000 Hz
2       video   H264 Baseline@4.2, 180.000 secs, 8381 kbps, 1920x1080 @ 30.000000 fps
./mp4track 20161024091151_180.MP4  --list
track[0] id=1
  type           = audio
  enabled        = true
  inMovie        = false
  inPreview      = false
  layer          = 0
  alternateGroup = 0
  volume         = 1.0000
  width          = 0.00000000
  height         = 0.00000000
  language       = Undetermined
  handlerName    = 
  userDataName   = <absent>
track[1] id=2
  type           = video
  enabled        = true
  inMovie        = false
  inPreview      = false
  layer          = 0
  alternateGroup = 0
  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 2
./mp4trackdump version 2.0.0
mp4file 20161024091151_180.MP4, track 2, samples 5400, timescale 90000
sampleId      1, size 203970 duration    3000 time     0 00:00:00.000 S
sampleId      2, size 47935 duration     3000 time     3000 00:00:00.033  
sampleId      3, size 62824 duration     3000 time     6000 00:00:00.066  
sampleId      4, size 70342 duration     3000 time     9000 00:00:00.100  
sampleId      5, size 20730 duration     3000 time    12000 00:00:00.133  
sampleId      6, size 13241 duration     3000 time    15000 00:00:00.166  
sampleId      7, size  6947 duration     3000 time    18000 00:00:00.200  

这儿有一些关键信息:

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

比如解析track 1 音频通道

./mp4trackdump 20161024091151_180.MP4  -t 1
./mp4trackdump version 2.0.0
mp4file 20161024091151_180.MP4, track 1, samples 1403, timescale 8000
sampleId      1, size   249 duration     1024 time        0 00:00:00.000 S
sampleId      2, size   286 duration     1024 time     1024 00:00:00.128 S
sampleId      3, size   326 duration     1024 time     2048 00:00:00.256 S
sampleId      4, size   320 duration     1024 time     3072 00:00:00.384 S
sampleId      5, size   317 duration     1024 time     4096 00:00:00.512 S
sampleId      6, size   316 duration     1024 time     5120 00:00:00.640 S
sampleId      7, size   306 duration     1024 time     6144 00:00:00.768 S
sampleId      8, size   301 duration     1024 time     7168 00:00:00.896 S
sampleId      9, size   281 duration     1024 time     8192 00:00:01.024 S
sampleId     10, size   288 duration     1024 time     9216 00:00:01.152 S

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

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

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

免责声明:文章转载自《mp4v2 基本知识》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SpringBoot操作ES进行各种高级查询Oracle-批量修改语句及相关知识点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转载]为什么有些MP4文件在Chrome浏览器上播放不了?

http://blog.sina.com.cn/s/blog_6bb7ebcc0101c2ja.html Chrome浏览器支持HTML5,它支持原生播放部分的MP4格式(不用通过Flash等插件)。 为什么是部分MP4呢?MP4有非常复杂的含义(见http://en.wikipedia.org/wiki/Mp4),普通人对MP4的理解是后缀为.mp4的...

IIS7注册本机模块

问题描述:打开mp4文件要映射给mod_h264_streaming.dll(http://h264.code-shop.com/trac/wiki/Mod-H264-Streaming-Internet-Information-Services-IIS7-Version2)处理,安装包只能在win2003下自动安装并自动配置成功,在win7及以上系统需要...

【video】使用FFmpeg将avi / mp4文件转换成m3u8/ts文件(用于近时播放)

准备工作 下载 :ffmpeg-N-102534-gec20b81302-win64-lgpl-shared.zip,并解压,FFmpeg下载地址   配置环境变量:在path中配置bin目录 (例如:F:xxxxxxffmpeg-20180227-fa0c9d6-win64-staticin)检查是否配置成功:ffmpeg -version 开始转...

AAC的各种规格

Hi,又来写点儿小记录心得吧,这次是在准备AAC音频解码的规格中发现和总结出的一些问题,大概的情况在这里简要做一小记,为我们最后确立规格提供参考,当然我对AAC规格的了解还很稚嫩,有些表述不太确切的地方,还请大家指正: 一、规格(profile)问题: wiki上说到,AAC共有9种规格,以适应不同的场合的需要: l         MPEG-2 AAC...

shell脚本实现 视频格式转换 ffmpeg 实现视频转换

#!/bin/bash original=$1 echo $original #check whether file is exist #if $original de chang du wei 0 huo bu $original bu shi chang gui wenjian if [ -z $original ] || [ ! -f $...

电脑用命令给Android手机录屏方法 记录

目的:有时候有些崩溃来得比较突然,又不记得怎么操作的,这时候如果可以翻看录像就完美了.(重点是:手头的平板没有录屏功能) 1. adb adb shell screenrecord --size 1280x800 "/sdcard/screenrecord_log.mp4" adb pull /sdcard/screenrecord_log.mp4 D:/...