一、过程简述:

1、首先涉及到的插件式textoverlay,该插件中会探测流媒体是否包含字幕,如果有字幕将会调用pango与Cairo库,将字幕字符串转化为图片,以compositon为处理单元与视频buffer一起传递下去。

2.在vaapisink端,将会调用VaAssociate(),将字幕图片与视频帧融合在一块,一起显示。


二、性能提升:

在原理设计的基础上进行修改,之前的设计在显示每一帧的时候都会在video memory中创建一个subpicture,这种操作会导致大量的数据从system memory 中copy到video memory中,导致了只要有字幕出现,cpu的占用率都会提高很多,因此会耗费很多的资源。

改进:在每个视频surface中只要发现字幕不一样便会去创建subpicture,否则直接返回,这样同一个字幕创建的个数也就等于视频surface的个数,大大提高了之前每一帧都会去创建效率。

同时显示两种字幕流命令:

gst-launch-0.10 filesrc location=/root/video_test/DarkShadows_2ch_6ch_FIGS_17Tracks.mp4 ! \

qtdemux name=dmx \

multiqueue name=mq \

textoverlay name=tone \

textoverlay name=ttwo valignment=2 \

dmx.video_00 ! mq.sink0 mq.src0 ! vaapidecode ! tone.video_sink \

dmx.audio_00 ! mq.sink1 mq.src1 ! queue ! faad ! alsasink \

dmx.subtitle_00 ! mq.sink2 mq.src2 ! tone.text_sink \

dmx.subtitle_01 ! mq.sink3 mq.src3 ! ttwo.text_sink \

tone.src ! ttwo.video_sink ttwo.src ! vaapisink