瑞芯微rk3568移植openbmc(五)----关于novnc h265 webcodec硬解码

文章讲述了在调校H264的WebCodec后,H265只需更改参数即可,主要区别在于参数设置。H264的参数如avc1.42002A,而H265的参数结构更复杂,如hvc1.1.0.L120.xx。尽管H265理论上能更节省带宽,但在实际应用中与H264的差异并不显著,尤其在VNC应用中,两者流量差距微小。
摘要由CSDN通过智能技术生成

         本章没有什么实质内容,其实在第四节调好了H264的webcodec以后,H265仅仅只需要改下参数,其他的都交给webgl去处理就行了,没有什么大的变化,vp8、vp9、h264、h265处理都一样,仅仅只是参数的变化,不得不说谷歌浏览器做的确实让开发人员用起来很舒服。

        下面简单说明一下H264和H265的配置:webcodec的示例代码如下:

webcodecs/main.js at main · w3c/webcodecs · GitHub

         这几个参数有部分是固定的,如H264中avc1.就是固定不变的,后面的42002A实际上是H264中配置的profile和level的值,如果确实不清楚自己配置的多少也没关系,通常这个值存在H264的SPS的NAL单元中(一般都是首帧),抓取一帧H264的流就清楚了,如下图所示:00  00  00 01表示一帧的开始,67表示此帧为SPS帧,紧接着的42 C0 2A即表示profile和level了,上述webcodec的参数改为此值就行:avc1.42c02a

         而H265中就复杂了,目前尚未完全搞懂H265的参数结构。以下讲述仅供参考,如有大佬能解惑不胜感激。H265的参数值表示方式和H264完全不同,其表示Profile.Flags.TierLevel.Constraints,比H264多了一个VPS NAL,而webcodec的参数信息就存在于VPS当中,H265的webcodec前缀可以为hev1或hvc1,以一帧H265为例:帧头仍为00 00 00 01, 40表示当前是一帧VPS NAL单元,01表示当前是main profile,如果是02则表示main 10 profile,78表示TierLevel为120

      如果以命令:ffprobe -v quiet -print_format json -show_streams 1.h265 查询当前帧的信息可以看到:profile为Main,level为120,Flags即为has_b_frames:0,组合起来即为:hvc1.1.0.L120.xxhvc1.1.0.H120.xx,具体更详细的信息目前尚不清楚,本人只能靠实际环境来调试了,目前测试配置为hvc1.1.0.L120.00hvc1.1.0.L120均可以正常解码

{
    "streams": [
        {
            "index": 0,
            "codec_name": "hevc",
            "codec_long_name": "H.265 / HEVC (High Efficiency Video Coding)",
            "profile": "Main",
            "codec_type": "video",
            "codec_time_base": "1/30",
            "codec_tag_string": "[0][0][0][0]",
            "codec_tag": "0x0000",
            "width": 1920,
            "height": 1080,
            "coded_width": 1920,
            "coded_height": 1080,
            "closed_captions": 0,
            "has_b_frames": 0,
            "pix_fmt": "yuv420p",
            "level": 120,
            "color_range": "tv",
            "refs": 1,
            "r_frame_rate": "30/1",
            "avg_frame_rate": "30/1",
            "time_base": "1/1200000",
            "disposition": {
                "default": 0,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0,
                "timed_thumbnails": 0
            }
        }
    ]
}

         实测H264与H265硬解不管是从代码修改上,还是清晰度异或是帧率上都没有太大区别,仅仅只是H265比H264稍稍省一点点带宽而已,协议理论上H265比H264能省30%~40%,实际测试起来也就10%左右的差距,对应VNC应用来说这点流量差距几乎可以忽略,因H264和JPEG Tight编码比起来本身已经是非常非常省流量了,H265相对于H264省的流量比起JPEG Tight编码那就可以几乎忽略不计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值