MP4V2封装h265

news/2024/10/31 3:19:38/

mp4v2一般是用来做h264到mp4的封装,后来经过总结和优化,出现了支持h264/h265的版本,链接如下:

mp4v2-h265

从以上链接中下载的MP4V2源码

相关接口如下:

MP4V2_EXPORT
MP4TrackId MP4AddH265VideoTrack(MP4FileHandle hFile,uint32_t      timeScale,MP4Duration   sampleDuration,uint16_t      width,uint16_t      height,uint8_t       AVCProfileIndication,uint8_t       profile_compat,uint8_t       AVCLevelIndication,uint8_t       sampleLenFieldSizeMinusOne );MP4V2_EXPORT
void MP4AddH265VideoParameterSet(MP4FileHandle hFile,MP4TrackId trackId,const uint8_t *pSequence,uint16_t sequenceLen);    MP4V2_EXPORT
void MP4AddH265SequenceParameterSet(MP4FileHandle  hFile,MP4TrackId     trackId,const uint8_t* pSequence,uint16_t       sequenceLen );MP4V2_EXPORT
void MP4AddH265PictureParameterSet(MP4FileHandle  hFile,MP4TrackId     trackId,const uint8_t* pPict,uint16_t       pictLen );

我用的MP4v2-2.0.0 封装(打包)h265和aac到MP4文件能正常播放。为了兼容h264,我通过判断第一个I帧的NALU中是否有vps来做了一个同时支持h265和h264的mp4录制实现,这里需要了解h265和h264裸流的区别:

H.264码流

H264中,NALU类型1-5为视频帧,其余则为非视频帧。在解码过程中,我们只需要取出NALU头字节的后5位,即将NALU头字节和0x1F进行与计算即可得知NALU类型,即:

NALU类型 = NALU头字节 & 0x1F 

SPS:十进制 7

PPS:十进制 8

I 帧:十进制 5

P帧:十进制 1

SEI: 十进制 6

H.265码流

HEVC全称High Efficiency Video Coding(高效率视频编码,又称H.265),是比H.264更优秀的一种视频压缩标准。HEVC在低码率视频压缩上,提升视频质量、减少容量即节省带宽方面都有突出表现。 H.265标准围绕H.264编码标准,保留原有的某些技术,同时对一些技术进行改进,编码结构大致上和H.264的架构类似。这里着重讲一下两者编码格式的区别。 同H.264一样,H.265也是以NALU的形式组织起来。而在NALU header上,H.264的HALU header是一个字节,而H.265则是两个字节。

NALU类型 = (NALU头第一字节 & 0x7E) >> 1

如下图所示:

0                   1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+ -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| F | Type | LayerId | TID |
+------------ - +---------------- - +

从图中可以看出hHEVC的nal包结构与h264有明显的不同,hevc加入了nal所在的时间层的ID,去除了nal_ref_idc,此信息合并到了naltype中,

通常情况下F为0,layerid为0,  TID为1。

VPS:十进制 32

SPS:十进制 33

PPS:十进制 34

I 帧:十进制 19

P帧:十进制 1

SEI: 十进制 39

生成文件:smarthome_20210419_104841.MP4

查看文件信息:

具体使用流程:

从h265视频流中分离出vps、sps、pps、IDR(i)帧、p帧等信息进行后面处理。处理流程类似封装h264流
h264 使用sps帧 添加视频流MP4AddH264VideoTrack
h265 使用vps帧 添加视频流MP4AddH265VideoTrack
对于h265其中有个问题就是视频的宽 高信息 在sps帧中,vps初始化使用的宽高参数就 先自己赋值为实际的视频宽高了,
接着 以下几个参数设置了
vps帧就 MP4AddH265VideoParameterSet
sps帧就 MP4AddH265SequenceParameterSet
pps帧就 MP4AddH265PictureParameterSet
i和p帧就写数据MP4WriteSample
正常来说,传输给接口的数据没有问题的话,打包出来的文件就能正常播放。


http://www.ppmy.cn/news/548501.html

相关文章

轻量级模型:MobileNet V2

一、论文: https://arxiv.org/abs/18 非官方Caffe代码:https://github.com/shicai/MobileNet-Caffe 二、论文理解 MobileNet V2 是对 MobileNet V1 的改进,同样是一个轻量级卷积神经网络。 1)基础理论--深度可分离卷积&#…

自动驾驶技术-环境感知篇:V2X技术的介绍

V2X技术概述 在前面的几篇文章分别介绍了自动驾驶在环境感知领域的相关技术点,主要介绍了如何通过雷达配合视觉技术实现车辆自身的智能。其实在环境感知方面,除了利用车辆自身的智能,还可以借助外部环境实现信息的获取,这一类技术…

V2X车联网-学习整理笔记

一致性测试预备条件: 1.具备WIFI或者LAN通信能力 2.具备GNSS能力,能够获取设备经纬度以及授时 3.具备RF通信能力 aid为应用标识,应用标识分配如下: 111:普通车辆状态 112:普通车辆关键事件提醒 113&#x…

u盘装服务器系统还原c盘失败,usb启动盘安装系统还原失败怎么办?

有的时候大家装系统的时候会遇到一些问题,明明按照规定操作了,怎么就不成功了呢,现在我来为大家讲解。 1、我用的是雨林木风的启动盘工具制作的,在网上搜索雨林木风就能找到。首先按启动键选择用usb首先启动,电脑品牌不…

GHOST备份还原系统教程

Ghost在XP时代可以说是装机必备,因为Ghost使用简单、快捷,直到现在仍然受到强力的追捧。说到备份和还原操作系统,Ghost绝对是一把好手,简单的操作、快速的恢复,让你的电脑重新焕发活力。 工具/原料:带有PE的…

计算机系统删除一点会怎么样,电脑系统还原后会怎么样

电脑系统被还原会发生什么呢?以下是学习啦小编为你整理的资料,希望能帮到你。 系统被还原会发生什么? 系统还原就是系统回复到你原来设置还原点的时候的样子,你原来设置还原点的时候是什么样子它就还原到什么样子。你在设置还原点以后所安装的软件就没有了,恢复系统后,电…

Clonezilla 再生龙制作系统U盘还原系统

目录 Clonezilla 再生龙介绍 前提准备 制作系统U盘 遇到的坑 UltraISO制作系统U盘 还原系统 结语吐槽 Clonezilla 再生龙介绍 Clonezilla 再生龙是一款功能非常强大的系统备份与还原工具,支持市面上几乎所有的系统类型。如:Windows、Mac OS 、De…

win7系统备份还原软件_比ghost快200%!备份还原系统真正首选的神器

现在人重装系统都爱从网上下载系统进行安装,而这些系统基本上都是ghost系统,典型的ghost系统有雨林木风、番茄花园等等。 所谓ghost系统就是通过一款名为ghost的系统备份工具制作的系统,安装的时候,只需要再通过ghost将备份的系统进行还原即可。 ghost的盛行给各种第三方修…