WKWebView 播放 YouTube 视频停止摄像头和麦克风输入

问题描述 投票:0回答:1

我正在使用 Swift 创建一个 iOS 本机应用程序。

该应用程序有一个 UIView,其中包含 WKWebVeiw 的前 50%,它加载 YouTube 视频 URL(我还尝试了 Google 的 youtube_ios_player_helper YTPlayerView,它基本上也是一个 WKWebView)

在 UIView 的下半部分,我嵌入了 AVCaptureVideoPreviewLayer,它显示了我的 iPhone 摄像头前面的内容。

同时我初始化了SFSpeechRecognizer来捕获用户的声音。

在我按下 WKWebView 中的 YouTube“播放”按钮之前,AVCaptureVideoPreviewLayer 和 SFSpeechRecognizer 工作正常

但是,一旦我在 WKWebView 中按下 YouTube“播放”按钮(YouTube 视频开始播放),AVCaptureVideoPreviewLayer 就会冻结,SFSpeechRecognizer 就会停止工作。

以下是我如何创建 WKWebView 来加载 YouTube 视频:

        var youTubePlayerWebView: WKWebView! = WKWebView(frame: CGRect(x: videoplayerX, y: videoplayerY, width: videoplayerWidth, height: videoplayerHeight))
        youTubePlayerWebView.load(URLRequest(url: videoUrl))
        self.view.addSubview(youTubePlayerWebView)

以下是我如何创建相机

        self.previewLayer = AVCaptureVideoPreviewLayer(session: self.session!)
        self.previewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
        self.previewLayer?.connection!.videoOrientation = AVCaptureVideoOrientation.portrait
        self.previewLayer?.frame = self.cameraPreview.bounds
        self.cameraPreview.layer.addSublayer(self.previewLayer!)
        self.session?.startRunning()

以下是我监听用户声音的方法:

    guard let node = audioEngine?.inputNode else { return }
    let recordingFormat = node.outputFormat (forBus: 0)
    node.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { buffer, _ in
        self.request.append (buffer)
    }
    audioEngine?.prepare ()
    do {
        try audioEngine?.start()
        let audioSession = AVAudioSession.sharedInstance()
        try audioSession.setCategory(AVAudioSession.Category.playAndRecord)
        try audioSession.setMode(AVAudioSession.Mode.default)
        try audioSession.setActive(true, options: .notifyOthersOnDeactivation)
        try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSession.PortOverride.speaker)
    } catch {
        return print (error)
    }
    recognitionTask = speechRecognizer?.recognitionTask(with: request, resultHandler: { result, error in
        if let result = result {
           //....voice recognition logic

我需要一种方法,让我的摄像头和麦克风在 WKWebView 播放 YouTube 视频时继续工作。

ios swift video youtube wkwebview
1个回答
0
投票

好吧,我明白了,答案如下: 当初始化 AVCaptureSession 的会话以进行相机视频捕获时,我需要设置:

AVCaptureSession?.automaticallyConfiguresApplicationAudioSession = false

当为 SFSpeechRecognizer 初始化 AVAudioSession 的会话时,我需要设置:

AVAudioSession.setCategory(AVAudioSession.Category.playAndRecord, options: [.mixWithOthers, .duckOthers])
© www.soinside.com 2019 - 2024. All rights reserved.