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

mp4track录制,WriteTrailer后仍然占用内存 #104

Open
klk2 opened this issue Nov 16, 2023 · 5 comments
Open

mp4track录制,WriteTrailer后仍然占用内存 #104

klk2 opened this issue Nov 16, 2023 · 5 comments

Comments

@klk2
Copy link

klk2 commented Nov 16, 2023

我使用go-mp4录制H264的MP4文件,录制结束后正常关闭的文件流,也成功调用了WriteTrailer。

但多次录制后发现存在内存泄露的问题,通过pprof工具查看。每次录制结束后,go-mp4的内存占用逐步增加。

录制1分钟后:

Showing top 10 nodes out of 32
      flat  flat%   sum%        cum   cum%
 1705.94kB 22.95% 22.95%  1705.94kB 22.95%  github.com/yapingcat/gomedia/go-mp4.(*mp4track).addSampleEntry (inline)
 1621.53kB 21.82% 44.77%  3327.47kB 44.77%  github.com/yapingcat/gomedia/go-mp4.(*mp4track).writeH264.func1
 1539.25kB 20.71% 65.48%  1539.25kB 20.71%  regexp/syntax.(*compiler).inst
  514.63kB  6.92% 72.40%   514.63kB  6.92%  math/rand.newSource

list 定位到了go-mp4/mp4track.go文件

1.11MB    352:        track.addSampleEntry(entry)
1.58MB    365:        track.lastSample.cache = append(track.lastSample.cache, codec.ConvertAnnexBToAVCC(nalu)...)

多次录制后(累计20分钟):

howing top 10 nodes out of 44
      flat  flat%   sum%        cum   cum%
 6411.17kB 39.54% 39.54%  6411.17kB 39.54%  github.com/yapingcat/gomedia/go-mp4.(*mp4track).addSampleEntry (inline)
 2736.07kB 16.87% 56.41%  9147.24kB 56.41%  github.com/yapingcat/gomedia/go-mp4.(*mp4track).writeH264.func1
 1737.01kB 10.71% 67.12%  1737.01kB 10.71%  github.com/yapingcat/gomedia/go-mp4.(*mp4track).makeStblTable
 1539.25kB  9.49% 76.61%  1539.25kB  9.49%  regexp/syntax.(*compiler).inst
  698.24kB  4.31% 80.92%   698.24kB  4.31%  github.com/yapingcat/gomedia/go-mp4.(*BasicBox).Encode

list 定位:

6.26MB    352:        track.addSampleEntry(entry)
2.67MB    365:        track.lastSample.cache = append(track.lastSample.cache, codec.ConvertAnnexBToAVCC(nalu)...)
@yapingcat
Copy link
Owner

yapingcat commented Nov 16, 2023

多次录制用的是同一个Movmuxer 生成MP4文件?

@klk2
Copy link
Author

klk2 commented Nov 17, 2023

多次录制用的是同一个Movmuxer 生成MP4文件?

是的,同一个工具类,每新的录制new一次。

@yapingcat
Copy link
Owner

yapingcat commented Nov 17, 2023

多次录制用的是同一个Movmuxer 生成MP4文件?

是的,同一个工具类,每新的录制new一次。

这个代码看起来没什么问题,只要Movmuxer对象 被gc回收,这两行代码所产生的内存也会被回收的

@yapingcat
Copy link
Owner

yapingcat commented Nov 17, 2023

6.26MB 352: track.addSampleEntry(entry)

不同时长的mp4文件这些内存也是不一样,时长越长 占用内存越大

2.67MB 365: track.lastSample.cache = append(track.lastSample.cache, codec.ConvertAnnexBToAVCC(nalu)...)

这个内存和帧数据大小有关

@klk2
Copy link
Author

klk2 commented Nov 20, 2023

非常感谢,通过手动gc或设为nil都能解决。

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

No branches or pull requests

2 participants