3

関連する質問を参照してください: Navigator.mediaDevices.getUserMedia が iOS 12 Safari で動作しない

ユーザー入力ユーザー MediaDevices.getUserMedia および Audio Context からオーディオをキャプチャしようとしています

ユーザーがボタンをクリックすると、使用可能なデバイスを確認し、オーディオ ストリームをキャプチャします。

let enumDevicePromise = navigator.mediaDevices.enumerateDevices()
    .then(devices => devices.find(d => d.kind === "audioinput" && d.label !== "" && d.deviceId === "default"))
    .catch((error) => {
        // handle error
    });
this.handleCheckEnumeratedDevices(enumDevicePromise); // capture device in backend

.....

  navigator.mediaDevices
    .getUserMedia({
        audio: true,
        video: false,
    })
    .then(stream => {
        let AudioContext = window.AudioContext || window.webkitAudioContext;
        if (AudioContext) {
            let context = new AudioContext();        
            let source = context.createMediaStreamSource(stream);
            let processor = context.createScriptProcessor(4096, 1, 1);
            source.connect(processor);
            processor.connect(context.destination);
            processor.onaudioprocess = (event) => {
                let audioIn = event.inputBuffer.getChannelData(0);
                this.sendMessage(this.toInt16(audioIn));
            }
        } else {
            // handle error, ie, Audio Context not supported
        }
    }).catch((error) => {
        // handle error
       });
    });

これは Chrome と Firefox では正常に動作しますが、Safari 12 では、マイクのアクセス許可を許可しているにもかかわらず、enumerate devices promise からNull応答が返されます。そのため、オーディオ ストリームをキャプチャできません。

4

1 に答える 1

0

これは、Mobile Safari が「オーディオ入力」の種類のメディア デバイスを公開していないために発生します。これは既知の制限です。

于 2020-04-16T12:54:12.210 に答える