Qt开发笔记之编码x264码流并封装mp4(二):windows平台x264添加mp4支持,gpac库的介绍与编译

若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/103418602
各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...(点击传送门)

Qt开发笔记之编码x264码流并封装mp4

Qt开发笔记之编码h264码流并封装mp4(一):x264介绍、windows平台x264库编译

Qt开发笔记之编码h264码流并封装mp4(二):windows平台x264添加mp4支持,gpac库的介绍与编译

Qt开发笔记之编码h264码流并封装mp4(三):Qt使用x264库对.yuv文件编码为.h264文件

Qt开发笔记之编码h264码流并封装mp4(四):mp4v2库的介绍和windows平台编译

Qt开发笔记之编码h264码流并封装mp4(五):ubuntu平台编译x264》

Qt开发笔记之编码h264码流并封装mp4(六):ubuntu平台编译mp4v2并封装mp4

 

前言

       上一篇章中编译出来的x264库对.mp4后缀文件不支持(理解为mp4格式),于是添加对mp4文件的支持。

 

windows下x264添加mp4支持

       x264库编译出来是不支持mp4的,如要支持mp4,那么需要添加gpac库。

 

步骤一:下载,放入编译文件夹并解压

       下载地址:https://github.com/gpac/gpac/

       CSDN地址:https://download.csdn.net/download/qq21497936/12010070

      

步骤二:在mysy中configure配置gpac

./configure

       (注意:发现之前的complie写错了,改了下文件夹命名,截图带了prefix,后发现没必要带,直接编进系统即可)

      

步骤三:编译mingw32-make.exe

      

       实际用到的是make编译的,查看makefile是引入了config.mak,修改修改下config.mak文件

      

或者重新配置

./configure --make=mingw32-make

用下面的,直接编译到环境中去(为了添加到x264,笔者尝试包含头文件和库以及库路径失败)

./configure --make=mingw32-make

修改后编译:

       漫长的等待,出现错误

步骤四:解决编译错误“ln -sf libgpac.dll.8.0.0 ../bin/gcc/libgpac.dll.8”,继续编译

       定位错误

       调试ok

       直接修改src下的Makefile如下图:

#	ln -sf $(notdir $@).$(VERSION_SONAME) $@.$(VERSION_MAJOR)
#	ln -sf $(notdir $@).$(VERSION_SONAME) $@
	ln -sf $@.$(VERSION_SONAME) $@.$(VERSION_MAJOR)
	ln -sf $@.$(VERSION_SONAME) $@

       继续编译,编译成功。

步骤五:直接修改configure文件即可

       此处回到《一》中的“步骤五:linux的常规编译步骤,右键configure配置”,修改”mp4=yes”,如下图,然后配置。

步骤六:编译x264库,mingw32-make

步骤七:找不到gpac头文件,路径已经包含

       检查了路径还是不行,那直接简单粗暴的拷贝吧

       修改源码

步骤八:解决”gf_isom_set_pixel_aspect_ratio少参数问题

       错误如下图:

5个参数,而头文件是6个参数(估计是gpac版本太高,先强制设为1):

改完后,如下图:

       继续编译。

步骤九:解决错误连接问题

简单粗暴将库也拷贝过来,还是不行。

步骤十:暂时无解,调整思路,切换版本至gpac 0.8.0,重新从步骤一至步骤此。

步骤十一:多次配置编译,再三确认是”mp4:yes”,仍不支持.mp4有问题但可转.mp4v2

       此处添加gpac库并定义MP4_OUTPUT 1都尝试了,还是行不通。

结论

       所以,本篇章的目标没有达到!!!

笔者不太明白.mp4与.mp4v2的关系,查到的资料也是mp4v2是可以将.h264编码成.mp4的库,但是后缀.mp4v2与工具mp4v2是什么关系,还也没弄清楚,但是可以确定的是mp4v2可以将h264的裸码流编码成.mp4文件格式。

 

原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/103418602

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用GPAC将SEI帧封装MP4文件的Sample Description Box(stsd)中,可以按照以下步骤进行: 1. 安装GPAC,并在代码中引入相关头文件和文件。 2. 打开MP4文件,创建一个Track,并设置Track的相关参数,包括Track ID、Track Type、Track Duration等。 3. 创建一个Sample Description Box(stsd),并将其添加到Track中。 4. 创建一个Sample Description Entry,用于描述该Track中的Sample格式,并将其添加到stsd中。 5. 设置Sample Description Entry的相关参数,包括Sample Format、Codec、宽高比等。 6. 创建一个Sample,并将其添加到Track中。 7. 将SEI帧数据添加到Sample中,并设置Sample的相关参数,包括Sample Size、Duration等。 8. 保存MP4文件并关闭。 下面是一个简单的示例代码,演示了如何使用GPAC将SEI帧封装MP4文件的Sample Description Box(stsd)中: ```c++ #include <gpac/isomedia.h> int main() { // 打开MP4文件 GF_ISOSampleEntry *pSampleEntry = NULL; GF_ISOMSample *pSample = NULL; GF_ISOFile *pFile = gf_isom_open("test.mp4", GF_ISOM_OPEN_WRITE); // 创建Track GF_ISOTrack *pTrack = gf_isom_new_track(pFile, GF_ISOM_MEDIA_TEXT, 1, 0); // 创建Sample Description Box(stsd) GF_ISOMSampleDescription *pSampleDesc = gf_isom_new_sample_description(GF_ISOM_MEDIA_TEXT, 1); // 创建Sample Description Entry pSampleEntry = gf_isom_text_sample_entry_new("avc1", 640, 480, 1, 1, "eng", NULL); gf_isom_add_sample_entry(pSampleDesc, pSampleEntry); // 将Sample Description Box(stsd)添加到Track中 gf_isom_set_sample_description(pTrack, pSampleDesc); // 创建Sample pSample = gf_isom_sample_new(NULL, 0, 0, GF_ISOM_SAMPLE_FLAG_SYNC); // 将SEI帧数据添加到Sample中 gf_isom_sample_add_subsample(pSample, sei_data, sei_size, 0); // 将Sample添加到Track中 gf_isom_append_sample(pTrack, pSample); // 保存MP4文件并关闭 gf_isom_close(pFile); return 0; } ``` 需要注意的是,上述示例代码中的SEI帧数据是一个指向数据缓冲区的指针sei_data和数据大小sei_size,需要根据实际情况进行填充。另外,示例代码中使用的是AVC1编码格式,如果使用其他编码格式,需要相应地修改Sample Description Entry的参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙红胖子Qt(长沙创微智科)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值