当前位置: 首页 > news >正文

uni.createInnerAudioContext踩坑duration在真机环境一直为0

解决 uni.createInnerAudioContextduration 在真机环境一直为 0 的问题

在使用 uni.createInnerAudioContext 播放音频时,开发者可能会遇到以下问题:

  1. duration 在真机环境中一直为 0:即使音频文件是正常的,duration 属性也无法正确获取音频的时长。
  2. 音频实例未放到全局作用域:导致音频无法暂停、销毁等问题。
  3. 音频播放状态管理混乱:播放和暂停逻辑不一致,可能会出现多次播放或无法停止的问题。

本文将详细分析这些问题的原因,并提供解决方案。


问题 1:duration 在真机环境中一直为 0

原因分析

uni.createInnerAudioContextduration 属性只有在音频文件可以播放时才会被正确赋值。如果音频文件未加载完成或加载失败,duration 将保持为 0。在真机环境中,音频加载速度较慢,可能需要一定时间才能获取到正确的时长。

解决方案

使用 onCanplay 事件监听音频文件是否可以播放,使用onCanplay之前先播放play(),并通过定时器轮询 duration 的值,直到其不为 0。

示例代码
let audio = uni.createInnerAudioContext();
audio.src = "音频文件路径"; // 设置音频文件路径
audio.play(); // 播放音频以便获取时长
audio.volume = 0; // 设置音量为 0,避免播放声音
audio.onCanplay(() => {let intervalID = setInterval(() => {if (audio.duration !== 0) {clearInterval(intervalID); 

相关文章:

  • PostgreSQL 通过 copy 命令导入几何数据 及 通过 CopyManager.copyIn() 导入几何数据
  • PH热榜 | 2025-04-18
  • 视频孪生技术赋能城市内涝灾害智慧化建设
  • 直播人脸美型核心技术详解:卷积神经网络与图像增强在美颜SDK中的应用
  • 什么是爬虫?——从技术原理到现实应用的全面解析
  • STM32F7安全库各版本发布内容的表格化中文总结
  • C++——C++11常用语法总结
  • CentOS 7系统yum报错解决方案(CentOS 7官方EOL问题修复)
  • 使用droidrun库实现AI控制安卓手机
  • Python读取Excel表数据转为JSON格式文件(详细优化版)
  • 软件研发技术团队管理规范
  • 怎么隐藏QTabWidget内的页面
  • 如何校验一个字符串是否是可以正确序列化的JSON字符串呢?
  • 优恩-具备浪涌保护功能的固态继电器UNRD0610-无触点开关器件‌
  • 理解和实现RESTful API的最佳实践
  • ros3d.js中动态改变pointCloud2点云数据的参数
  • vue2.6.12 安装babel 以使用 可选链 ?. 和空值合并 ??
  • 树莓派练习
  • 曲棍球·棒球1号位
  • Linux | I.MX6ULL 内核的编译(13)
  • 上千游客深夜滞留张家界大喊退票?当地通报情况并致歉
  • 人民日报今日谈:以青春之我,赴时代之约
  • 浙江“胖都来”开业多位明星祝贺,“胖东来”称已取证投诉,律师:碰瓷侵权
  • 三亚再回应游客骑摩托艇出海遇暴雨:俱乐部未配备足额向导人员,停业整改
  • 奈雪的茶叫停“能喝奶茶就不要喝水”宣传,当地市监称不要误导消费者
  • 胸外科专家查出肺多发结节,说了一个可怕的事实……