斑马披萨
斑马披萨
  • 发布:2022-01-13 14:16
  • 更新:2022-04-11 13:34
  • 阅读:907

【报Bug】createInnerAudioContext 访问https音频 报MediaError -99

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 10 专业版 21H2 19044.1415

HBuilderX类型: 正式

HBuilderX版本号: 3.3.5

手机系统: Android

手机系统版本号: Android 7.1.1

手机厂商: 想米收银机

手机机型: MiPOS101-rk312x

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

App下载地址或H5⽹址: https://vkceyugu.cdn.bspapp.com/VKCEYUGU-5ea5dd5e-248c-4a5a-9a9e-5ccb8807dec1/fb154491-debe-453d-9f1b-38efa7c57b19.apk

操作步骤:
var music = uni.createInnerAudioContext()  
                    music.autoplay = true  
                    music.src ="https://www.zebrabox.com.cn/addons/zh_cjdianc/call/write_off_success.mp3"  
                    music.onError((res) => {  
                        console.log(res.errMsg);  
                        console.log(res.errCode);  
                        music.destroy(); //发生错误后,销毁实例    
                    });  
                    music.onPause(function() {  
                        console.log('end');  
                        music.destroy(); //这里是播放暂停后,销毁实例    
                    });  
                    music.onStop(function() {  
                        console.log('stop');  
                        music.destroy(); //这里是播放停止后,销毁实例    
                    });  
                    music.onEnded((res) => {  
                     music.destroy();//当音频自然播放结束后 销毁当前实例  
                    });

预期结果:

预期能正常播放https音频

实际结果:

不能正常播放https音频

bug描述:

uni.createInnerAudioContext() 播放部分https网络音频文件报MediaError -99错误,注意,是部分https。当报错时,改为http则播放正常。
例如:
music.src ="https://www.zebrabox.com.cn/addons/zh_cjdianc/call/write_off_success.mp3" //https报错
music.src ="http://www.zebrabox.com.cn/addons/zh_cjdianc/call/write_off_success.mp3" //http正常
music.src ="https://wxapp.test.zebrabox.com.cn/addons/zh_cjdianc/call/write_off_success.mp3" //https正常
综上所述 怀疑是createInnerAudioContext() 读取音频数据时,有证书信任问题。但是尝试重新颁发部署了同机构的新的证书,问题依旧。

var music = uni.createInnerAudioContext()  
                    music.autoplay = true  
                    music.src ="https://www.zebrabox.com.cn/addons/zh_cjdianc/call/write_off_success.mp3"  
                    music.onError((res) => {  
                        console.log(res.errMsg);  
                        console.log(res.errCode);  
                        music.destroy(); //发生错误后,销毁实例    
                    });  
                    music.onPause(function() {  
                        console.log('end');  
                        music.destroy(); //这里是播放暂停后,销毁实例    
                    });  
                    music.onStop(function() {  
                        console.log('stop');  
                        music.destroy(); //这里是播放停止后,销毁实例    
                    });  
                    music.onEnded((res) => {  
                     music.destroy();//当音频自然播放结束后 销毁当前实例  
                    });
2022-01-13 14:16 负责人:DCloud_Android_zl 分享
已邀请:
6***@qq.com

6***@qq.com

嘿嘿嘿

小枫叶

小枫叶 - 外包接单加v:wlmk1234567 注明来意

我这边没有复现到,手机是红米note8 你放到手机上面试试看 能否正常播放

  • 斑马披萨 (作者)

    你复现的时候用的是上述https://www.zebrabox.com.cn/addons/zh_cjdianc/call/write_off_success.mp3地址吗?不是的话确实不一定能复现出来,我换测试服务器https也正常。所以才怀疑证书信任问题。这个问题我看前两年出现过,这次又引入了好像。

    2022-01-17 13:48

DCloud_Android_zl

DCloud_Android_zl

我用你发的地址在我这边手机上测试是没有问题的,这个只能在你说的这个设备上复现吗

  • 斑马披萨 (作者)

    我刚才又测试了一遍,确实是手机上能播放,这个设备上播放不了。但这个设备又不是全都不能播放。这是否跟SSL证书的加密套件支持度有关呢?

    手机上能播放但设备上不能播放:https://www.zebrabox.com.cn/addons/zh_cjdianc/call/add_yuyue_order.mp3

    手机和设备都能播放:https://wxapp.test.zebrabox.com.cn/addons/zh_cjdianc/call/write_off_success.mp3

    2022-01-20 11:20

  • 斑马披萨 (作者)

    https://myssl.com/www.zebrabox.com.cn

    https://myssl.com/wxapp.test.zebrabox.com.cn

    上面这是两个域名的证书差异,但是不知道是否是哪些因素影响的?

    还是说Android 7.1.1下有什么特殊要求?

    2022-01-20 11:28

  • 斑马披萨 (作者)

    不对,我这边两家不同的设备厂商,不同的固件源码编译出来的,都是安卓7.1.2版本(帖子里写7.1.1是因为下拉选项里没有7.1.2),都出现这个问题。但是咱们在手机上测试的环境都是安卓10、安卓11的样子。你看会不会是安卓版本导致的兼容性问题?

    2022-01-20 11:33

  • DCloud_Android_zl

    回复 斑马披萨: 稍等,我找几个低版本的手机试一下

    2022-01-20 11:36

  • DCloud_Android_zl

    回复 DCloud_Android_zl: 我这边暂时找不到安卓7的手机,测试安卓6的,播放没问题

    2022-01-20 11:46

  • DCloud_Android_zl

    回复 DCloud_Android_zl: 或者你试试抓包,看有没有报错

    2022-01-20 11:48

  • 斑马披萨 (作者)

    回复 DCloud_Android_zl: 抓包指的是?

    2022-01-20 11:55

  • 斑马披萨 (作者)

    回复 斑马披萨: 我这只能打印出图片里的errMsg和errCode,稍等我贴出来

    2022-01-20 12:07

  • 斑马披萨 (作者)

    回复 DCloud_Android_zl: 我这边尝试将正式服务器nginx的SSL相关配置改为和测试服务器一致,问题依旧。你说的抓包是啥情况?我抓app的网络请求包吗?

    2022-01-20 13:34

  • DCloud_Android_zl

    回复 斑马披萨: 是的,你看设备抓包会不会报错

    2022-01-20 15:17

  • 斑马披萨 (作者)

    回复 DCloud_Android_zl: 没抓过啊,用到的工具都是啥?搞个代理还是有啥可靠点的工具?

    2022-01-20 15:25

  • 斑马披萨 (作者)

    回复 DCloud_Android_zl: 我刚才尝试先uni.downloadFile()下载到本地临时路径,再播放是正常的。而且看报错的触发延迟,应该是访问https网络路径超时了。uni.createInnerAudioContext()访问网络路径对证书信任这块是个啥情况啊?

    2022-01-20 15:43

  • 斑马披萨 (作者)

    回复 DCloud_Android_zl: 问题已解决,原因是nginx配置里SSL相关配置里,为了安全已经废弃了TLS 1.0的支持,但是在安卓7.1.2下uni.createInnerAudioContext()仅支持TLS 1.0协议,因此导致不能直接播放https网络资源。(PS:但是为啥uni.downloadFile接口就不受影响呢?所以说,还是uni.createInnerAudioContext()内部有问题对吧?)

    2022-01-20 16:17

  • 斑马披萨 (作者)

    回复 DCloud_Android_zl: 方便的话加个联系方式吧,以后有什么问题沟通起来比较方便一点。手机:18263101232 微信、QQ、钉钉、飞书同号。

    2022-01-20 16:36

4***@qq.com

4***@qq.com

大哥,我也出现这个问题了,我是一个新手
你说的:原因是nginx配置里SSL相关配置里,为了安全已经废弃了TLS 1.0的支持
我需要怎么改啊?

1***@qq.com

1***@qq.com

这个问题还没修复吗

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