You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure JavaScript SDK SpeechRecognizer在Android设备无法工作求助

Android端Azure Speech Service语音转文本无输入问题排查

针对你遇到的桌面正常、Android网页端麦克风激活但无输入的问题,常见原因和解决方式如下:

1. 权限请求触发时机错误

Android移动端浏览器(如Chrome)要求麦克风权限必须通过用户主动交互(比如按钮点击)触发,不能在页面加载、定时器等非用户操作场景中请求。如果你的startSpeechRecognition是自动调用的,会导致权限看似激活但实际音频流未正确获取。

解决:将启动识别的逻辑绑定到用户点击事件,比如:

document.getElementById('start-btn').addEventListener('click', () => {
    startSpeechRecognition('zh-CN');
});

2. 默认麦克风音频流兼容性问题

部分Android设备的默认麦克风配置可能和Azure SDK的fromDefaultMicrophoneInput存在兼容性问题,导致音频流无法正常传输到服务端。

解决:手动获取MediaStream并传入SDK,替代默认麦克风配置:

async function startSpeechRecognition(language) {
    // 先手动获取麦克风权限和流
    const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
    const speechConfig = SpeechSDK.SpeechConfig.fromSubscription(key_xxx, sReg_yyy);
    speechConfig.speechRecognitionLanguage = language;
    // 用手动获取的流创建audioConfig
    const audioConfig = SpeechSDK.AudioConfig.fromStreamInput(stream);
    var myRecognizer = new SpeechSDK.SpeechRecognizer(speechConfig, audioConfig);

    // 原有的事件绑定逻辑不变
    myRecognizer.recognized = (recognizer, event) => {
        switch (event.result.reason) {
            case SpeechSDK.ResultReason.NoMatch:
                break;
            case SpeechSDK.ResultReason.RecognizedSpeech:
                onRecognizedText(speechConfig.speechRecognitionLanguage, event.result.text);
                break;
            case SpeechSDK.ResultReason.Canceled:
                const cancellation = SpeechSDK.CancellationDetails.fromResult(event.result);
                console.log(`CANCELED: Reason=${cancellation.reason}`);
                if (cancellation.reason == SpeechSDK.CancellationReason.Error) {
                    console.log(`CANCELED: ErrorCode=${cancellation.errorCode}`);
                    console.log(`CANCELED: ErrorDetails=${cancellation.errorDetails}`);
                }
                recognizer.stopContinuousRecognitionAsync();
                break;
        }
    };

    myRecognizer.startContinuousRecognitionAsync(() => { }, e => console.error(e));
}

3. 未在HTTPS环境运行

Azure Speech SDK要求网页必须部署在HTTPS环境下(localhost调试除外),Android移动端对HTTP站点的媒体权限和网络传输有严格限制,即使显示麦克风激活,音频数据也无法正常上传到服务端。

解决:将网页部署到HTTPS服务器,或使用ngrok等工具在本地调试时生成HTTPS代理地址。

4. SDK版本兼容性问题

旧版本的Azure Speech JavaScript SDK可能存在Android浏览器的兼容性bug,建议升级到最新稳定版本。

内容的提问来源于stack exchange,提问作者Ondrej Uzovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:05:11