z***@163.com
z***@163.com
  • 发布:2022-03-04 17:11
  • 更新:2022-03-08 12:30
  • 阅读:1581

【报Bug】关于uni.createInnerAudioContext(),在ios和安卓上的两种情况

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 10

HBuilderX类型: 正式

HBuilderX版本号: 3.3.11

手机系统: iOS

手机系统版本号: iOS 15

手机厂商: 苹果

手机机型: iPhoneX

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

var innerAudioContext = this._audioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = false;
innerAudioContext.src = 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/audio/music.mp3';

            //..音频可以播放 取音频时长并计算  
            innerAudioContext.onCanplay( res => {  
                this.duration = this.durationCompute(innerAudioContext.duration)  
                console.log('可以播放了', this.duration)  
            })  
            console.log(JSON.stringify(innerAudioContext))  
            innerAudioContext.onPlay(() => {  
                console.log('开始播放');  
            });

操作步骤:

创建音频,获取duration

预期结果:

ios可以在创建音频的时候监听到onCanplay方法

实际结果:

ios无法在创建音频的时候监听到onCanplay方法

bug描述:

主要想实现在渲染出播放控件的时候就获取到总时长
onCanplay事件在安卓上是渲染完播放就执行进入,能直接拿到duration
但是在ios上,创建uni.createInnerAudioContext()后,不会直接执行onCanplay,当点击播放的时候才会监听到onCanplay事件,就没办法第一时间获取到duration,为什么ios和安卓会有这种区别,那ios需要怎么拿到duration呢?

2022-03-04 17:11 负责人:DCloud_iOS_XHY 分享
已邀请:
FullStack

FullStack - 【插件开发】【专治疑难杂症】【ios上架、马甲包、白包、过审、已成功上架过几百个】【多款插件已上架:https://ext.dcloud.net.cn/publisher?id=22130】【非诚勿扰】QQ:543610866

已验证

  • z***@163.com (作者)

    啥时候能更新?

    2022-03-07 09:16

  • 2***@qq.com

    回复 z***@163.com: 你好,后续官方有解决吗,我现在也遇到这个问题了

    2022-12-30 14:18

DCloud_iOS_XHY

DCloud_iOS_XHY

这不是问题,iOS端只有触发开始播放的时候才会加载音频数据,平台差异问题,你们应该服务端返回音频的时长,而不是靠播放器的 duration 来实现

  • 3***@qq.com

    请问一下 我后端给我返回的src 安卓上可以拿到duration 换到ios上却拿不到,随后我从网上找了别的地址试验,ios也可以拿到。再将可以拿到duration的音频下载由我后端传回,又拿不到了。是否我后端传回的src不合法,请问怎么调整为合法的src

    2022-11-03 14:47

该问题目前已经被锁定, 无法添加新回复