美文网首页
iOS AVPlayer视频播放内存爆增

iOS AVPlayer视频播放内存爆增

作者: 東玖零 | 来源:发表于2023-12-03 11:15 被阅读0次

背景:当下短视频如此流行,老板也想把公司放在抖音的一些视频融入到App中,于是就开始了接下来的探索。

1、首先去github搜索仿抖音的Demo下载过来,运行调试调试,效果也挺好,于是就开始了搬代码。

2、花了几天时间,代码也搬完了,自己的App里也可以播放了,再就是更换视频源。

3、找到几个测试视频上传到阿里云服务器,生成链接,把一批视频链接放到一个接口中返回,调试好下拉刷新和上拉加载,至此简单的滑动页面视频播放搞定了。

4、测试过程中发现,这个Demo里视频没有进度,就想着加一个可以拖动的进度条,发现拖动进度条不准确,代码里用的是原生AVPlayer实现的,于是在网上搜索AVPlayer进度设置不准确,找到了相关答案,要使用以下方法。

解决方案:

int32_t timeScale = self.player.currentItem.asset.duration.timescale;
CMTime time = CMTimeMakeWithSeconds(77.000000, timeScale);
[self.player seekToTime:time toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];

5、测试中我还遇到一个现象:

视频放着放着,手机调试就断开了,Xcode还弹出了一个提示!我也没仔细看就给关了,以为是我的数据线没插好,手给碰松动了就断开调试了。

当我不连Xcode测试时发现,玩一会视频播放,放着放着App就崩溃退出了,意识到视频播放有问题,就连着手机再次调试,连着几次都是手机调试就断开了,Xcode还弹出了一个提示,终于还是翻译了一下提示内容,大概意思是使用的内存过大中断调试!

于是我就关注了一下调试时的内存使用情况,从打开App使用了58M一直很稳定,直到打开视频播放页面,内存就开始爆涨,很快内存就是占了1G多,不多一会App就崩溃了,简单的认为原生AVPlayer是有问题的,存在严重的内存泄漏!

几经调试折腾,忽然发现使用网络下载也达到了40M/s,原因竟然是在下载视频文件比较大,找到视频源发现,确实有上G的视频,源代码中也有视频下载到本地的代码。

于是在网上搜索“AVPlayer视频内存爆增”,找到了几个关于AVPlayer的文章,发现AVPlayer的使用并不是简单的放个视频源,就开始下载播放这么简单。

就我遇到的播放一会儿就崩溃的现象的原因是:

一股脑把上G的视频都下载到内存并写到本地,内存不够用崩溃了。

还有视频下载在本地了,手动拖进度条,播放一会儿也崩溃的原因:

一股脑把上G的视频从硬盘读到内存中,内存不够用崩溃了。

都是内存不够用,解决方法就是把没有下载的视频,视频分段下载播放,已下载的需要分段加载。

虽然说起来简单,但代码实现起来确很困难,至此算是视频播放摸到一点点边儿了,简书上有个实现的大佬,说是花了2个月才搞定,写的比较全:AVPlayer边下边播

从有做视频的想法----->找相关开源代码----->修改集成到自己的项目----->发现崩溃现象----->找到问题的根源----->分析出解决方案----->写代码解决问题。

上述的过程从无到有,从0到1真的是很难,根不上技术发展节凑就要被淘汰,记录一点历程,希望给入门做视频的同学一丢丢提示。

最终我们选择站在巨人的肩膀上,选择阿里云点播,集成他们的SDK。

相关文章

网友评论

      本文标题:iOS AVPlayer视频播放内存爆增

      本文链接:https://www.haomeiwen.com/subject/iymkgdtx.html