Android Media3 ExoPlayer 如何正确设置缓存大小

这篇具有很好参考价值的文章主要介绍了Android Media3 ExoPlayer 如何正确设置缓存大小。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    在播放音视频时,如何开启 Android Media3 ExoPlayer 缓存,请参考笔者另外一篇文章:

Android Media3 Exoplayer 开启缓存功能

    笔者在设置 ExoPlayer 的缓存大小时,遇到一个非常奇怪的问题,例如,设置最大缓存为 5G:

//5G cache (单位:byte)
long maxCacheSize = 5 * 1024 * 1024 * 1024;

    如果你能一眼看出这行代码的问题,说明读者非常心细且基础知识是比较扎实的。^_^

    这么设置以后,会出现什么问题呢?每次当缓存大小达到在 1G 多一点,就无法再增加了,总是在一个数值附近上下浮动。但是缓存大小设置为 1G(1 * 1024 * 1024 * 1024)不会有问题。

    然后又尝试其他几个缓存数值:

//2G cache
long maxCacheSize = 2 * 1024 * 1024 * 1024;
//3G cache
long maxCacheSize = 3 * 1024 * 1024 * 1024;
//4G cache
long maxCacheSize = 4 * 1024 * 1024 * 1024;

    按上面方式设置后,客户端播放不同视频来进行测试,以便客户端存储更多的缓存,但是从“缓存的文件夹”获取的“全部缓存文件总的大小”都是在零点几K、几M之间徘徊,这些数值表明本地缓存文件数量和大小是不正常的。

    为什么缓存空间设置更大,反而无法正常缓存呢?问题出在哪里呢?其实就出在 JAVA 数值类型的转换上。很简单,只需要在上面的代码后面加上一个字母 L,问题就全部解决了:

//2G cache
long maxCacheSize = 2 * 1024 * 1024 * 1024L;
//3G cache
long maxCacheSize = 3 * 1024 * 1024 * 1024L;
//4G cache
long maxCacheSize = 4 * 1024 * 1024 * 1024L;
//5G cache
long maxCacheSize = 5 * 1024 * 1024 * 1024L;

    如果不加上这个后缀,这几个整数相乘的结果会作为整形数值保存在在内存中,但是整数是有数值范围的:

基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)
最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)

    上面设置的缓存大小,如果超过了 int 整数的数值范围就会发生溢出,最后的结果就会与我们预设的值不一致。反之,如果加上 L 后缀才是 long 类型的,而上面的数值是在 long 数值范围之内的,就不会发生溢出。那么不加 L,上面四个 test 值发生溢出后最终得到的值是什么呢?

long test2 = 2 * 1024 * 1024 * 1024;  //-2147483648
long test3 = 3 * 1024 * 1024 * 1024;  //-1073741824
long test4 = 4 * 1024 * 1024 * 1024;  //0
long test5 =  5 * 1024 * 1024 * 1024; //1073741824

//控制台输出值:test2: -2147483648 - test 3: -1073741824 - test 4: 0 - test 5: 1073741824
CLog.d("test",  "test2: " + test2 + " - test 3: " + test3 + " - test 4: " + test4 + " - test 5: " + test5);

    可以观察到,上面的赋值发生溢出后得到实际的数值,要不变成负数、零、或者变小了,这就解释了为什么会出现上面那个奇怪问题。这里抛砖引玉,其他类似播放器的缓存大小设置可能也会遇到同样的问题,所以需要小心对待,避免落入隐蔽的陷阱。文章来源地址https://www.toymoban.com/news/detail-787255.html

到了这里,关于Android Media3 ExoPlayer 如何正确设置缓存大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android --- logcat 打印日志、设置缓存大小、过滤等

    一、示例: Android log 通过系统属性 persist.log.tag 和 persist.log.tag.ABC  决定相关log的指定等级及以上才可以写入,ABC是指某个tag,TAG长度不能太长。 二、设置系统属性: 1.设置log日志缓存大小 2.使能所有log tag 输出,设置所有log V等级及以上才能输出 3.禁止所有log tag 的输出,设置

    2023年04月09日
    浏览(45)
  • Android ExoPlayer2播放m3u8视频设置Cookie

    支持m3u8格式视频,同时服务端做了加密防止视频被盗。 服务端需要客户端这边再请求.m3u8地址时带上3个Cookie参数,分别是CloudFront-Policy,CloudFront-Signature,CloudFront-Key-Pair-Id。 本地使用了GSYVideoPlayer作为视频播放器,如何设置Cookie是个问题,原本以为直接将待传入的三个Cookie直接

    2024年01月16日
    浏览(55)
  • Flutter extended_image库设置内存缓存区大小与缓存图片数

        ExtendedImage `ExtendedImage` 是一个Flutter库,用于提供高级图片加载和显示功能。这个库使用了 `image` 包来进行图片的加载和缓存。如果你想修改缓存大小,你可以通过修改`ImageCache`的配置来实现。 1. 获取`ImageCache`实例:    你可以通过`PaintingBinding.instance.imageCache`获取到全局的

    2024年02月08日
    浏览(37)
  • Android布局字体大小不根据用户设置字体大小变化而变化

    先获取用户设置字体配置 fontSize 正常是1 大的是1.2 小的是 0.9 不一定就是这个值 差不多就是这样的 然后设置字体大小,如果像设置16sp 即可

    2024年01月25日
    浏览(50)
  • Android 设置TabLayout选中后的字体、大小、颜色等设置

    初始化 1)在xml中设置颜色变化 其中,tabTextColor未未选中时的颜色,tabSelectedTextColor为选中时的颜色。 2)对已定义好的TabLayout进行处理。 在监听器中设置样式 在选中时或未选中时,获取已设置的TextView,然后可以去设置需要的大小、加粗等变化。 我做了一个简单的封装,这

    2024年02月12日
    浏览(38)
  • Android 播放视频之ExoPlayer

    在上一篇中,我们了解了系统自带的 VideoView 来播放视频,但其支持的视频格式偏少,我们需要其他的视频播放器。 ExoPlayer 是Google的开源的应用级媒体播放器项目,支持多种视频格式和流媒体播放,GitHub地址。 导入 ExoPlayer 在布局文件里添加 StyledPlayerView 在 Activity 里面播放

    2024年02月15日
    浏览(49)
  • 如何实现设备组缓存的正确清除?——基于心跳请求和心跳响应的解决方案

    在设备组关闭后,如何保证缓存中的设备组信息能够正确清除?本文将介绍如何通过前端实现设备组心跳检测和缓存清除,以及通过后端实现缓存清除的逻辑来解决该问题。我们还将详细讨论如何利用心跳请求和心跳响应来实现设备组缓存的正确清除,并提供基于Vue和Spring

    2024年02月07日
    浏览(48)
  • Android学习笔记(四):TextView 设置内容、字体大小、颜色、背景

             如图所示,我们可以在Android手机中设置文本字体的大小、颜色,以及背景颜色。         我们前面章节已经提到过,如何利用TextView模块显示文本内容,在这里再简单提及一次吧。         想必,通过前面的学习,你已经能够读懂以上代码的含义,并且,能够在对

    2024年02月05日
    浏览(84)
  • 腾讯云域名如何设置正确的dns

    例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大) https://console.cloud.tencent.com/domain

    2024年02月11日
    浏览(32)
  • Android 动态代码设置view宽高参数,运行后UI大小没有改变问题

         日常开发中遇到一个需求,就是根据业务逻辑,动态改变一个view控件的大小。这种需求也是比较常见的,但是小白比较容易遇到一个小问题,就是代码重新设置了view的宽高大小,运行后发现view没有发生改变。          如下图,1,横屏 2,正方形,3,竖屏      

    2024年02月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包