GB/T28181-2022针对H.265、AAC的说明和技术实现

简介: 基于RTP的PS封装首先按照ISO/IEC 13818-1:2019将视音频流封装成PS包,再将PS包以负载的方式封装成RTP包。

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中的相关描述。


afbc176ffa0f545f40f6b69f5ca5b914.png

系统头应包含对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)。

技术实现

fe74987662a9ca4fe1c124929cbc62ab.jpg

实际上,我们在实现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() {
            @Override
            public 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);
            }
            @Override
            public 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编码");
            else
                btnPCMA.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这块会渗透到各行各业。

相关文章
|
7月前
|
数据采集 人工智能 JavaScript
Browser Use:40.7K Star!一句话让AI完全接管浏览器!自动规划完成任务,多标签页同时管理
Browser Use 是一款专为大语言模型设计的智能浏览器自动化工具,支持多标签页管理、视觉识别、内容提取等功能,并能记录和重复执行特定动作,适用于多种应用场景。
1744 21
Browser Use:40.7K Star!一句话让AI完全接管浏览器!自动规划完成任务,多标签页同时管理
|
Shell 开发工具 git
brew - 常用命令
brew - 常用命令
1226 0
|
弹性计算 人工智能 对象存储
来自通义万相的创意加速器:AI 绘画创作
【7月更文挑战第11天】来自通义万相的创意加速器:AI 绘画创作
|
存储 编解码 API
【视频花屏问题】解码天书:深入理解视频流花屏现象及其解决方案
【视频花屏问题】解码天书:深入理解视频流花屏现象及其解决方案
2334 8
|
Web App开发 缓存 网络协议
HTTP3版本和实现验证
这篇文章详细介绍了HTTP3协议及其与HTTP2的比较,解释了HTTP3基于QUIC协议的工作原理,包括0-RTT恢复、H3-29草案等技术细节,并提供了验证网站HTTP3支持和浏览器支持的工具和方法。
585 1
|
12月前
|
机器学习/深度学习 人工智能 监控
智能建筑管理系统:建筑能效的优化
【10月更文挑战第23天】智能建筑管理系统(IBMS)通过集成信息技术、自动化和通信技术,实现对建筑内设施的综合监控与管理,优化能效,提升舒适性和安全性。本文介绍IBMS的功能特点、应用成效及未来发展趋势,展示其在建筑能效优化中的重要作用。
|
缓存 负载均衡 安全
|
前端开发
前端基础(十二)_overflow属性、clear属性、vertical-align属性
本文详细介绍了CSS中的overflow属性、clear属性和vertical-align属性的用法和效果,并通过实例展示了如何控制元素内容溢出时的显示方式、清除浮动以及对齐行内元素和行内块元素。
1093 1
|
Linux Shell Python
centos执行pip3 install etcd3报错
centos执行pip3 install etcd3报错
|
XML 数据可视化 Java
【干货】常用EXE文件反编译工具
【干货】常用EXE文件反编译工具