记录: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

相关文章

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

nginx中端口无权限的问题解决

《nginx中端口无权限的问题解决》当Nginx日志报错bind()to80failed(13:Permissiondenied)时,这通常是由于权限不足导致Nginx无法绑定到80端口,下面就来... 目录一、问题原因分析二、解决方案1. 以 root 权限运行 Nginx(不推荐)2. 为 Nginx

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例