使用mp4v2将aac音频h264视频数据封装成mp4开发心得

mpv2 mp4录制 MP4录制 MP4录制程序是根据mpeg4ip中mpeg4ip-1.5.0.1\server\mp4live\file_mp4_recorder.cpp文件改的。程序支持h264+aac(raw 流)的写入方式,用到了动态库mp4v2-2.0.0,不要用mpeg4ip中那个较老的版本,因为在录制大文件时会有效率问题,下面是一些mp4v2接口的简介。   MP4FileHandle MP4Cr 阅读详情

这阵子在捣鼓一个将游戏视频打包成本地可播放文件的模块。开始使用avi作为容器,弄了半天无奈avi对aac的支持实在有限,在播放时音视频时无法完美同步。

关于这点avi文档中有提到:

For AAC, one RAW AAC frame usually spans over 1024 samples. However, depending on
the source container (e.g. ADTS), it is theoretically possible that you are not able to extract
packets of equal duration from your source le. In this case, it is highly recommended not
to mux the AAC stream into AVI, but report a fatal error instead.

因此建议大家不要用avi打包aac,如果实在需要avi格式,可以换成mp3。


言归正传,下面重点说说mp4打包时遇到的几个问题,希望对后来开发这方面的朋友能有帮助,少走弯路。

首先需要下载编译开源的mp4v2库。这里一般没什么问题,值得一提的是,mp4v2静态库会导出函数符号。如果你想让程序瘦身,可以这么做在windows的工程属性中去掉MP4V2_EXPORTS预定义,添加MP4V2_USE_STATIC_LIB,这样最终的程序可以小100多KB。

mp4v2在vc2008下编译release版会在link时出现link内部错误(我遇到了,不知道其他人是否也遇到),需要在工程中去掉link时优化,再编译即可。


使用mp4v2打包音视频的具体步骤网上已经有很多例子,不再此啰嗦了,就说说需要注意的几点吧。

1、音频aac不需要包含adts头,即在设置faac选项时:

struConfig.outputFormat = 0; /* Bitstream output format (0 = Raw; 1 = ADTS) */

如果你包含了这个头,我测试下来迅雷播放器可以支持,但是百度影音、暴风影音放出来没声音。(ps,我整个开发过程下来迅雷播放器支持度最好,百度和暴风影音在格式设置错误情况下会出现崩溃和无声音现象,绝非广告)

2、MP4AddAudioTrack时,注意第三个参数sampleDuration要设置正确。如果每次添加的音频数据样本数相同,可以在这里先设置好。mp4v2建议把刻度设置为采样率,这样第三个参数就是每次送入数据块的样本数。这个数据可以在编码aac时得到,faacEncOpen返回的input样本数如果是2048,那么双通道实际就是1024。

3、设置完这些参数后,本以为万事大吉,但是播放器放出来还是没有声音。那就需要用MP4SetTrackESConfiguration设置音频解码信息。音频解码信息怎么来,可以从faac里faacEncGetDecoderSpecificInfo得到,下面是我的代码:

unsigned int CAACCodec::GetDecoderSpecificInfo(unsigned char * & apInfo)
{
    if ( m_hCodec == NULL )
    {
        return 0;
    }

    unsigned long uLen = 0;
    faacEncGetDecoderSpecificInfo(m_hCodec, &apInfo, &uLen);
    return uLen;
}

将返回的信息,再用MP4SetTrackESConfiguration设置到音频track里去就ok了。

这里有个问题还要注意下,解码信息这块内存,是faac用malloc方式分配出来的,所以你不要忘记free它,否则会造成内存泄露(虽然很小,才2字节)


好了,以上就是我的一些心得,希望对你有帮助。打字不容易,转载请注明出处:)


使用mp4v2将H264和AAC封装mp4 一、下载源码 国内源:https://launchpad.net/ubuntu/+source/mp4v2 国外源:https://code.google.com/p/mp4v2/ 下载合适版本的mp2v2源码,我下载的是mp4v2_2.0.0_dfsg0.orig.tar.bz2 二、编译 1、linux编译 tar jxf mp4v2_2.0.0_dfsg0.orig.tar.bz2 cd mp4v2-2.0.0 ./configure --disable-debug make 阅读详情

相关推荐

如何使用mp4v2将H264+AAC裸流录制成mp4文件,并保持音视频同步【源码】【mp4】【录像】

前言:    mp4文件目前已经成为了流媒体音视频行业的通用标准文件格式,它是基于mov格式基础上演变来的,特别适合多平台播放,录制一次,多个平台都可使用。但是,由于mp4格式相对比较复杂,直到mp4v2这个开源工程的出现,解决了这个问题。    通常,我们在使用mp4文件时,会遇到两个问题:如何从已有的mp4文件中抽取音视频数据帧;如何将音视频数据帧录制成mp4文件,并保持音视频同步。    上...

浩一的博客 7415

使用mp4v2将h264和aac封装成mp4

我们通过编码得到的h264和aac数据通常需要封装成mp4文件,可以使用mp4v2实现这样的封装,封装的时候需要注意一些细节,比如读取sps、pps,判断idr、音频固定时间戳等。

codeofcc的博客 1万+

如何使用mp4v2解析mp4文件,抽取音视频数据帧【源码】【mp4】【NVR】

前言:    mp4文件目前已经成为了流媒体音视频行业的通用标准文件格式,它是基于mov格式基础上演变来的,特别适合多平台播放,录制一次,多个平台都可使用。但是,由于mp4格式相对比较复杂,直到mp4v2这个开源工程的出现,解决了这个问题。    通常,我们在使用mp4文件时,会遇到两个问题:如何从已有的mp4文件中抽取音视频数据帧;如何将音视频数据帧录制成mp4文件,并保持音视频同步。    首...

浩一的博客 8084

使用MP4V2开源库将AAC打包到MP4文件中

这几天一直在搞Darwin Streaming Server的点播功能,对MP4文件的点播是没有问题的,但是对音频(比如aac音频文件)该如何点播呢? 想到了一种转发思路:就是将aac文件打包到MP4文件中,然后在进行MP4文件的点播; 直接上代码: int main(int argc, char *argv[]) { FILE *fpAudio = NULL; int len;

liyang_qin的专栏 2108

7.使用directshow采集视音频并进行H264和ACC实时编码再实时用MP4V2封装成MP4

使用Dshow进行视音频采集,采集的过程中将音频和视频都放进同一个队列中去,然后开启一个线程,从队列中一个一个取出来进行实时编码,取到视频就用X264进行编码,取到音频就用faac编码,编码的数据不再落地,而是使用MP4V2写到MP4中,编码和封装的过程中会涉及到视音频同步的问题。

阿门的专栏 4350

MP4v2:增强型MP4封装技术详解

本文还有配套的精品资源,点击获取 简介:MP4v2是MP4格式的增强版本,特别优化用于视频、音频和字幕等多媒体内容的存储和传输。它支持更丰富的编解码器,如h264和AAC,以实现高效压缩和优质视听体验。MP4v2还优化了网络流媒体和多媒体编辑的应用场景,提供了对元数据的强大支持和更好的文件管理灵活性。在Linux系统中,FFmpeg等开源工具可用于处理MP4v2文件,实现高...

weixin_33557333的博客 1656

Mp4v2实现h264+aac打包成Mp4视频文件

使用mp4v2实现录制mp4视频,需要准备如下信息: 1、获取mp4v2源码并编译成库文件,对于mp4v2的编译可以看前面的文章android 编译mp4v2 2.0.0生成动态库 ; 2、获取h264数据中的sps和pps数据,如果不会的话可以查看前面的文章  点击打开链接; 3、获取音频解码信息,在调用MP4SetTrackESConfiguration使用,具体的获取方式一种通过f

jwzhangjie的专栏 1万+

如何使用mp4v2将H264+AAC裸流录制成mp4文件,并保持音视频同步。

这个示例工程可以完整的展示:如何使用libmp4v2将原始的音视频数据帧存储为mp4文件。可以帮助流媒体开发人员快速存储mp4文件。

<整理总结>H264/265码流数据包格式分析(带mp4v2封装H264/265为MP4的源码示例)

mp4v2 封装H264,AAC(单帧封装)

n_i_n的博客 5885

MP4v2针对MP4的封装

针对MP4的封装,使用的是h264和aac,可以直接使用

代付系统/代付系统源码/支付宝代付系统/API代付系统

简介: 其他站买的,没有做测试,源码是JAVA的,附带了安装文档,需要的拿无售后 源码下载地址https://www.skpan.cn/2QnIARSZDxG 代付系统/代付系统源码/支付宝代付系统/API代付系统 系统流程: 后台开通代理——开通商户——商户做代付(后台手工提交和 api 提交两种方式) 1、纯代付系统 2、支持个人支付宝全自动 3、支持单笔/批量/API接口方式代付 4、支持白名单、谷歌验证 5、收付款模式采用自动回调/自动转账 一、运营平台 商户管.

刀客源码网 5579

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

http://www.cnblogs.com/chutianyao/archive/2012/04/13/2446140.html   录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是: (1)接收并解析RTP包,分离出H264和AAC数据流; (2)将H264视频和AAC音频以某种格式封装,最后存成文件,供用户查

依然风 | ios 1万+

群晖Web Station实战:从零搭建个人静态导航站

本文详细介绍了如何利用群晖NAS自带的Web Station套件,从零开始搭建个人静态导航站。通过安装Web Station、上传静态网站源码、配置网页服务与网络门户等步骤,无需代码基础即可实现内网访问。文章还分享了文件权限设置、个性化定制及常见问题排查等实用技巧,帮助用户高效管理个人常用网址,充分挖掘NAS的服务器潜能。

tea88的博客 1330

linux下利用mp4v2库将h264和aac文件封装成MP4

说在前面的是,我用的mp4v2版本是mp4v2-2.2.0,与之前版本相比接口函数稍有不同! 1. 首先调用MP4CreateEx()函数,创建输出的MP4文件 MP4FileHandle file = MP4CreateEx("test.mp4", 0, 1, 1, "isom", 0x00000200, p, 4); 2. 接下来设置timescale MP4SetTimeS

jasonwang的专栏 7858

STM32F103C8T6全桥逆变电路PWM波生成(基于HAL库)

全桥逆变电路需要两组开关管相互协同工作,故需要两路PWM控制信号,为了防止电源短路,需要保证同一桥臂的上下两个开关管不会同时导通,故两路PWM在相位上需要相差180°;为了保证高频变压器不会磁饱和,使正负半周PWM占空比相同。但是传统的互补输出达不到调节占空比调节输出电压的效果。......

weixin_45042735的博客 6024

基于STM32F103C8T6的红外循迹避障小车

编程思路:控制核心板IO口的电平(即电机驱动模块的AIN1,AIN2,BIN1,BIN2)从而控制AO1、AO2、BO1、BO2的电平高低,进而控制电机使其正转、反转、不转。由于单纯地拉高拉低电平只能让电机在转与不转的状态切换,故决定利用TIM4的两个通道分别产生两路PWM信号来控制电机速度,四个电机两个一组,同一侧的两个连接在同一个PWM上。(#include "dianji.h"文件中同时写了对循迹模块引脚的初始化)

weixin_48743503的博客 1万+

音视频封装demo:使用libmp4v2将h264视频数据和aac语音数据封装(mux)成mp4文件

本demo是使用的mp4v2来将h264、aac封装成mp4文件的,目前demo提供的.a静态库文件是在x86_64架构的Ubuntu16.04编译得到的,如果想在其他环境下测试demo,可以自行编译mp4v2并替换相应的库文件(libmp4v2.a)。

weixin_44498318的博客 1922

控制科学与工程(自动化)保研经验【4】——浙大篇

控制科学与工程(自动化)保研经验【4】——浙大篇

Control Everything 1万+

FFmpeg将H264和AAC合成为MP4

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 之前的内容提到使用Mp4V2合成Mp4文件失败,只能换方案使用FFmpeg去尝试了。 一、下载编译FFmpeg 在网上下载到了FFmpeg源码库,一开始使用的是 版本,遇到了几个问题,不知道怎么解决,就下载使用其他的版本,还是不行,最后使用 3.3.6版本编译通过,不过只能用静态库,编译成动态库的时候还是...

qq_29536949的博客 5010

Python 爬虫实战:模拟登录网易云音乐(加密接口逆向与自动化登录实现)

网易云音乐作为国内主流的音乐流媒体平台,其丰富的音乐资源和个性化推荐算法吸引了大量用户。对于开发者而言,模拟登录网易云音乐并实现自动化操作,可以用于数据分析、歌单同步、歌词抓取等场景。然而,网易云音乐采用了多重加密机制和反爬策略,直接模拟登录存在较大挑战。

yansideyucsdn的博客 2590

国科大《人工智能原理与算法》2021年期末试题+2024经验(2025指南)

2021年期末试题+24年复习指南

MatsumotoChrikk 2927
上一篇: 使用汇编优化BCB6的itoa
yaveymao
博客等级 码龄23年 11粉丝 2原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值