mpeg4ip是一个开源的多媒体项目,它提供一个端对端的系统来实现音视频流的传输,
支持包括 MPEG4/H.261/MPEG2/H.263 MP3/AAC/AMR等不同编码格式。更多的信息可以再http://www.mpeg4ip.net/ 了解。http://dl.sourceforge.net/mpeg4ip/mpeg4ip-1.6.1.tar.gz
可以获取到其最新的代码。

在Broncho 平台中提取了其3GP文件格式相关的部分,用来实现相机摄像中3gp文件格式的生成。
编译时去除不需要的依赖以及库,只保留需要的mp4v2等相关库的编译。

mp4.h中定义了文件格式相关的主要的接口, 而其3gp文件合成相关主要使用了以下接口。

MP4FileHandle MP4CreateEx(
const char *fileName,
u_int32_t verbosity DEFAULT(0),
u_int32_t flags DEFAULT(0),
int add_ftyp DEFAULT(1),
int add_iods DEFAULT(1),
char* majorBrand DEFAULT(0),
u_int32_t minorVersion DEFAULT(0),
char** supportedBrands DEFAULT(0),
u_int32_t supportedBrandsCount DEFAULT(0));

用来创建一个空的mp4/3gp文件,其中大多数参数可以直接用其默认的,有时需指定supportedBrands,来描述
3gp文件的一些相关信息。

bool MP4SetTimeScale(MP4FileHandle hFile, u_int32_t value);
用来设置生成文件的time scale 既1秒的tick 数,在计算同步时有较大作用。

MP4TrackId MP4AddH263VideoTrack(
MP4FileHandle hFile,
u_int32_t timeScale,
MP4Duration sampleDuration,
u_int16_t width,
u_int16_t height,
u_int8_t h263Level,
u_int8_t h263Profile,
u_int32_t avgBitrate,
u_int32_t maxBitrate);
为文件增加一个H263的track, 对于maxBitrate 等不关心的参数可以直接置0

MP4TrackId MP4AddAmrAudioTrack(
MP4FileHandle hFile,
u_int32_t timeScale,
u_int16_t modeSet,
u_int8_t modeChangePeriod,
u_int8_t framesPerSample,
bool isAmrWB);
为文件增加一个amr 的track.

bool MP4WriteSample(
MP4FileHandle hFile,
MP4TrackId trackId,
const u_int8_t* pBytes,
u_int32_t numBytes,
MP4Duration duration DEFAULT(MP4_INVALID_DURATION),
MP4Duration renderingOffset DEFAULT(0),
bool isSyncSample DEFAULT(true));
写入一帧 video 或者 audio 数据。

下面是一个合成3gp文件的基本过成。

/*Create */
mp4 = MP4CreateEx(filename, 9, 0, 1, 1, 0, 0, 0, 0);
MP4SetTimeScale(mp4, 90000);

/*Set video*/
video = MP4AddH263VideoTrack(mp4, 90000, 0, 176, 144, 0, 0, 0, 0);

/*Set audio*/
audio = MP4AddAmrAudioTrack(mp4, 8000, 0, 0, 1, 0);

/*Write file*/
do
{
...
if(...)
{
/*enc audio data to amr*/
...
MP4WriteSample(mp4,audio,len,buf,160,1);

}
else
{
/*enc vidoe data to h263*/
...
MP4WriteSample(mp4,video , len buf, 90000/fps, 1);
}
....
}while(1)

MP4Close(mp4);

使用MPEG4IP_mp4v2实现3GP文件合成相关推荐

  1. MP4/MOV/3GP文件的“ftyp”(转)

    MP4文件.MOV文件和3GP文件,这三种媒体文件格式采用了相同的封装格式,其基本的组成单元是box."ftyp"就是整个文件的第一个box,通过判断该box来确定文件的类型.该b ...

  2. MP4/MOV/3GP文件的“ftyp”

    MP4文件.MOV文件和3GP文件,这三种媒体文件格式采用了相同的封装格式,其基本的组成单元是box."ftyp"就是整个文件的第一个box,通过判断该box来确定文件的类型.该b ...

  3. 通俗易懂【Springboot】 单文件下载和批量下载(多个文件合成一个压缩包下载)

    文章目录 一.单文件下载 1.简单理解文件下载 2.单文件下载的具体代码实现 3.测试 4.单文件下载整体代码 二.多文件批量下载(多个文件合成一个压缩包下载) 1.多文件下载的实现方式,这里使用了Z ...

  4. 怎样将几个pdf文件合成一个?

    如果你是一名办公领域的从业者,那么PDF应该是你经常需要使用到的文件.受一些内容的限制,有时候我们需要把一些内容分别做成几个的PDF来使用,同时也会收到很多pdf文件,但是随着PDF文件的越来越多,使 ...

  5. 如何将多个bin文件合成一个bin文件?(一)

    一.使用到的软件 WinHex 二.所用文件 Bootload.bin Application.bin 三.生成目标文件 Target.bin 四.步骤 1)新建目标文件target.bin,此时文件 ...

  6. 关于.m4s音视频文件合成.mp4文件的方法

    关于.m4s音视频文件合成.mp4文件的方法 这几天在家闲着没事想着玩一下快手,于是就去做了一次视频搬运工,从B站上找了一些比较不错的优秀短片使用工具下载下来然后上传到个人快手号上,谁知道从B站上下载 ...

  7. 怎么将ts文件合成一个文件

    TS文件定义 ts是日本高清摄像机拍摄下进行的封装格式,全称为MPEG2-TS.ts即"Transport Stream"的缩写.MPEG2-TS格式的特点就是要求从视频流的任一片 ...

  8. 如何用ffmpeg对3GP文件进行GOP转码设置

    最近项目中在播放3gp文件时,有时客户端解码识别,后面对3gp文件的GOP值进行修改了, 然后可以正常播放. 下面转码命令实例贴一下,供大家参考: ffmpeg -i 5e02eec746384b2e ...

  9. 视频直播点播平台EasyDSS如何通过接口实现文件合成?

    EasyDSS支持一站式的上传.转码.直播.回放.嵌入.分享功能,具有多屏播放.自由组合.接口丰富等特点.平台可以为用户提供专业.稳定的直播推流.转码.分发和播放服务,全面满足超低延迟.超高画质.超大 ...

最新文章

  1. 比特币挖矿——区块链技术
  2. 医疗信息安全再添新保障
  3. python学习——把计算GC含量的代码封装成函数
  4. 【Spring 5】响应式Web框架实战(上)
  5. 发布:NetBeans IDE 8.1 Beta
  6. 最短路径问题总结,时间复杂度,空间复杂度对比(JAVA)
  7. 清爽娱乐网系统源码 v5.69
  8. 【孤偏盖全唐】Linux中find命令完整用法
  9. 景观生态学概述[转载]
  10. 《机器学习Python实践》第5章——数据导入
  11. CMS(内容管理系统)
  12. xlsxwriter写入Excel
  13. 三阶魔方层先法 复原公式
  14. Python之通过API获取数据库数据及图片
  15. 双线双IP服务器架设传奇SF图文教程
  16. 前端大作业之淘宝页面设计
  17. 编程入门先要学什么?打怪升级走起来!
  18. DES方式加解密的简单介绍
  19. 核芯基站_更新CLE版本
  20. 年龄和收入对数的线性回归_中国社会的代际收入流动性趋势:2000~2009(一)

热门文章

  1. 关于Vue中动态绑定class和style的问题
  2. python小知识|if x、if not x、while True的用法,还在困扰着你吗?(补加:关于None的小知识)
  3. Windows 如何打开和编辑.lnk文件
  4. 8.25 @烤仔建工 | 神秘嘉宾现身,邀请你来烤仔花园喝点咖啡
  5. NESSUS使用笔记
  6. PCB设计容易出错的地方都有哪些?
  7. python-Pyserial实现串口通信
  8. 幼儿园案例经验迁移_幼儿园案例分析《三个强盗》5篇
  9. JavaScript 数组字符串方法
  10. mysql fulltext 没有结果_mysql FullText全文索引的问题