【分享】如何给视频码流添加PTS和用户自定义信息
通过如下流程,可以给视频码流添加PTS和用户自定义信息
-
在编码侧通过SEI加入PTS信息和帧序号,
1.1 编码前,在struct EncoderSink :: ProcessFrame() 里为AL_TBuffer添加MetaData,MetaData里含有PTS信息及其它用户自定义信息。
1.2 编码完成后,在struct EncoderSink :: EndEncoding () 里从AL_TBuffer取出MetaData,使用MetaData里含有的PTS信息添加SEI(Supplemental Enhancement Information)。这样码流里就含有SEI-PTS信息了。 -
在解码侧通过SEI得到PTS信息和帧序号。
2.1 在解码侧使能split-input, 添加选项“--split-input -nsize 4000000”。
2.2 在 main.cpp里的writeSei()能得到SEI信息,也就是PTS信息。 使能split-input后,writeSei是被从writeSeiCB.endDecodingCB --> sFrameDecoded --> WriteSyncSei --> writeSei的顺序调用的,可以得到对应的framebuffer。如果没有使能split-input,writeSei是被从CB.parsedSeiCB --> sParsedSei --> writeSei的顺序调用的,不能得到对应的framebuffer。
2.3 Display::Process( ) 是严格按照帧顺序被调用的。通过匹配Display::Process( )的帧序号和和SEI-PTS里的帧序号,也能得到每一帧的PTS。
付汉杰 hankf@amd.com