Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rtsp内存泄露 #195

Open
cnyinfei opened this issue Apr 16, 2024 · 17 comments
Open

rtsp内存泄露 #195

cnyinfei opened this issue Apr 16, 2024 · 17 comments
Assignees

Comments

@cnyinfei
Copy link

cnyinfei commented Apr 16, 2024

0.26版本的mdk-examples和mdk-sdk,使用自带的glfwplay和qmdkplay连续播放摄像头rtsp流,发现过一段时间后内存稳步增长。为了加大测试力度,我基于libqtmdk构造了一个qt测试程序,同时拉流32路摄像头主码流,经过大约10小时左右,所消耗内存增长到约16GB。

@wang-bin
Copy link
Owner

系统环境、解码设置等信息呢

@cnyinfei
Copy link
Author

系统Windows10 22H2,16GB内存,i7-10700,无独显,使用的是CPU核显。
qmdkplay是用示例代码直接编译的,代码未做修改;
glfwplay是使用的sdk压缩包里面预编译好的二进制执行文件;
两者都未指定解码设置,应是使用的默认设置。
摄像头为局域网海康枪机。

@wang-bin
Copy link
Owner

glfwplay命令行参数是怎么样的?

@cnyinfei
Copy link
Author

cnyinfei commented Apr 16, 2024

glfwplay命令行参数是怎么样的?

.\glfwplay rtsp://...
.\qmdkplay rtsp://...

除了rtsp地址外没有附带其他参数。qmdkplay使用Qt5.14.2 mingw64 环境编译。

@feiyangqingyun
Copy link

你这内存增长有点吓人,明天我开16路试试

@wang-bin
Copy link
Owner

本地视频循环播了20小时内存没涨。是rtsp才能复现?

@feiyangqingyun
Copy link

我测试了16路1080p rtsp,目测有泄露,10分钟大概涨了约50mb左右

@cnyinfei
Copy link
Author

我昨天测试了两个公网的rtsp,没有重现,目前看还只在摄像机的rtsp流上出现这个问题。包括从摄像机拉流到流媒体代理出来的也有问题。

@wang-bin wang-bin self-assigned this Apr 18, 2024
@wang-bin
Copy link
Owner

linux上用asan跑没发现有泄漏。windows上rtsp确实内存一直在涨,还没用工具查哪里泄漏的。

@wang-bin wang-bin added the bug Something isn't working label Apr 18, 2024
@wang-bin
Copy link
Owner

大概率是ffmpeg的bug,用glfwplay -avformat.rtsp_transport tcp rtsp://....就没问题,默认是udp会泄漏。我用mpv也验证了下,mpv默认用tcp没泄漏,用mpv --rtsp_transport=udp就会泄漏。最近有人提交了个udp相关的补丁,不过我没验证,好像也没看到相关日志,所以不确定这个补丁是不是能修复这个泄漏问题

@wang-bin wang-bin added not our bug and removed bug Something isn't working labels Apr 18, 2024
@cnyinfei
Copy link
Author

我这边加上-avformat.rtsp_transport tcp 验证一下

@wang-bin
Copy link
Owner

本地用zlmediakit+ffmpeg推rtsp,mpv和glfwplay(tcp)同时播了一天后卡得完全不能看了,两个都是音视频不同步,我这边缓存了1G多的包没解码,mpv也落后了13小时以上但是包丢弃了,所以你碰到的可能不是泄漏,其他地方出问题了. glfwplay加参数-buffer_drop可以丢弃落后的包,直播流推荐加这个参数

>53832952 07:36:07.2/13:14:21 cache 0v 0.4s/1135755KB 93324KB/s diff |-26465739|>4ms update 67.1ms 7.4fps draw 1/2 +12153474ms drop 29652926
>53833502 07:36:10.6/13:14:21 cache 2v 0.1s/1135643KB 311KB/s diff |-26462832|>4ms update 62.8ms 8.1fps draw 0/1 +12155537ms drop 2965807356

mpv

(+) Video --vid=1 (h264 1920x1080 24.000fps)
 (+) Audio --aid=1 (aac 6ch 48000Hz)
File tags:
 Title: Streamed by ZLMediaKit(git hash:68ea546/2022-11-29T11:33:16+08:00,branch:master,build time:2022-11-29T14:46:19)
AO: [wasapi] 48000Hz 5.1 6ch float
VO: [gpu] 1920x1080 yuv420p
Exiting... (Quit)
AV: 07:57:45 / 21:13:07 (38%) A-V:47713.908 ct:11673.879 Dropped: 629231

@cnyinfei
Copy link
Author

很有可能是你说的这个问题了,我昨天测试了一下,用glfwplay直接播放rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid没有问题,用ZLMediaKit代理转一次以后,在有一台电脑上就会内存疯涨,其他摄像头也是经过ZLMediaKit代理后播放就有问题。但用vlc和Qt自带播放器组件是OK的。
今天我再验证一下你的解决方案。
这个参数也同样适用于libqtmdk吗?

@wang-bin
Copy link
Owner

@cnyinfei
Copy link
Author

我这里测试drop buffer参数对glfwplay无效,setBufferRange对qmkdplay无效,内存增长问题仍然存在。

@wang-bin
Copy link
Owner

你试下mpv,可能也会泄漏,如果是的话那就不是我这边的bug了
media-kit/media-kit#776 (comment)

@wang-bin wang-bin changed the title 内存泄露 rtsp内存泄露 Jun 1, 2024
@feiyangqingyun
Copy link

王总这个问题在0.28版本,有没有搞定。我有个朋友也说rtsp存在比较大的泄露

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants