余温|SEI那些事儿,FFmpeg从入门到精通——进阶篇( 四 )


x264libx264支持多种SEI类型数据写入 , 常用的仍然是SEI_USER_DATA_UNREGISTERED , 具体的写入函数x264_sei_version_write()位于libx264/encoder/set.c中 。
解析SEIFFmpeg在读取和解码NALunit , 都有相同的逻辑处理SEI 。
读取或者解码数据时 , 会调用下面函数进行码流的解码 , 其中buf包含具体的二进制流 , buf_size是当前码流长度 。 函数内部会解析码流并实例出具体的NAL对象:
从解码器逻辑看 , H264SEIUnregistered结构体只有一个x264_build属性 , 并未返回实质有效数据 。 上层业务如果需要提取SEI_USER_DATA_UNREGISTERED , 仍然需要自己提取 。 提取逻辑 , 请参考下一小节(ffplay) 。
ffplayffplay是一个简单、常用的FFmpeg接口示例工具 , 常用于测试解码、播放效果 。 如果在ffplay中示例跑通SEI提取功能 , 可以很方便的移植到其他平台 。
在ffplay中通过函数av_read_frame(ic,pkt)返回后 , 读取pkt->data可以快速拿到当前读到的NALunit 。 从data数据中取出NALunittype , 如果是SEI且是用户未注册数据类型(payloadtype值为5) , 则可以参考SEI语法继续读取UUID和其后传递的字符串 。
本文主要对H.264码流中涉及用户未注册数据的SEI进行了分析 。 总体而言 , SEI只是视频标准里面很小的一部分 , 但在应用过程中 , 比如直播问答项目中SEI承载的信息 , 就极大提升了直播观看和答题操作的整体用户体验 。 所以说 , 从SEI的例子中 , 我们就会发现 , 视频标准里面还有很多金矿等待着大家的挖掘 , 这就是多媒体技术的魅力 , 也是金山视频云努力的方向 。
最后文末附上这些年收录整理的资料 , 内容包含:Android学习PDF+架构视频+面试文档+源码笔记 , 高级架构技术进阶脑图、Android开发面试专题资料 , 高级进阶架构资料这几块的内容
分享给大家 , 非常适合近期有面试和想在技术道路上继续精进的朋友 。 也是希望可以帮助到大家提升进阶
【余温|SEI那些事儿,FFmpeg从入门到精通——进阶篇】如果你有需要的话 , 可以私信我【进阶】我发给你