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这块会渗透到各行各业。

相关文章
|
Shell 开发工具 git
brew - 常用命令
brew - 常用命令
1702 0
|
存储 编解码 调度
剖析ffmpeg视频解码播放:时间戳的处理
剖析ffmpeg视频解码播放:时间戳的处理
1744 0
|
数据采集 人工智能 JavaScript
Browser Use:40.7K Star!一句话让AI完全接管浏览器!自动规划完成任务,多标签页同时管理
Browser Use 是一款专为大语言模型设计的智能浏览器自动化工具,支持多标签页管理、视觉识别、内容提取等功能,并能记录和重复执行特定动作,适用于多种应用场景。
3172 21
Browser Use:40.7K Star!一句话让AI完全接管浏览器!自动规划完成任务,多标签页同时管理
|
10月前
|
人工智能 API
阿里巴巴发布开源视频编辑全功能模型Wan2.1-VACE,视频创作迎来"全能选手"!
阿里巴巴发布的开源模型Wan2.1-VACE,作为“万相2.1”系列成员,是业内首个视频生成与编辑统一解决方案。该多合一AI模型支持文本、图像和视频的多模态输入,提供视频生成、局部编辑、画面延展等功能,大幅提升创作效率。借助创新技术如“视频条件单元”和“上下文适配”,Wan2.1-VACE可广泛应用于短视频制作、广告营销等领域。模型已上线Hugging Face等平台,免费下载使用,助力AI普惠。
1892 0
|
弹性计算 人工智能 对象存储
来自通义万相的创意加速器:AI 绘画创作
【7月更文挑战第11天】来自通义万相的创意加速器:AI 绘画创作
|
XML 数据格式 Python
将xml标签转换为txt(voc格式转换为yolo方便进行训练)
该文章提供了一个Python脚本,用于将VOC格式的XML标签文件转换为YOLO训练所需的TXT格式,包括修改数据集类别、输入图像与标注文件夹地址、转换过程和结果展示。
将xml标签转换为txt(voc格式转换为yolo方便进行训练)
|
Web App开发 缓存 网络协议
HTTP3版本和实现验证
这篇文章详细介绍了HTTP3协议及其与HTTP2的比较,解释了HTTP3基于QUIC协议的工作原理,包括0-RTT恢复、H3-29草案等技术细节,并提供了验证网站HTTP3支持和浏览器支持的工具和方法。
1274 1
|
前端开发
前端基础(十二)_overflow属性、clear属性、vertical-align属性
本文详细介绍了CSS中的overflow属性、clear属性和vertical-align属性的用法和效果,并通过实例展示了如何控制元素内容溢出时的显示方式、清除浮动以及对齐行内元素和行内块元素。
1288 1
|
SQL 缓存 开发框架
全网最全安全加固指南之中间件加固
全网最全安全加固指南之中间件加固
2009 88
|
Ubuntu 前端开发 安全
在Ubuntu 14.04上安装和配置SNMP守护程序和客户端的方法
在Ubuntu 14.04上安装和配置SNMP守护程序和客户端的方法
398 0