给公司的直播推流框架加上了携带SEI的功能,做完了记录一下
这个东西使用场景挺广的,比如直播中的动画效果,直接渲染到画面上可能会引起性能消耗,不如通过SEI告诉给观众,由观众端做出UI响应,既能保持直播画面和效果同步出现,又能减少主播端的性能消耗,其次,对于音频视频文件资源,可以通过SEI在视频中埋入版权等信息。

H264编码由两个部分组成(VCL和NAL)

画面帧首先要经过 视频编码层面(VCL) 被编码层切割成宏块,这不是本篇记录的重点,不展开讲

之后这些块会被 网络抽象层面(NAL) 分割成多个NALU块

NAL NAL NAL NAL …
这些NAL块里一部分是装着上面切割的画面数据,一部分装着描述这个视频的参数数据(输序列参数集和图像参数集等等)

接着拆
每个NAL又可以拆成NAL Header和RBSP

NAL Header RBSP NAL Header RBSP …
其中NAL Header描述了这个NAL的类型及携带了什么样的参数,RBSP则是这个NAL携带的内容

NAL Header的位图如下

NAL Header 摘自go_str博客
1、F(forbiden):禁止位,占用NAL头的第一个位,当禁止位值为1时表示语法错误;
2、NRI:参考级别,占用NAL头的第二到第三个位;值越大,该NAL越重要。
3、Type:Nal单元数据类型,也就是标识该NAL单元的数据类型是哪种,占用NAL头的第四到第8个位;
(摘自go_str博客)

其中我们比较关注的是其中的后5位,即NAL Type

nal_type 摘自go_str博客
其中Type = 6 表示该NAL携带的是辅助增强信息(SEI)

由上面NAL Header的位图可知,Type=6时,NAL Header的 头是

00 00 00 01 06


NAL起始(start code) NAL Type
接下来是SEL的参数,SEI信息包含几个主要要素

· SEI payload type (该SEI遵循的语法)
· SEI payload size (该SEI所携带信息的长度)
这里我们只讨论SEI payloadType = 5的情况,即遵循user_data_unregistered()语法的SEI信息

· SEI payload uuid (SEI)
· SEI payload content
以及作为结尾的
· rbsp trailing bits (0x80)
一个个来讲,首先是SEI payload type
他的解析方式为,持续读取8bit,直到非0xff为止,然后把读取的数值累加,累加值即为SEI payload type。

payload type 摘自金山云
接在SEI payload type 后面的,即SEI payload size,读取SEI payload size和payload type逻辑类似,仍然是读取到非0xff为止,这样可以支持任意长度的SEI payload添加。

那么按照以上逻辑,再拼上start code和NAL Type

00 00 00 01 06 05 12
___________ __ —— __
NAL起始(start code) NAL Type SEIPayloadType SEIPayloadSize
即 00 00 00 01 06 05
以上就是一个遵循user_data_unregistered()语法、payloadContent长度为18byte的SEI参数定义

定义好参数接下来就是内容部分
首先user_data_unregistered()语法要求在SEI payload size之后的16byte作为SEI payload uuid,该uuid由用户自定义,可以作为业务的标识参数

01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04
因为uuid固定为16,所以SEI payload size的长度必须大于等于16

然后就是SEI payload content,自由发挥,不要超过(content size - 16)即可,以0x00作为字符串结尾,

05 00
因为上面定义的size = 18 ,所以这里只有2byte作为content

最后再给这条NAL拼上结束标示

80
综上所致,该条NAL的完整样式即为

00 00 00 01 06 05 12 01

02 03 04 01 02 03 04 01

02 03 04 01 02 03 04 05

00 80
到这里本篇的学习记录就结束了

作者:码痞
链接:https://www.jianshu.com/p/7c6861f0d7fd
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

h.264 sei信息相关推荐

  1. 开发那些事儿:在Flv.js前端播放器中解析并绘制H.264编码中的SEI信息

    流媒体中的SEI是指补充增强信息(Supplemental Enhancement Information),它提供了向视频码流中加入信息的办法,是H.264/H.265视频压缩标准的特性之一.SEI ...

  2. H.264里的SEI——自定义信息(SEI)

    参考: 笔记---H.264里的SEI - 简书 h264解码之自定义信息(SEI)_技术联盟-CSDN博客_h264 sei

  3. H.264/AVC视频编解码技术详解 第一章 视频信息与压缩编码

    H.264/AVC视频编解码技术详解系列笔记 是对 H.264/AVC视频编解码技术详解 课程的学习 文章目录 人与世界的交互 视频信号的表示方法 视频压缩编码 视频信息为什么可以被压缩? 视频压缩编 ...

  4. MPEG-4 AVC/H.264 信息

    作者:haibara    来源:pcicp.com 本FAQ由(haibara)翻译,期间受到kaito_mkid(pcicp)帮助,在此感谢,由于Newbie的关系,如有翻译错误,还请各位指出,由 ...

  5. 【H.264/AVC视频编解码技术详解】一. 视频信息与压缩编码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  6. H.264/H265码流解析

    H.264/H265码流解析 一.H.264码流解析 一个原始的H.264 NALU 单元常由 [StartCode] [NALU Header] [NALU Payload] 三部分组成 一个原始的 ...

  7. H.264 基础及 RTP 封包详解

    一. h264基础概念 1.NAL.Slice与frame意思及相互关系 1 frame的数据可以分为多个slice. 每个slice中的数据,在帧内预测只用到自己slice的数据, 与其他slice ...

  8. h.264语法结构分析

    NAL Unit Stream Network Abstraction Layer,简称NAL. h.264把原始的yuv文件编码成码流文件,生成的码流文件就是NAL单元流(NAL unit Stre ...

  9. (转载)H.264码流的RTP封包说明

    H.264的NALU,RTP封包说明(转自牛人) 2010-06-30 16:28 H.264 RTP payload 格式 H.264 视频 RTP 负载格式 1. 网络抽象层单元类型 (NALU) ...

最新文章

  1. opencv 1 图像载入、显示和输出
  2. 不被邀请又怎样!马云都快买下中国AI芯片的半壁江山了,直怼腾讯和百度
  3. java二叉树的运用
  4. 有趣的js匿名函数写法(function嵌套)
  5. mssql sqlserver 优化注意事项:
  6. 关于%@ include file= %与jsp:include page=/jsp:include中的那些问题?
  7. leetcode—19.二叉树遍历相关题目leetcode总结
  8. Cocoa中Core Data的简单介绍
  9. 网吧母盘网上精华+个人总结=超详细
  10. OpenCV中出现“Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000005C8ECFFA80 处。”的异常...
  11. 真正厉害的人,早戒掉了情绪
  12. 我用unity开发的第一款游戏demo心得
  13. 数据库安全性 --- 控制
  14. 钡铼智能楼宇控制BACnet 接入Modbus TCP Server云平台
  15. 第5次作业+001+陈定国
  16. 36页银行业务工作总结PPT模板
  17. 计算机病毒带来主要危害,计算机病毒的危害有哪些【详细介绍】
  18. [MRCTF2020]Ez_bypass1
  19. 抽烟行为监测识别系统 yolov5
  20. linux 下格式化 SD卡

热门文章

  1. 结合源码看《我所理解的cocos2dx-3.0》—— 字体
  2. c++多线程生产者与消费者问题代码
  3. Docker报错Error spawning command line “dbus-launch --autolaunch=xxx --binary-syntax --close-stderr”
  4. 浅析“关于区块链解决资本主义问题还是社会主义问题”的对与错
  5. C++数据结构——玩转二叉树
  6. istio-cni详解
  7. Happy Father's Day 告诉父亲你爱他
  8. 儿童用台灯用白光好还是暖光好?推荐儿童使用的暖光台灯
  9. 店宝宝:淘宝特价版直面拼多多靠的是什么?
  10. ssm练习第二天_项目拆分moudle_基本增删改查_批量删除_一对一级联查询