大侠已经完成了很多操作了,唯一不足的是,工程完整性差一些,而且对于一些关键点的说明,不太明确,至少对于我这样的人来说,看mp4v2的代码是有些吃力了.
引用文:http://blog.csdn.net/jwzhangjie/article/details/8857892
根据此文作者的相关几篇文章,已经成功实现了编译,打包视频了.
也遇到评论中的一些问题,视频除了vlc,其它都无法播放.
而且根据不同的sps,pps,出现的结果不太一样.具体为手机中(9500)中的文件浏览器中的缩略图显示与否.
本人用了作者的h264文件,发现其实它算是完整的mp4文件应该,把后缀修改下,可以在各播放器中正常播放.
通常,我们需要保存的是h264帧,raw数据,和aac流,比如视频监控的数据,目前这没有aac音频,无法测试,但有h264数据帧,所以进行了测试.
sps,pps的取值与作者有些不同.然后我又查了下资料,发现是000001或00000001开头的数据,然后是sps,然后又是这段,pps,然后又这段,再是其它(mp4文件其它元素)等.然后把I帧打开一看
00 00 00 01 67 42 E0 14 DA 05 82 51 00 00 00 01
68 CE 30 A4 80 00 00 00 01 06 E5 01 A2 80 00 00
00 01
这是头部分
67就是sps的开头,68是pps,通常在一个流中,这些都是固定的,所以取一帧即可,而且要I帧.而且是00 00 00 01开头,标识的,没有作者程序中的aavc这样的数据,这个似乎是一个mp4文件中才存在的.而raw流应该是00 00 00 01开头的.
明白这个后,sps,pps就容易取出来的,因为只有这样的标识,没有长度标识,所以相对固定一些,可以解析,也可以直接用16进制查看得到.然后就有了.
unsigned char sps_pps_640[17] = {0x67, 0x42, 0xE0, 0x14, 0xDA, 0x05, 0x82, 0x51, 0x68, 0xCE, 0x30, 0xA4, 0x80};
sps,8个单位67 42 E0 14 DA 05 82 51
pps是5个68 CE 30 A4 80,作者是将二者合并的,其实不必
MP4AddH264SequenceParameterSet(fileHandle, video, sps_pps, sps_index);
MP4AddH264PictureParameterSet(fileHandle, video, sps_pps + sps_index, pps_index);
可惜啊,这样得到的视频,一般播放器无法播放,手机里的vlc可以,但pc上却不行.文件浏览器可以看到缩略图了,系统播放器依旧无法播放.
sps,pps无法正确地得到,但不明白哪个步骤出了错误,只有再研究了,还有作者的那块h264文件 个人觉得不适合用,视频监控的I帧也上传一个,可以测试下.
工程sps替换上面的就可以了.然后长度修改下.包含jni部分,也可以自己编译,在jni目录中运行ndk-build就可以了.
- I.rar (11.2 KB)
- 下载次数: 134
分享到:
相关推荐
这里提到的"mp4v2封装h264裸流为MP4库"就是为此目的设计的。 MP4v2库是一个开源项目,它的目标是提供一个功能强大且易于使用的接口,用于创建、修改和读取MP4文件。这个库不仅支持基本的MP4操作,还支持高级特性,...
Android使用Mp4v2用h264流和acc流合成mp4 使用mp4v2源码在linux系统下生成对应的so包,AndroidStudio用最新的cmake利用mp4v2库生成mp4文件,用h264流生成mp4文件同一个套路,android进行h264的解码,将生成的每一帧喂...
本主题聚焦于如何在富瀚6630平台上移植mp4v2库,以便将H264视频流保存为MP4文件。这涉及到多媒体编码、容器格式、库移植以及嵌入式系统开发等多个关键知识点。 首先,我们需要了解H264编码。H264,也称为AVC...
本文将深入探讨如何使用`mp4v2`库将H264格式的视频转换为MP4格式。 首先,了解H264与MP4的关系是至关重要的。H264是一种视频编码算法,负责将原始视频数据压缩成更小的体积,以便于存储和传输。而MP4(MPEG-4 Part ...
总之,这个示例工程提供了一个完整的解决方案,帮助开发者了解如何利用`libmp4v2`库将H264+AAC裸流数据高效、同步地录制为MP4文件。通过学习和理解这些源代码,开发者可以更好地掌握流媒体处理技术,提高自己在音...
libmp4v2支持H265版本的实现,意味着它能够处理包含H265编码流的MP4文件。这包括读取H265编码的视频数据,以及将新编码的H265视频流写入MP4文件中。在写入过程中,库会正确地设置文件中的盒(Box)结构,如trak、...
这里,我们关注的是如何使用`libmp4v2`库将H264编码的视频流和AAC编码的音频流合并并写入MP4文件。下面将详细解释这一过程涉及的技术细节。 首先,H264是一种高效的视频编码标准,它通过高级的编码技术如块运动补偿...
它可能包含了一个命令行工具或API,接收H264和G711的裸码流作为输入,然后使用mp4v2库将其封装成符合MP4格式的文件。这样的工具使得非专业人士也能方便地进行转换,而无需深入了解底层的编码和容器格式细节。 总的...
H264的NAL单元有不同的类型,如SPS(Sequence Parameter Set)、PPS(Picture Parameter Set)和IDR(Instantaneous Decoding Refresh)帧,这些都需要正确处理并保存在MP4文件的适当位置。 3. **同步音视频流**:...
在MP4v2库中,H264编码的视频流可以被正确解析和处理。H264编码器会将原始视频数据压缩成一系列的NAL单元(Network Abstraction Layer Units),这些单元包含关键帧(I帧)、预测帧(P帧)和双向预测帧(B帧)。MP4...
H.264是一种高效的视频编码标准,广泛应用于数字电视、网络流媒体和高清视频存储等领域。JPEG则是常见的静态图像压缩格式,适用于互联网传输和存储。 描述中提到“具体情况参照readme”,意味着项目包含一个名为...
在testRTSPClient中,MP4V2库用于将接收到的RTP数据包转换为MP4格式,从而能够将RTSP流录制为本地MP4文件。 4. **VS2010(Visual Studio 2010)**:这是一个微软开发的集成开发环境(IDE),用于编写各种类型的应用...
在本文中,我们将深入探讨如何使用`mp4v2`库来封装H.264视频到MP4文件,以及如何利用`facc`库将PCM编码的音频封装为AAC音频。 首先,让我们了解`mp4v2`库。这是一个用于读写MP4文件的开源库,支持添加、修改和删除...
MP4v2,全称ISO Base Media File Format (ISO BMFF),是MP4文件格式的一个扩展,主要用于多媒体数据存储,特别是在网络流媒体、数字视频广播和嵌入式系统中广泛应用。2.1.1版本是该库的一个稳定版本,提供了一系列...
这个库很可能提供了接口,允许开发者将H.265编码的视频流和AAC编码的音频流合成为符合MP4标准的文件。使用这样的库可以简化开发流程,尤其是对于需要多线程处理大文件的场景,因为它会处理底层的细节,如时间戳同步...
3. 添加源文件:将解压后的libmp4v2源代码文件夹中的所有cpp和h文件添加到新建项目中。 4. 设置编译选项:在项目属性中,配置C++和链接器设置,确保包含目录包含了所有依赖的头文件路径。同时,设置库目录以包含所...
最后,编码后的H264位流可以写入文件,如MP4、MKV等容器格式,以便于存储和播放。这个过程通常需要使用到像ffdshow或FFmpeg这样的工具,它们能够处理H264编码的视频流,并将其封装进合适的文件格式。 总结起来,...
通过以上步骤,你就能在QT C++环境中利用FFmpeg调用USB摄像头,显示视频流,并以H264编码保存为MP4格式的视频文件。这个过程涉及了多媒体处理、多线程编程、文件I/O和编码解码等多个方面的知识,对于深入理解QT和...