GB/T28181-2022针对H.265、AAC的说明和技术实现
GB/T28181-2022规范说明
GB/T28181-2022相对来GB/T28181-2016针对H.265、AAC的更新如下:
——更改了“联网系统通信协议结构图”,媒体流通道增加了 H.265、G.722.1、AAC(见 4.3.1,
2016 年版的 4.3.1)。
——增加了对 H.265、AAC 的支持(见 6.2、A.2.1.9、附录 C、附录 F、附录 G)。
——更改了附录 C,补充了 H.265 封装描述(见附录 C,2016 年版附录 C)。
——更改了附录 F,补充了 H.265 编解码技术要求、AAC 格式(见附录 F,2016 年版的附录 E)。
基于RTP的视音频数据封装
基于RTP的视音频数据PS封装
基于RTP的PS封装首先按照ISO/IEC 13818-1:2019将视音频流封装成PS包,再将PS包以负载的方式封装成RTP包。
进行PS封装时,应将母个悦team Map),系统头和PSM放置于PS包头之后、第一十 ti(System Header)和 PSM(Program Stream Map),系统头和PSM放置于PS包头之后、第一个PES包
之前。
典型的视频关键帧PS包结构如图C.1所示,其中 PESV为视频PES包,PESA为音频PES包,视频非关键帧的PS包结构中一般不包含系统头和PSM。PS包中各部分的具体数据结构参见ISO/IEC13818-1 :2019中的相关描述。
系统头应包含对PS包中码流种类的描述,其中视频和音频的流ID(stream_id)取值如下:
a)视频流ID:0xEO;
b)音频流ID:0xCO。
针对本文件规定的几种视音频格式,PSM中流类型(stream_type)的取值如下:
a) MPEG-4视频流:0x10;
b)H.264视频流:0x1B;
c) SVAC视频流:0x80;
d)H.265视频流:0x24;
e)G.711A律音频流:0x90;
f)G.711U律音频流:0x91;
g)G.722.1音频流:0x92;
h)G.723.1音频流:0x93;
i)G.729音频流:0x99;
j)sVAC音频流:0x9B;
k)AAC音频流:0xOF。
PS包封装的其他具体技术规范详见ISO/IEC 13818-1:2019。
PS包的RTP封装格式参照IETF RFC 2250,RTP的主要参数设置如下:a)负载类型( payload type) :96;
b)编码名称(encoding name) ; PS;c)时钟频率(clock rate):90kHz;
d)SDP描述中“m”字段的“media”项:video。
基于RTP的视音频封装
H.265视频流的RTP封装
H.265的RTP载荷格式应符合IETF RFC 7798的相关规定。
H.265视频流RTP包的负载类型(Payload Type)标识号选定:从IETF RFC3551协议表5的动态范围(96~~127)中选择,建议定为100,根据实际需要填充。
音频流的RTP封装,这里我们主要看看AAC的
AAC的主要参数。AAC音频流的RTP载荷格式应符合IETF RFC 3640的相关规定,参数规定如下:
l)负载类型(PT):从IETF RFC 3551:2003表5的动态范围(96~127)中选择,建议定
为102;
2)编码名称(encodingname):AAC;
3)时钟频率( clock rate):参考ISO/IEC 14496-3:2019表1.18“Sampling Frequency
Index”,宜采用8kHz;
4)通道数:参考ISO/IEC 14496-3;2019表1.17“Channel Configuration”,宜使用1;5)SDP描述中“m”字段的“media”项:audio;
6)SDP描述中“a”字段定义AAC音频格式时需携带rtpmap和 fmtp参数,内容格式应符合
IETF RFC 3640,例如:
a=rtpmap:102 AAC/8000/1
a =fmtp;102 streamtype=5 ; profile-level-id=16; mode=AAC-hbr; config=1588 ; size-Length=13 ; indexLength=3 ; indexDeltaLength=3 ; constantDuration=1024。
H.265视频编﹑解码技术要求
H.265的档次和水平
采用H.265标准的视频编码应至少支持ITU-T H.265(2019)视频标准的主档次(MainProfile),水平(Level)应至少支持到Level 2,标清应用宜扩展支持到Level 3,高清应用宜扩展支持到Level 4;视频解码所支持的档次和水平应不低于编码支持的最高档次和水平,至少应支持到H.265视频标准主档次的Level 4。视频解码宜扩展支持 H.265主档次(Main Profile)中的B帧工具,且相邻两Р帧间的B帧个数不大于2。
H.265主档次视频编码标准的具体描述详见ITU-T H.265(2019)的相关规定。
H.265主档次的选项和工具
H.265主档次支持的选项和工具主要有:
a)比特深度限制为8 bit;
b)采样限制为4∶ 2∶ 0;
c)CTB的大小从16×16到64×64;
d)在水平(Level)支持的最大分辨率下﹐解码图像的缓存容量限制为6幅图像﹐若水平(Level)下
分辨率变小,解码图像的缓存容量可大于6幅图像,但不应超过16幅图像;
e)允许选择波前和片划分方式,但是不能同时选择。
采用H.265编码标准的视频流应为H.265主档次视频流,编码应支持上述主档次选项和工具中的部分或全部;H.265的解码至少应支持上述全部选项和工具。
多参考帧编码时,P片的参考帧数一般不大于两帧,且不应超过15帧。
为了保证码流解析的效率,比特流中应当在每个Ⅰ帧之前都出现相应的视频参数集(Video Param-eter Set,VPS)、序列参数集(Sequence Parameter Set, SPS)和图像参数集(Picture Parameter Set,PPS)。
技术实现
实际上,我们在实现GB28181-2016的时候,就已经针对H.265、AAC编码做了设定:
设置如下:
//视频编码类型选择++++++++++videoEncodeTypeSelector = (Spinner)findViewById(R.id.videoEncodeTypeSelector);final String[] videoEncodeTypes = new String[]{"软编(H.264)", "硬编(H.264)", "硬编(H.265)"};ArrayAdapter<String> adapterVideoEncodeType = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, videoEncodeTypes);adapterVideoEncodeType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);videoEncodeTypeSelector.setAdapter(adapterVideoEncodeType);videoEncodeTypeSelector.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view,int position, long id) {if (isRTSPPublisherRunning || isPushingRtmp || isGB28181StreamRunning || isRecording) {Log.e(TAG, "Could not switch video encoder type during publishing..");return;}videoEncodeType = position;Log.i(TAG, "[视频编码类型]Currently choosing: " + videoEncodeTypes[position] + ", videoEncodeType: " + videoEncodeType);}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}});
接口设计:
/*** Author: daniusdk.com* Set Video H.265(hevc) hardware encoder, if support H.265(hevc) hardware encoder, it will return 0(设置H.265硬编码)** @param kbps: the kbps of different resolution.** @return {0} if successful*/public native int SetSmartPublisherVideoHevcHWEncoder(long handle, int kbps);/*** 设置视频硬编码是否使用 Native Media NDK, 默认是不使用, 安卓5.0以下设备不支持* @param handle* @param is_native: 0表示不使用, 1表示使用, sdk默认是0.* @return {0} if successful*/public native int SetNativeMediaNDK(long handle, int is_native);
AAC还是PCMA编码:
class ButtonPCMAListener implements View.OnClickListener {public void onClick(View v) {is_pcma_ = !is_pcma_;if (is_pcma_)btnPCMA.setText("当前PCMA编码");elsebtnPCMA.setText("当前AAC编码");}}
接口设计:
/*** Set audio encoder type(设置音频编码类型)* * @param type: if with 1:AAC, if with 2: SPEEX, if with 3: PCMA* * @return {0} if successful*/public native int SmartPublisherSetAudioCodecType(long handle, int type);
总结
实际上,GB28181-2022针对H.265、AAC的说明,确切的说算是2016的补充,特别是像我们做Android平台GB28181设备接入模块,实际上从GB28181-2016过渡到GB28181-2022难度不大,或者说仅有很少的改动即可,随着今年七月份开始针对2022的实施推广,相信GB28181这块会渗透到各行各业。
相关文章:
GB/T28181-2022针对H.265、AAC的说明和技术实现
GB/T28181-2022规范说明GB/T28181-2022相对来GB/T28181-2016针对H.265、AAC的更新如下:——更改了“联网系统通信协议结构图”,媒体流通道增加了 H.265、G.722.1、AAC(见 4.3.1,2016 年版的 4.3.1)。——增加了对 H.26…...
开关电源环路稳定性分析(11)——观察法找零极点
大家好,这里是大话硬件。 这篇文章主要是分享如何用观察法直接写出补偿网络中的零极点的表达式。 在前面的文章中,我们分别整理了OTA和OPA型的补偿网络,当时有下面的结论。 针对某个固定的补偿网络,我们可以用数学的方法推导补偿…...
焕新启航,「龙蜥大讲堂」2023 年度招募来了!13 场技术分享先睹为快
龙蜥大讲堂是龙蜥推出的系列技术直播活动,邀请龙蜥社区的开发者们分享围绕龙蜥技术展开,包括但不限于内核、编译器、机密计算、容器、储存等相关技术领域。欢迎社区开发者们积极参与,共享技术盛宴。往期回顾龙蜥社区技术系列直播截至目前已举…...
推广传单制作工具
临近节日如何制作推广活动呢?没有素材制作满减活动宣传单怎么办?小编教你如何使用在线设计工具乔拓云,轻松设计商品的专属满减活动宣传单,不仅设计简单,还能自动生成活动分享链接,只需跟着小编下面的设计步…...
软件设计(十一)数据结构(上)
线性结构 线性表 线性表是n个元素的有限序列,通常记为(a1,a2....an),特点如下。 存在唯一的一个称作“第一个”的元素。存在位移的一个称作“最后一个”的元素。除了表头外,表中的每一个元素均只有唯一的直接前趋除了表尾外&…...
https协议
文章目录对称加密方案非对称加密方案对称加密方案非对称加密方案对称加密方案非对称加密方案数字证书因为HTTP是明文传输,所以会很有可能产生中间人攻击(获取并篡改传输在客户端及服务端的信息并不被人发觉),HTTPS加密应运而生。 …...
深入浅出C语言——数据在内存中的存储
文章目录一、数据类型详细介绍1. C语言中的内置类型2. 类型的基本归类:二. 整形在内存中的存储1. 原码、反码、补码2. 大小端三.浮点数存储规则一、数据类型详细介绍 1. C语言中的内置类型 C语言的内置类型有char、short、int、long、long long、float、double&…...
在 Centos 上在线安装 GitLab
作为程序员,其中一个愿望是拥有一个自己的代码存储库。在支持私有部署的代码存储库产品中,GitLab 是比较著名的了,所以今天我总结了一下在 Centos 上安装 GitLab 的过程。 依赖 基础依赖 首先,需要安装部分基础的依赖ÿ…...
模型解释性:SHAP包的使用
本篇博客介绍另一种事后可解释性方法:SHAP(SHapley Additive exPlanation)方法。 1. Shapley值理论 Shapley值是博弈论中的一个概念,通过衡量联盟中各成员对联盟总目标的贡献程度,从而根据贡献程度来进行联盟成员的利益分配,避免…...
算法训练营 day45 动态规划 0-1背包理论 分割等和子集
算法训练营 day45 动态规划 0-1背包理论 分割等和子集 0-1背包理论 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 在下面的讲解中&…...
SSM框架
1.mybatis的底层原理 本质上就是使用反射和动态代理来实现对应的映射关系 2.日志级别 3.传递参数 单个参数的传递和多个参数的传递 Emp selectOne(Param(“xingming”) String name); List selectByCondition(Param(“name”) String name,Param(“sal”) double sal); 4.#和…...
教育行业需要什么样的客服系统?
某教育公司拥有素质教育、成人教育、智慧教育等多个业务板块,日常通过电商、线上媒体、线上线下授课等方式进行业务开展和品牌宣传,取得了非常不错的成绩,受到了很多人的好评反馈。 对于这样一个教育公司,客户来源广泛࿰…...
花房集团任命新首席财务官:已跌破IPO发行价,活跃用户下滑
上市刚满2个月,花椒母公司花房集团(HK:03611)的高管就发生了变更。2023年2月12日,花房集团披露的公告显示,董事会宣布赵磊为该公司首席财务官(CFO),自2023年2月10日起生效。 据贝多…...
儿童绘本馆图书借阅租赁知识付费小程序源码交流
1.分类图书 2.书单推荐 4.会员卡次、期限购买 5.借阅时间选择 6.积分签到 7.优惠Q领取 前端uniapp开发 后端thinkphp开发 完全开源 <template> <view class"sp-section sp-index"> <!-- search --> <view class&qu…...
Vue3 中 axios 的安装及使用
目录前言:一、什么是 axios ?二、Axios 的配置项三、Axios 的请求方式四、自定义创建实例五、Axios 请求错误处理六、Axios 解决跨域问题七、Axios 请求案例随机笑话大全总结:前言: 在编写vue里的项目时,必须要用和后台…...
Django设计模式以及模板层介绍
MVC和MTV 传统的MVC作用:降低模块间的耦合度(解耦)Django的MTV模式 作用:降低模块间的耦合度(解耦)什么是模板 1、模板是可以根据字典数据动态变化的html网页2、模板可以根据视图中传递的字典数据动态生成相…...
Linux信号一门搞定
1.信号是什么? 信号其实就是一个软件中断。 例: 输入命令,在Shell下启动一个前台进程。用户按下Ctrl-C,键盘输入产生一个硬件中断。如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行,…...
手撸一个动态Feign,实现一个“万能”接口调用
Feign,在微服务框架中,是的服务直接的调用变得很简洁、简单,而不需要再编写Java Http调用其他微服务的接口。 动态feign 对于fegin调用,我们一般的用法:为每个微服务都创建对应的feignclient接口,然后为每…...
Linux Capabilities 入门
目录 Linux capabilities 是什么? capabilities 的赋予和继承 线程的 capabilities Permitted Effective Inheritable Bounding Ambient 文件的 capabilities Permitted Inheritable Effective 运行 execve() 后 capabilities 的变化 案例 Linux capab…...
驱动 day6
关于设备树的理解: 设备树(Device Tree)是一种用于特定硬件设备的解释语法树。它用来表示存储有关主板硬件和CPU架构信息的数据在内核中的传递格式,使内核可以更好地了解硬件并支持它们,而不必编写固定的代码。设备节点…...
附录2-tensorflow目标检测
源码来自作者Bubbliiiing,我对参考链接的代码略有修改,网盘地址 链接:百度网盘 请输入提取码 提取码:dvb1 目录 1 参考链接 2 环境 3 数据集准备 3.1 VOCdevkit/VOC2007 3.2 model_data/voc_classes.txt 3.3 voc_an…...
常见的EMC问题
电磁兼容设计的目的就在于满足产品功能要求、减少调试时间,使产品满足电磁兼容标准的要求,并且使产品不会对系统中的其它设备产生电磁干扰。 电磁兼容设计中常见的问题有哪些? 1、电磁兼容设计可以从电路设计(包括器件选择&…...
Redis内存存储效率问题
目录 内存碎片是如何形成的? 如何判断是否有内存碎片? 如何清理内存碎片? INFO命令 面向 Prometheus 的 Redis-exporter 监控 实习期间,了解到,企业级开发中多个项目使用Redis,运行Redis实例的有可能是…...
3.28 haas506 2.0开发教程-example-蓝牙多设备扫描(仅支持M320,HD1)
haas506 2.0开发教程-example-蓝牙多设备扫描案例说明蓝牙信息克隆1.手机蓝牙改名信息克隆代码测试案例说明 开发板扫描蓝牙设备,获取并打印蓝牙设备mac地址。mac地址每个设备不同,且不能更改。本案例仅适用于M320开发板和HD1-RTU。案例使用手机与iBeac…...
C语言经典编程题100例(41~60)
目录41、习题4-4 特殊a串数列求和42、习题4-6 水仙花数43、习题4-7 最大公约数和最小公倍数44、习题7-5 找鞍点45、练习5-1 求m到n之和46、练习5-2 找两个数中最大者47、练习5-3 数字金字塔48、习题5-1 符号函数49、习题5-2 使用函数求奇数和50、习题5-3 使用函数计算两点间的距…...
git日常使用命令
实习这段时间使用了很多git指令来提交代码,简单记录一下日常使用的指令: 提交代码通常顺序: 1.git status 查看本地修改项 2.git add . 提交全部文件 (这个 .是全部文件)到暂存区 3.git commit -m ‘本次提交的说明’…...
ES6对象展开运算符浅拷贝or深拷贝
ES6中提出的对象展开运算符“…”就是用来展开元素的。有了它就不用代码循环遍历了,偷懒专用。 1. 合并数组 展开原有数组中的所有元素,可以合并成一个新的数组。 var a[1,2,3]; var b[4,5,6]; var c[...a,...b]; console.log(c) // 输出:…...
leaflet 上传包含shp的zip文件,在map上解析显示图形(059)
第059个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中本地上传包含shp的zip文件,利用shapefile读取shp数据,并在地图上显示图形。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果加载shapefile.js方式安装引用jszip(…...
CAN总线详细介绍
1.1 CAN是什么? CAN 最终成为国际标准 ( ISO11898(高速应用)和 ISO11519(低速应用)),是国际上应用最广泛的现场总线之一。 1.2 CAN总线特点 多主方式: 可以多主方式工作,网络上任意一个节点…...
python如何完成对 Excel文件的解密后读取?
通常为了防止重要的Excel文件数据内容的泄露,需要对文件整体进行加密与解密的操作。 对于文件的加解密过程,python也有很多非标准库来帮助我们完成操作,这里主要说明如何完成对Excel文件的解密与读取操作。 这里我们使用到的是msoffcrypto-…...
做网站订金是多少/简述网站推广的方法
4、新建Makefile.am新建Makefile.am文件,命令:$ vi Makefile.am 内容如下:AUTOMAKE_OPTIONSforeignbin_PROGRAMShelloworldhelloworld_SOURCEShelloworld.c automake会根据你写的Makefile.am来自动生成Makefile.in。Makefile.am中定义的宏和目标,会指导a…...
天津最好的网站建设/赣州seo顾问
需求 实现wan/lan自适应,当wan口接到上级路由的时候,自动切换为wan功能,当wan口接到PC电脑时,自动切换为LAN口 分析 如果只是实现wan、lan自适应,不考虑wan切换到lan之后,连接到lan和设备可以互通,则不需要做如下修改,如果需要实现wan切换到lan之后,需要连接到lan的设…...
专做女装拿货的网站/关键词搜索排名公司
传纸条 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 传纸条是一种在课堂上传递信息的老方法,虽然现在手机短信和QQ聊天越来越普及,但是手写的信息会让人感到一种亲切感。对许多学生而言&…...
陕西省建设厅管理中心网站/百度怎么找人工客服
c入门程序 c中的输入和输出,一般使用标准库中printf,scanf去进行读写。 #if 0#include<stdio.h> int main() {//输出printf("hello world...\n");//输入int a 0;printf("请输入一个整数:");scanf("%d", &a);re…...
广州企立科技做网站/品牌宣传推广方案
洛谷 P1451 求细胞数量 题解 洛谷 P1451 问题描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。(1<m,n<100) input 输入一个整数 m , n ( m 行…...
北京网站制作公司兴田德润可信赖/营销软文500字
Description 世界上一共有N个JYY愿意去的城市,分别从1编号到N。JYY选出了K个他一定要乘坐的航班。除此之外,还有M个JYY没有特别的偏好,可以乘坐也可以不乘坐的航班。一个航班我们用一个三元组(x,y,z)来表示,意义是这趟航班连接城市…...