libmp4v2不完全指南封装g711a的坑
创始人
2024-03-12 06:44:00
0

libmp4v2不完全指南封装g711a的坑

1 添加audio track

int mp4v2_mp4_writer_init_g711(uint32_t sampleRate, uint32_t timeScale)
{if(g_mp4v2.mp4handle == MP4_INVALID_FILE_HANDLE || RD_STREAM_INIT_STATUS != g_mp4v2.astatus){return -1;}g_mp4v2.atrack_id = MP4AddALawAudioTrack(g_mp4v2.mp4handle, u32SampleRate);//g_mp4v2.atrack_id = MP4AddAudioTrack(g_mp4v2.mp4handle, u32SampleRate, 800, MP4_ALAW_AUDIO_TYPE);if(0 == g_mp4v2.atrack_id){printf("create audio track success,g_mp4v2.atrack_num:%d\n", g_mp4v2.atrack_id);return -1;}else{printf("create audio track success,g_mp4v2.atrack_num:%d\n", g_mp4v2.atrack_id);}MP4SetAudioProfileLevel(g_mp4v2.mp4handle, 0x2);return 0;
}

看似平平无奇的一段代码对吧,实际上有两个大坑浪费了我半天的时间

一开始搜索add audio track,看到这个接口

MP4TrackId MP4AddAudioTrack(MP4FileHandle hFile,uint32_t      timeScale,MP4Duration   sampleDuration,uint8_t       audioType DEFAULT(MP4_MPEG4_AUDIO_TYPE) );

俺寻思着是不是只要audioType指定MP4_ALAW_AUDIO_TYPE就万事大吉了?没想到视频录出来看音频信息,是AAC编码的,原来这个接口的作用是把audioType形式的音频流按AAC编码保存下来,这显然是不符合需求的

如果想保存g711a的音频,并且在pc上显示的音频编码也是g711a的话,就要用这个接口

MP4TrackId MP4AddALawAudioTrack(MP4FileHandle hFile,uint32_t timeScale);

明显可以看出,这个接口参数没有sampleDuration,于是这就是我要说的第二个大坑

接口实现在

mp4v2-2.0.0/src/mp4file.cpp:1886:MP4TrackId MP4File::AddALawAudioTrack(    uint32_t timeScale)MP4TrackId MP4File::AddALawAudioTrack(    uint32_t timeScale)
{memcpy(m_cAudioType, "Alaw", 5);uint32_t fixedSampleDuration = (timeScale * 20)/1000; // 20mSec/SampleMP4TrackId trackId = AddTrack(MP4_AUDIO_TRACK_TYPE, timeScale);...return trackId;
}

发现什么没有?没错!这个接口写死了duration为一秒50帧,如果你的音频流和这里不一样,那么就会出现音频缺失的问题,比如我的音频是25帧,录出来的文件就是前半段有声音而后半段没有声音的

想解决这个问题倒也简单,改源码就行,需要按你编码器实际情况修改

uint32_t fixedSampleDuration = (timeScale * 40)/1000; // 40mSec/Sample

改完之后重新交叉编译

2 封装

音频的封装就平平无奇了

MP4WriteSample(pgpac->mp4handle, pgpac->atrack_id, pdata, data_size, MP4_INVALID_DURATION, 0, 1);

唯一需要注意的是编码器输出的音频流是不是也带了什么奇奇怪怪的头,如果有,记得剥掉,MP4WriteSample写的是裸流

 

相关内容

热门资讯

强生爽身粉致癌案判赔女子约11... 据央视财经报道,当地时间12月22日,美国马里兰州陪审团作出一项裁定:强生公司需向一名因使用其婴儿爽...
牛市早报|央行:发挥增量政策和... 【市场数据】 截至12月24日收盘,上证综指涨0.53%,报3940.95点;科创50指数涨0.9%...
宁夏出台未成年人保护新规 学校... 本报讯(记者马学礼 李静楠)近日,宁夏回族自治区人大常委会表决通过《宁夏回族自治区实施〈中华人民共和...
央行货币政策委员会:加强货币政... 中国人民银行货币政策委员会2025年第四季度例会于12月18日召开。会议要求,要继续实施适度宽松的货...
秦皇岛为餐厨废弃物管理“立规矩... 12月23日,秦皇岛市新闻办举办《秦皇岛市餐厨废弃物管理条例》颁布实施新闻发布会,相关负责人介绍了有...
案无大小用心辩|蓝天彬律师《正... 近年来,大型超市越来越多,人工收银和自助收银越来越结合,有些超市甚至全部启用自助结账。 邓晓光(化...
【早知道】北京调整住房限购政策... 人民财讯12月25日电,【摘要】央行:综合运用多种工具,加强货币政策调控。八部门联合发布《关于金融支...
浙江棒杰控股集团股份有限公司关... 本公司及董事会全体成员保证信息披露的内容真实、准确、完整,没有虚假记载、误导性陈述或者重大遗漏。 重...
公安机关依法征集两名台湾居民违... 据新华社北京12月24日电(记者 李寒芳 尚昊)国务院台办发言人彭庆恩24日在例行新闻发布会上表示,...