华为obs 私有桶 音频 使用uniapp 安卓端播放-99的问题

华为私有桶的音频文件,后台生成token后返回连接

前端使用uniapp 的 uni.createInnerAudioContext() 和 plus.audio.createPlayer() 播放,都会偶尔遇到-99的错误

搜索结果说可能是资源打满,连接池耗尽,根据提示修改都没有解决

后来通过fiddler抓包,发现播放失败的url返回

复制代码
<?xml version="1.0" encoding="UTF-8" standalone="true"?>

-<Error>

<Code>SignatureDoesNotMatch</Code>

<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>

<RequestId>0000019D04E61CBACAC5C93B7FAC778A</RequestId>

<HostId>Z9v+cC1sRnaWw6x0vi8pxxYA0YVnKxbYHUPAFpnxkX8sLV44u5b02Z+ailn2wCnR</HostId>

<AWSAccessKeyId>HPUAACHPJ15SJKPZGOAP</AWSAccessKeyId>

<SignatureProvided>YMILUUB mXaqSGMf1qPyEZPcgTQ=</SignatureProvided>

<StringToSign>GET 1773907283 /mmwz-obs-dev.mmwzcloud.com/mmwz_file/mingmen_god/music/b02d063e-8a81-4da2-a6d8-5f40abf2398c.mp3</StringToSign>

<StringToSignBytes>47 45 54 0a 0a 0a 31 37 37 33 39 30 37 32 38 33 0a 2f 6d 6d 77 7a 2d 6f 62 73 2d 64 65 76 2e 6d 6d 77 7a 63 6c 6f 75 64 2e 63 6f 6d 2f 6d 6d 77 7a 5f 66 69 6c 65 2f 6d 69 6e 67 6d 65 6e 5f 67 6f 64 2f 6d 75 73 69 63 2f 62 30 32 64 30 36 33 65 2d 38 61 38 31 2d 34 64 61 32 2d 61 36 64 38 2d 35 66 34 30 61 62 66 32 33 39 38 63 2e 6d 70 33</StringToSignBytes>

</Error>

观察发现,失败的url参数中的Signature参数值没有经过url编码

在浏览器中测试,未编码的url无法下载,编码后可以下载,观察其他obs文件,都是编码后下载正常,

但是uni.createInnerAudioContext() 和 plus.audio.createPlayer()传入的url是已经编码的,为什么实际请求又变成解码后的?

于是尝试在已编码的基础上再编码一次,测试发现有效,多次刷新都能播放

复制代码
function encodeSignatureInUrl(originalUrl) {
    try {
        // 1. 使用正则表达式提取 Signature 参数的值
        // 这个正则匹配 Signature= 后面的内容,直到遇到 & 或字符串结束
        const signatureRegex = /Signature=([^&]+)/;
        const match = originalUrl.match(signatureRegex);
        
        if (match && match[1]) {
            const originalSignature = match[1];
            
            // 2. 对 Signature 值进行 URL 编码
            const encodedSignature = encodeURIComponent(originalSignature);
            
            // 3. 将编码后的值替换回原 URL
            const encodedUrl = originalUrl.replace(signatureRegex, `Signature=${encodedSignature}`);
            
            return encodedUrl;
        } else {
            console.warn('URL中没有找到Signature参数');
            return originalUrl;
        }
    } catch (error) {
        console.error('处理URL时出错:', error);
        return originalUrl;
    }
}

传入url,用返回的url调用uni.createInnerAudioContext() 和 plus.audio.createPlayer()

相关推荐
ALINX技术博客19 分钟前
【黑金云课堂】FPGA技术教程Vitis开发:SD卡WAV文件读取音频播放实验
fpga开发·音视频
沐禾安信17 小时前
AVI 视频打不开?2026 四款转 MP4 工具封神
音视频·电脑录屏
兵叔物联18 小时前
基于FFmpeg的短视频自动剪辑工具
ffmpeg·音视频
AORUO奥偌18 小时前
从“拼凑”到“集成”:音视频系统如何重塑弱电智能化建设逻辑
音视频·公共广播系统·音视频系统·多媒体会议与ip广播系统·多媒体会议系统
禹亮科技19 小时前
大型国企会议室音视频集成实战:3间120㎡空间Poly G7500+LED大屏+讯飞多语言会议系统落地方案
音视频·视频会议系统集成·上海禹亮科技·讯飞听见多语言会议系统·poly g7500
音视频牛哥21 小时前
SmartMediaKit macOS版RTSP/RTMP低延迟播放器:技术架构、核心能力与应用实践
音视频·低延迟rtsp播放器·macos直播播放器·macos rtsp播放器·macos rtmp播放器·rtsp播放器mac版·rtmp播放器mac版
2501_916007471 天前
深入理解HTTPS对称与非对称加密机制及Charles抓包实践
网络协议·http·ios·小程序·https·uni-app·iphone
小徐_23331 天前
AI 写 wot-ui 总在猜 API?我们把 Skills、MCP 和 CLI 都配好了
前端·uni-app·ai编程
Liu.7741 天前
uni-app 组件 uni-easyinput 常见 Bug 及解决方案
uni-app·bug
潜创微科技1 天前
沁恒CH9339:USB3.0超高速对拷,两台电脑一根线共享一切
音视频