首页 > 其他分享 >gstearmer学习

gstearmer学习

时间:2023-05-13 17:24:50浏览次数:50  
标签:kmssink 1.0 gst launch -- 学习 video gstearmer

极限性能

echo performance | tee $(find /sys |grep governor$) # 打开性能模式
export KMSSINK_DISABLE_VSYNC=1 #关闭vsync
echo 400000000 > sys/kernel/debug/clk/aclk_rkvdec/clk_rate # 提高解码频率
echo 0x100 > /sys/module/rk_vcodec/parameters/mpp_dev_debug # 打开mpp解码时间

sink方式

可以通过
gst-inspect-1.0 kmssink
查询sink方式 支持的命令

xvimagesink

xvimagesink 需要有硬件加速
实现多屏:

kmssink

使用AFBC格式播放:
export GST_MPP_VIDEODEC_DEFAULT_ARM_AFBC=1
GST_DEBUG=fpsdisplaysink:5 gst-play-1.0 GUGUDAN-Wonderland.2160p.UHDTV.H265.ts --flags=3 --use-playbin3 --videosink="fpsdisplaysink text-overlay=false video-sink=\"kmssink plane-id=71\" sync=false fps-update-interval=10000 "
注:plane-id使用对应的cluster层
fpsdisplaysink 打开帧率打印
text-overlay=false 关闭字幕

普通播放:
gst-play-1.0 1.mp4 --flags=3 --use-playbin3 --videosink=kmssink plane-id=65

gst-play-1.0 oem/SampleVideo_1280x720_5mb.mp4 --flags=3 --videosink="kmssink connector-id=154"
指定connector-id

GST_DEBUG=kmssink:5 gst-launch-1.0 v4l2src device=/dev/video20 ! queue ! kmssink

实现多屏:

waylandsink

防止丢帧:
配置文件增加 WAYLANDSINK_SYNC_FRAME
export GST_DEBUG=*wayland*:10
gst-play-1.0 /test.mp4 --videosink="waylandsink sync=false" --a udiosink=fakesink 2>&1|grep drop -i 0:00:00.724004250 1064 0x7f8c003060 LOG waylandsink gstwaylandsink.c:918:gst_wayland_sink_show_frame:<waylandsink0> buffer 0x7fa01b9890 dropped (redraw pending)
检查:源文件:buildroot/output/rockchip_px30_64/build/gst1-plugins-bad-1.14.4/ext/wayland# grep WAYLANDSINK_SYNC_FRAME * gstwaylandsink.c: if (g_getenv ("WAYLANDSINK_SYNC_FRAME")) { 库:[root@rk3399:/]# grep WAYLANDSINK_SYNC_FRAME /usr/lib/gstreamer-1.0/libgstwaylandsink.so WAYLANDSINK_SYNC_FRAME
实现多屏:

v4l2src

gst-launch-1.0 -v v4l2src ! 'video/x-raw,format=NV12' ! mpph264enc ! filesink location="bla.h264"

gst-launch-1.0 v4l2src ! video/x-raw,format=NV12,width=1920,height=1080 ! rkximagesink
gst-launch-1.0 v4l2src ! video/x-raw,format=RGB3,width=3840,height=2160 ! rkximagesink

gst-launch-1.0 v4l2src device=/dev/video17 ! video/x-raw,format=RGB3,width=1920, height=1080 ! rkximagesink

gst-launch-1.0 v4l2src device=/dev/video20 ! queue ! kmssink

零零碎碎

videoscale是硬件加速,videocrop是软件。较新的gstreamer-rockchip的解码插件支持硬件crop和缩放,比如:
gst-launch-1.0 videotestsrc ! mpph264enc ! h264parse ! mppvideodec crop-rectangle='<100,100,100,100>' width=400 height=400 ! waylandsink处理顺序是先缩放再裁减

gstreamer里面的crop是可以通过crop meta进行in place处理,即直接传递裁减区域信息给最终sink端,由sink端处理裁减(kmssink的话是设置drm的src显示区域)。但是in place处理也需求videocrop直连sink。此外kmssink也支持直接配置目标显示区域render-rectangle进行硬件缩放,但是会受到高宽比限制。所以也可以:
buildroot更新到:https://github.com/JeffyCN/rockchip_mirrors/commit/e7c6827a78434aac1aadf95d763bfc318c3b8e5c
gst-launch-1.0 filesrc location=/FPS_test_1080p60_L4.2.mkv ! matroskademux ! decodebin ! videocrop top=0 bottom=0 left=0 right=960 ! kmssink render-rectangle='<0,0,1920,1080>' force-aspect-ratio=false

jerkiness一般是指播放抖动(偶尔丢帧),卡顿是laggy,闪烁是blink和flick。

硬件加速也是存在耗时的,如其他issue回复,产生耗时的plugin前后最好是加上缓冲队列queue进行异步

确认硬件加速可以通过log开关:
export GST_DEBUG=videoflip:5,video-converter:5
gst-launch-1.0 ... ! videoscale ! video/x-raw, width=500, height=500 ! ...0:00:02.974151424 13319 0x3f640300 DEBUG video-converter video-converter.c:2862:video_converter_try_rga: converted with RGA

[root@RK356X:/]# GST_DEBUG=mppdec:5 gst-launch-1.0 filesrc location=/test.mp4 ! qtdemux ! h264parse ! mppvideodec crop-rectangle='<0,0,960,1080>' width=3840 height=1080 ! queue ! kmssink 2>&1|grep crop
0:00:01.271583086   778     0x3e9ebde0 DEBUG                 mppdec gstmppdec.c:688:gst_mpp_dec_get_gst_buffer:<mppvideodec0> cropping <0,0,960,1080> within <0,0,3840,1080>

[root@RK356X:/]# tail -10 /sys/kernel/debug/dri/0/summary
        win_id: 3
        format: NV12 little-endian (0x3231564e) SDR[0] color_space[0] glb_alpha[0xff
]
        rotate: xmirror: 0 ymirror: 0 rotate_90: 0 rotate_270: 0
        csc: y2r[1] r2y[0] csc mode[1]
        zpos: 3
        src: pos[0, 0] rect[960 x 1080] 《--- crop到960
        dst: pos[480, 0] rect[960 x 1080]
        buf[0]: addr: 0x00000000040b1000 pitch: 3840 offset: 0 《--- 3840
        buf[1]: addr: 0x00000000040b1000 pitch: 3840 offset: 4147200
Video Port1: DISABLED

[root@rk3399:/]# GST_DEBUG=mppdec:5 gst-launch-1.0 filesrc location=/test.mp4 !qtdemux ! h264parse ! mppvideodec crop-rectangle='<0,0,960,1080>' width=3840 height=1080 ! queue ! kmssink 2>&1|grep crop
0:00:01.085029657  1428      0x2fd6a40 DEBUG                 mppdec gstmppdec.c:678:gst_mpp_dec_get_gst_buffer:<mppvideodec0> cropping <0,0,960,1080> within <0,0,3840,1080>
[root@rk3399:/]# cat /sys/kernel/debug/dri/0/summary
VOP [ff900000.vop]: ACTIVE
    Connector: HDMI-A
        overlay_mode[0] bus_format[100a] output_mode[f] color_space[0]
    Display mode: 1920x1080p60
        clk[148500] real_clk[148500] type[48] flag[5]
        H: 1920 2008 2052 2200
        V: 1080 1084 1089 1125
    win0-0: ACTIVE
        format: XR24 little-endian (0x34325258) SDR[0] color_space[0] 《----- 主图层
        csc: y2r[0] r2r[0] r2y[0] csc mode[0]
        zpos: 0
        src: pos[0x0] rect[1920x1080]
        dst: pos[0x0] rect[1920x1080]
        buf[0]: addr: 0x0000000008c2f000 pitch: 7680 offset: 0
    win1-0: ACTIVE
        format: NV12 little-endian (0x3231564e) SDR[0] color_space[0] 《----- 视频图层
        csc: y2r[1] r2r[0] r2y[0] csc mode[1]
        zpos: 1
        src: pos[0x0] rect[960x1080]              《---裁减到960x1080
        dst: pos[480x0] rect[960x1080]           《-----显示到480,0
        buf[0]: addr: 0x000000007e774000 pitch: 3840 offset: 0 《---- 原图是缩放到3840宽
        buf[1]: addr: 0x000000007e774000 pitch: 3840 offset: 4147200

参考文档

参考文档:
博主文章 http://blog.iotwrt.com/media/2017/11/17/gstreamer-study/
官网 https://gstreamer.freedesktop.org/documentation/opengl/?gi-language=c
gstreamer官网教程学习 https://blog.csdn.net/u010168781/article/details/105750991
下载地址 git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.git

标签:kmssink,1.0,gst,launch,--,学习,video,gstearmer
From: https://www.cnblogs.com/Maxwell-czz/p/17397726.html

相关文章

  • PMP 学习笔记(一)
       最近在准备PMP考试,正在看《PMBOK第六版》,虽然八百多页的书看着都慌,但其实先掌握大纲,然后粗读,做一波题,再细读有针对性的读,结合平时项目经验,目前来说,还不算特别难理解。  (当然,现在才刚刚开始,不知道后面会不会被打脸......
  • 学习日记——CSS高级选择器
    1.层次选择器①后代选择器EF:选择匹配的F元素,且匹配的F元素被包含在匹配的E元素内②子选择器E>F:选择匹配的F元素,且匹配的F元素是匹配的E元素的子元素③相邻兄弟选择器E+F:选择匹配的F元素,且匹配的F元素紧位于匹配的E元素后面④通用兄弟选择器E~F:选择匹配的F元素,且位于匹配......
  • [学习笔记+做题记录] 扫描线
    一、扫描线扫描线一般用于图形类的计算,用数据结构辅助在图形上扫来扫去,比如计算矩形面积并,周长并,二位数点等问题。二、Atlantis问题/矩形面积并https://www.luogu.com.cn/problem/P5490先挂张图(明显是OI-wiki的):算法原理很简单,就是扫描一下每一个纵坐标\(y\)(矩阵的边界......
  • 野火Linux uboot编译/烧录/移植学习
    首先,要说野火的linux驱动的pdf做得不是很好,代码内容匆匆略过。后来才发现野火有专门的网页,这是驱动部分的章节:https://doc.embedfire.com/lubancat/build_and_deploy/zh/latest/index.html代码都可以下载!!!预备:添加编译器相关①学习:立即生效添加交叉工具链,需要修改/etc/profi......
  • Python学习之五_字符串处理生成查询SQL
    Python学习之五_字符串处理生成查询SQL前言昨天想给同事讲解一下获取查询部分表核心列信息的SQL方法也写好了一个简单文档.但是感觉不是很优雅.最近两三天晚上一直在学习Python.想将昨天的文档处理成一个工具的方式.将查询SQL展示出来.然后再由同事手工检查确认.增加时......
  • 近期学习总结
    近期学习总结学习中遇到的问题1写代码的速度太慢2写的代码不够简洁3写的代码太少,缺乏经验未来的学习计划1学好C语言,练好代码能力2能够学好嵌入式,大三能完成一个嵌入式项目3打好高数基础个人未来规划在校期间,程序设计,电路设计要有一定......
  • 初始c语言的学习
    1、计算机的发展历史,C语言是与计算机沟通的语言,计算机只能够识别二进制,也即正负电(1,0)。2、空项目->源文件,右键新建项目->创建一个新的项目。3、头文件#include<stdio.h>主函数intmain(){(这里开始你的代码)return0;}4、第一个库函数printf("%d\n",xxx);在此介绍我所了解的库函......
  • linux学习day02
    cd的使用:. 当前目录 .. 上一层目录 ~ 当前用户家目录  -前一个工作目录(前一级)路径相对路径:相对于自己的目标文件的位置,而建立出的目录路径,当所处位置不同时,相对路径就会发生变化。绝对路径:文件在硬盘上真正存在的路径,任何人引用时所有的路径都是一样的用户组......
  • 免费且神奇的知识学习和动手模拟网站大全 All In One
    免费且神奇的知识学习和动手模拟网站大全AllInOnefreeonlineawesomelearingHTML5webistesPhETPhET:Freeonlinephysics,chemistry,biology,earthscienceandmathsimulationsPhET:免费在线物理、化学、生物学、地球科学和数学模拟https://phet.colorado.edu/......
  • MySQL学习日志四,数据表的类型
    --关于数据库引擎/*INNODB默认使用MYISAM早些年使用*/区别MYISAMINNODB事务支持不支持支持数据行锁定不支持支持外键约束不支持支持全文索引支持不支持表空间大小较小较大,约为MYISAM2倍常规使用操作:MYISAM节约空间,速度较快INNOD......