mp4v2 使用系列(一)
来源:互联网 发布:代购淘宝描述模板 编辑:程序博客网 时间:2024/05/21 06:32
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.020161024091151_180.MP4 :Track Type Info1 audio MPEG-4 AAC LC, 180.096 secs, 16 kbps, 8000 Hz2 video H264 Baseline@4.2, 180.000 secs, 8381 kbps, 1920x1080 @ 30.000000 fps
./mp4track 20161024091151_180.MP4 --listtrack[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.0mp4file 20161024091151_180.MP4, track 2, samples 5400, timescale 90000sampleId 1, size 203970 duration 3000 time 0 00:00:00.000 SsampleId 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.0mp4file 20161024091151_180.MP4, track 1, samples 1403, timescale 8000sampleId 1, size 249 duration 1024 time 0 00:00:00.000 SsampleId 2, size 286 duration 1024 time 1024 00:00:00.128 SsampleId 3, size 326 duration 1024 time 2048 00:00:00.256 SsampleId 4, size 320 duration 1024 time 3072 00:00:00.384 SsampleId 5, size 317 duration 1024 time 4096 00:00:00.512 SsampleId 6, size 316 duration 1024 time 5120 00:00:00.640 SsampleId 7, size 306 duration 1024 time 6144 00:00:00.768 SsampleId 8, size 301 duration 1024 time 7168 00:00:00.896 SsampleId 9, size 281 duration 1024 time 8192 00:00:01.024 SsampleId 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 使用系列(一)
- MP4v2 基本使用(二)
- MP4V2--如何使用 MP4SetTrackESConfiguration
- MP4V2--如何使用 MP4SetTrackESConfiguration .
- MP4V2--如何使用 MP4SetTrackESConfiguration
- mp4v2
- MP4V2
- MP4V2
- Mp4V2库编译及使用
- 使用mp4v2产生mp4文件
- 使用mp4v2封装h264裸流
- 使用MP4V2分析MP4文件
- git使用系列(一)
- 编译生成适合于arm平台使用的mp4v2(学习了交叉编译呀)
- 使用 MP4v2 分离 MP4 中的 H264 码流
- iOS 使用mp4v2合成的视频注意事项
- android mp4v2的编译和使用
- MP4V2 使用——编译、录制
- Linux升级安装GCC G++ 6.2
- Xcode8新增Debug方法
- 欢迎使用CSDN-markdown编辑器
- 在IntelliJ IDEA中运用Maven 开发 Spark应用
- 解决Activity被系统回收问题
- mp4v2 使用系列(一)
- python——文本简单可逆加密
- 王朝第十二周 立方和的解题
- UVa 1641 ASCII Area
- 如何使用jarsigner签名apk
- 批量建立软连接
- Java几个细节和误区
- OpenGL ES学习之基础工作
- 自定义seekBar样式