在使用EasyCVR上云网关的过程中,有用户需要在特定场景下在视频流中添加自定义信息。这种需求目前我们也已经开发出来,可以通过流媒体SEI的方式实现。
流媒体是采用流式传输方式在网络上播放的媒体格式,视频网站内容、短视频、在线直播这些视频形态,均属于流媒体的不同分支。流媒体大致包含三个层级:码流、封装和协议。从音视频编码器输出的码流,经过某种封装格式后,经过特定的协议传输、保存,构成了流媒体世界的基础功能,这里提到的SEI即补充增强信息属于码流范畴,它提供了向视频码流中加入额外信息的方法,是H.264/H.265这些视频压缩标准的特性之一。SEI的基本特征为可选,容错高,集成在码流中。
以具体264码流分析:
NAL header:起始码(暗红底色)"0x00000001"分割出来的比特流即是NAL unit,起始码紧跟的第一个字节(墨绿底色)是NAL header。
上图“NAL header”一共出现了四个数值:“0x06”,此时NRI为"00B",NAL unit type为SEI类型。
“0x67”,此时NRI为“11B”,NAL unit type为SPS类型。
“0x68”,此时NRI为“11B”,NAL unit type为PPS类型。
“0x65”,此时NRI为“11B”,NAL unit type为IDR图像。
- SEI payload type:
"0x06"后一个字节为“0x05”(淡黄底色)是SEI payload type,即表征SEI payload分析遵循user_data_unregistered()语法。 - SEI payload size:
“0x05”后一个字节为“0x2F”(淡蓝底色)是SEI payload size,此时整个payload是47个字节。 - SEI payload uuid:
"0x2F"随后的16个字节即为uuid,此时uuid为SEI payload content由于payload size是47个字节,除去16字节的uuid,剩下31个字节的content。
由于content是字符串,所以有结束符"0x00",有效的30个字符内容是:rbsp trailing bits47个payload字节后的"0x80"(灰底色)即是rbsp trailing bits,在user_data_unregistered()里面都是按字节写入的,所以此时的NAL unit结尾写入的字节一定是0x80。
EasyCVR支持阿里云、腾讯云、华为云、七牛云等,支持S3和Swift接口的对象存储服务,简单配置,部署更高效;且支持传统网络摄像机、NVR、编码器、SDK等设备,最大程度的提高了硬件设备的兼容性。
视频相关解决方案均可访问TSINGSEE青犀视频,可以联系我们获取演示方案,直观感受,也可自行下载及测试。