编辑
2025-01-20
记录知识
0
请注意,本文编写于 158 天前,最后修改于 59 天前,其中某些信息可能已经过时。

目录

一、升级方式
1.1 源版本
1.2 补丁来源
1.3 依赖来源
二、构建结果
三、测试命令
3.1 kmssink
3.2 xvimagesink
3.3 rkximagesink

我们基于2004的gstreamer版本在1.16.2/1.16.3上,为了提高gstreamer的可用性,我们跟进了rk的补丁,这样gstreamer可以良好的运行在系统上,所以我们需要升级gstreamer到1.20上,然后提供1.20的测试命令

一、升级方式

1.1 源版本

针对1.20.1的版本选择,我们需要根据ubuntu的发行release来进行跟进,这里跟进基于jammy上,所以是1.20.1。如下以gstreamer1.0-plugins-bad为示例

image.png 针对此,我们所有的代码溯源来自于https://launchpad.net/ubuntu/内的release源地址的gstreamer包,这个包的版本是1.20.1-1系列

1.2 补丁来源

为了使得这个版本能够合入rk的补丁,我们需要找到rk补丁地址如下:

https://github.com/JeffyCN/meta-rockchip/tree/master/recipes-multimedia/gstreamer

针对此,我们需要找到1.20.7的版本补丁来进行1.20.1的微调,如下:

对于补丁的批量合入,我们如下脚本:

for p in *.patch; do patch -p1 < $p done

这里需要留意的是,如果出现了rej,请格外小心,注意合入

如果出现了orig,则对照上下文,判断自动合入是否存在问题

1.3 依赖来源

对于上述包的升级,我们还需要针对依赖来进行依赖包的rebuild操作,这里来源仍是https://launchpad.net/ubuntu/内的release源地址

二、构建结果

根据ppa的本地构建,这里已经完成了构建,ppa地址如下:

https://dev.kylinos.cn/~tangfeng/+archive/kylin-desktop/gstreamer-rk-patch

具体包和依赖图示如下:

image.png 至此,gstreamer已经完全正常,我们只需要将源更新如下,即可升级1.20.1-1的gstreamer源码

deb http://ppa.launchpad.dev/tangfeng/gstreamer-rk-patch/kylin-desktop v101 main

三、测试命令

我们良好的构建了gstreamer后,需要进行一系列的命令测试,如下:

3.1 kmssink

为了支持kms,例如开机动画等操作,我们可以如下:

gst-launch-1.0 videotestsrc ! kmssink force-modesetting=true fullscreen=true

如有测试视频,可以如下:

gst-play-1.0 -q --no-interactive --audiosink=fakesink --videosink="kmssink force-modesetting=true fullscreen=true" /usr/local/test.mp4

3.2 xvimagesink

简单的测试一个视频的命令如下:

gst-play-1.0 --flags=3 /usr/local/test.mp4

如果需要看到fps值,如下:

GST_DEBUG=fpsdisplaysink:7 gst-launch-1.0 uridecodebin uri=file:///usr/local/test.mp4 ! fpsdisplaysink video-sink="xvimagesink" text-overlay=false signal-fps-measurements=true

如果测试最大fps值,则如下:

GST_DEBUG=fpsdisplaysink:7 gst-launch-1.0 uridecodebin uri=file:///usr/local/test.mp4 ! fpsdisplaysink video-sink="fakesink" text-overlay=false signal-fps-measurements=true sync=false

测试isp摄像头,因为出图是NV12的,所以需要指定:

gst-launch-1.0 v4l2src device=/dev/video-camera0 ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 ! xvimagesink

测试usb摄像头,因为出图是mjpeg的,所以命令如下

gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg ! jpegparse ! mppjpegdec ! xvimagesink sync=false

3.3 rkximagesink

如果需要rkximagesink,如下:

GST_DEBUG=rkximagesink:2 gst-launch-1.0 uridecodebin uri=file:///usr/local/test.mp4 ! fpsdisplaysink video-sink="rkximagesink" text-overlay=false signal-fps-measurements=true

注意,如果使用rkximagesink,请内核提供良好的图层让其分配,否则会提示no window。

image.png