收藏
回答

getBackgroundAudioManager播放音频失败

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug wx.getBackgroundAudioManager 客户端 iOS 6.7.1 2.2.2

- 需求的场景描述(希望解决的问题)

在播放需要鉴权的音频文件时,开发者工具中,可以正常播放。但是在手机中微信小程序播放时,就报错了,原因是阿里云OSS鉴权验证失败,导致返回403错误;




在手机中,微信小程序的createInnerAudioContext可以正常播放以上出现403错误的已鉴权URL,但是getBackgroundAudioManager播放音频失败,错误:

errCode: 10002 

errMsg: "playerErrCode:6, systemErrCode:403, domain:com.tencent.KSAudioPlayer.HTTP, description:未能完成操作。 ("com.tencent.KSAudioplayer.HTTP "错误 403")



- 希望提供的能力

希望可以解决这个问题,毕竟createInnerAudioContext是可以播放的,而且开发者工具中的getBackgroundAudioManager也是可以播放的。


另外,希望开发者工具中的模拟器,能和微信小程序的环境完全一致;


谢谢

最后一次编辑于  2018-08-08
回答关注问题邀请回答
收藏

1 个回答

  • NIXUS
    NIXUS
    2018-08-08

    在优才全栈工程师,微信群里弘哥的帮助下,终于解决了这个问题;

    原因:

    getBackgroundAudioManager这个API,小程序中,请求音频文件的时候,加了头信息:

    "Content-Type": "application/octet-stream"

    服务器在鉴权的时候,是没有加入任何头信息的,因此就造成头信息不一致,导致阿里云OSS鉴权失败,无法访问资源;

    服务器代码做如下调整后,可以正常访问资源,鉴权可以通过验证:

    $client = new OssClient(env('OSS_ACCESS_KEY_ID'), env('OSS_ACCESS_KEY_SECRET'), env('OSS_FREE_ENDPOINT'));
    $result = $client->signUrl($this->bucket, $object, $timeout, 'GET', ['Content-Type' => 'application/octet-stream']);


    主要就是在鉴权方法的最后一个参数中,设置了getBackgroundAudioManager这个API访问资源时,增加的Header头信息;


    注:以上为测试代码,请根据项目实际情况进行调整;


    2018-08-08
    有用 2
    回复
登录 后发表内容