getBackgroundAudioManager播放音频失败
发布于 7 年前 作者 xiuyingshen 11046 次浏览 来自 问答
  • 需求的场景描述(希望解决的问题)

在播放需要鉴权的音频文件时,开发者工具中,可以正常播放。但是在手机中微信小程序播放时,就报错了,原因是阿里云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也是可以播放的。

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


谢谢

1 回复

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

原因:

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头信息;

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

回到顶部