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

Html5 QRcode scanner库扫码成功后无法关闭摄像头问题求助

解决Html5 QRcode Scanner扫码后摄像头无法关闭的问题

针对调用stop()后摄像头仍无法关闭的问题,可尝试以下几种解决方案:

方案1:添加扫描标记避免重复触发并手动清理容器

你的代码虽通过判断结果去重,但仍可能存在回调多次触发导致stop()执行异常的情况。新增标记确保仅处理一次扫码结果,同时在停止后清空扫描容器释放资源:

docReady(function () {
    var resultContainer = document.getElementById('qr-reader-results');
    var lastResult, countResults = 0;
    var hasScanned = false; // 标记是否已处理过扫码结果
    function onScanSuccess(decodedText, decodedResult) {
        if (decodedText !== lastResult && !hasScanned) {
            hasScanned = true;
            ++countResults;
            lastResult = decodedText;
            console.log(`Scan result ${decodedText}`, decodedResult);

            add_my_by_qr_code(decodedText);

            html5QrcodeScanner.stop()
                .then(() => {
                    // 清空扫描容器,强制释放相关资源
                    document.getElementById('qr-reader').innerHTML = '';
                })
                .catch((err) => {
                    console.error('停止扫描失败:', err);
                });
        }
    }

    var html5QrcodeScanner = new Html5QrcodeScanner(
        "qr-reader", { fps: 10, qrbox: 250 });
    html5QrcodeScanner.render(onScanSuccess);
});

方案2:手动关闭媒体流

若stop()方法无法正常释放摄像头流,可直接获取媒体流并手动终止:

// 修改onScanSuccess中的停止逻辑
html5QrcodeScanner.stop()
    .then(() => {
        // 获取所有视频轨道并停止
        navigator.mediaDevices.enumerateDevices()
            .then(devices => {
                devices.forEach(device => {
                    if (device.kind === 'videoinput') {
                        navigator.mediaDevices.getUserMedia({ video: { deviceId: device.deviceId } })
                            .then(stream => {
                                stream.getTracks().forEach(track => track.stop());
                            });
                    }
                });
            });
        document.getElementById('qr-reader').innerHTML = '';
    })
    .catch((err) => {
        console.error('停止扫描失败:', err);
    });

方案3:升级库到最新版本

部分旧版本的html5-qrcode存在stop()方法的bug,升级到最新版本后重新测试,大概率能解决该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:30:13