效果:
一、实现思路
首先我们要知道,gstreamer有OpenGL相关的插件,网址如下:
GstOpengl (gstreamer.freedesktop.org)
其中,有不少有趣的插件,比如我发现的gltransformation插件,可以实现OpenGL内部的XYZ旋转和平移变化;glshader可以加载OpenGL的着色器代码;本篇文章使用gltransformation实现的一个视频的空间变换,后期有时间,会实现一个三维立方体同时6个的旋转,敬请等待。
本次插件的说明链接如下:gltransformation (gstreamer.freedesktop.org)
本次,其实就是对于下面的命令,进行的属性变化,比如rotation-x,rotation-y,rotation-z,fov等参数进行的改变。在QT中,使用定时器实现即可。
二、相关命令
// 旋转:
gst-launch-1.0 gltestsrc ! gltransformation rotation-z=45 ! glimagesink
// 多个维度旋转
gst-launch-1.0 v4l2src ! video/x-raw,width=1280,height=720 ! videoconvert ! video/x-raw, format=RGBA ! glupload ! gltransformation rotation-x=-45 ortho=True rotation-y=-50 rotation-x=-50 rotation-z=-50 ! glimagesink
具体的代码就先不放出来了,这里是片段的代码:
QString str_rtp = QString("gst-launch-1.0 videotestsrc ! video/x-raw,width=1280,height=720 ! timeoverlay ! videoconvert ! video/x-raw, format=RGBA ! glupload ! gltransformation name=mygltransformation ortho=False rotation-x=-40 ! glimagesink sync=false name=vsink");