如何在i.MX6上实现视频与图像叠加。

注意,本篇为干货,是经过了大量的资料查询以及公司实际的项目验证才有的经验。

可以让有需要的人一步登天,不走弯路。

 

一,前提条件

图像使用qt实现,视频则使用gstreamer。

图像运行在fb0图层上,视频则是fb1。备注:fb1是fb0的overlay层。

也就是说如果图像和视频都存在的话,视频是在图像之上的。

二,细节

那么有一些细节的问题我们需要关注下,比如图像如何运行在fb0图层上,qt4通过命令行参数的形式指定,qt5则是通过配置文件。

视频如何运行在fb1图层上?我们使用playbin这个管道来实现视频播放,video-sink有两个选择,一个是overlaysink,另一个是imxv4l2sink。不管使用哪种,在不特意设置某种属性的前提下,默认都是在fb1层播放。

有人看到这里会问,可不可以视频运行在fb0,而图像运行在fb1上?我的答案是可以这么做,但是会引起非常多的问题,这种选择我认为是错误的。千万不要这么干,有时间我会讲讲为什么。此处不表。

三,叠加问题

fb1层默认是透明的,在不播放视频的时候,你是可以看到fb0层的图像。播放视频后,比如全屏,你只会看到视频,视频底下的图像是看不到的。

那么有人会问,既然如此,怎么实现图像和视频共同显示呢?

这里就要说到overlaysink和imxv4l2sink的区别了。两者都有overlay-left,overlay-top,overlay-width,overlay-height这四个属性。使用起来效果不一样。比如全屏是1080P。left,top指定0,width,height分别指定1920和1080。两个sink的表现是一样的。视频全覆盖。如果width和height只指定部分。那么overlaysink的效果是视频可见,剩余部分黑屏,不透明。而imxv4l2sink的效果是视频可见,剩余部分透明,可以看得到图像。

说到这里,我想你应该知道怎么做了。

四,结语

真相往往非常简单,但却要复出加倍努力去揭开。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值