记录:Rk3588播放RTSP视频流有延时和卡顿(CPU性能问题)

2024-08-20 22:28

本文主要是介绍记录:Rk3588播放RTSP视频流有延时和卡顿(CPU性能问题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

        前段时间做项目,花了几天时间开发了一款基于RK3588平台,进行RTSP和RTP的解码软件,接收其他软件发送的UDP控制指令,进行位置、大小、显示的前后顺序、播放链接、参数等动态调整,使用QT+Gstreamer框架开发。

管道:rtspsrc location=rtsp://admin@passpwd:192.9.200.113 port-range=10000-10010 drop-on-latency=true latency=17 ! queue ! decodebin3 ! queue ! glimagesink sync=false

遇到的问题:

        相同的代码,在虚拟机里面,播放VLC推流的RTSP和RTP流,都可以正常播放,没有任何异常,将RTSP视频源换为海康威视带用户名和密码的RTSP视频流连接,在虚拟机内一样可以运行,没有延时和卡顿,但是在公司生产得以RK3588为核心的计算机上,明明使用得是硬解码,依然会出现卡顿,并且延时越来越多。

解决过程记录:

1. 排查是否使用mpp

        最开始,怀疑是没有使用mpp解码,于是指定使用软解:

rtspsrc location=rtsp://admin@passpwd:192.9.200.113 port-range=10000-10010 drop-on-latency=true latency=17 ! queue ! rtph264depay ! h264parse ! avdec_h264 ! queue ! glimagesink sync=false

        发现延时更大,而且显示都有花屏。 改为指定mpp:

rtspsrc location=rtsp://admin@passpwd:192.9.200.113 port-range=10000-10010 drop-on-latency=true latency=17 ! queue ! rtph264depay ! h264parse ! mppvideodec ! queue ! glimagesink sync=false

        发现效果和之前相同。而且查看decodebin的打印信息,会发现确实是自动使用了mpp解码。

        而且这时候比较CPU占用率,发现明显降低了一些,虽然还是有一些CPU占用,大概每个核15%,使用软解,每个核心平均50%。

2. 排查是否是丢包的问题:

        将rtsp改成rtspt,指定使用tcp协议传输,发现效果好了一些,但是依然有稳定的延时,实时性不够。

        使用iperf3 指定使用udp去测试丢包,发现低带宽不丢包,高带宽1-2%丢包。但问题是压缩过后的视频占用的带宽是很低的。而且很难去解决这个udp丢包的问题。

3.查看是否是mppvideodec插件本身的问题

        使用个人使用的RK3588开发板,买的鲁班猫5,其实人家做的还不错,发现延时较低。

4.调节CPU占用和性能

        这是个偶然发现,发现将CPU性能调整为最大的时候,竟然没有延时了!!!

        scaling_frequency.sh -c rk3588  将性能调为最大。

        后来问了做底层的同事,默认出厂,CPU和GPU性能都不是最大的。

        于是当时那个问题算是暂时解决了。

后期偶然发现的问题:

        使用海思的解码器,使用C语言写的代码,同样的组播视频流查看摄像头画面,延时大概120ms,但是我使用RK3588,gstreamer和mpp解码,最好情况也是两百多毫秒,在我们主机上延时可以将近1秒,目前暂时不知道如何解决,此时CPU性能已经调到最大。

这篇关于记录:Rk3588播放RTSP视频流有延时和卡顿(CPU性能问题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091350

相关文章

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

解决JSONField、JsonProperty不生效的问题

《解决JSONField、JsonProperty不生效的问题》:本文主要介绍解决JSONField、JsonProperty不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录jsONField、JsonProperty不生效javascript问题排查总结JSONField

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地