I’m creating an iOS native app with Swift.
The app has a single UIView, which comprises the highest 50% with WKWebVeiw, which masses YouTube video URL (Additionally I attempted Google’s youtube_ios_player_helper YTPlayerView, which principally is a WKWebView as nicely)
Within the backside half of UIView I embedded AVCaptureVideoPreviewLayer, which reveals what’s in entrance of my iPhone digital camera.
Additionally on the similar time I initialised SFSpeechRecognizer to seize the consumer’s voice.
The AVCaptureVideoPreviewLayer and SFSpeechRecognizer are working tremendous earlier than I press the YouTube “Play” button in my WKWebView
Nevertheless, as soon as I press YouTube “Play” button in WKWebView (The YouTube video begin enjoying), AVCaptureVideoPreviewLayer freezes, and SFSpeechRecognizer stopes working.
On the following is how I create the WKWebView to load YouTube video:
var youTubePlayerWebView: WKWebView! = WKWebView(body: CGRect(x: videoplayerX, y: videoplayerY, width: videoplayerWidth, peak: videoplayerHeight))
youTubePlayerWebView.load(URLRequest(url: videoUrl))
self.view.addSubview(youTubePlayerWebView)
On the following is how I create digital camera
self.previewLayer = AVCaptureVideoPreviewLayer(session: self.session!)
self.previewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
self.previewLayer?.connection!.videoOrientation = AVCaptureVideoOrientation.portrait
self.previewLayer?.body = self.cameraPreview.bounds
self.cameraPreview.layer.addSublayer(self.previewLayer!)
self.session?.startRunning()
On the following is how I monitor the consumer’s voice:
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?.put together ()
do {
strive audioEngine?.begin()
let audioSession = AVAudioSession.sharedInstance()
strive audioSession.setCategory(AVAudioSession.Class.playAndRecord)
strive audioSession.setMode(AVAudioSession.Mode.default)
strive audioSession.setActive(true, choices: .notifyOthersOnDeactivation)
strive AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSession.PortOverride.speaker)
} catch {
return print (error)
}
recognitionTask = speechRecognizer?.recognitionTask(with: request, resultHandler: { end result, error in
if let end result = end result {
//....voice recognition logic
I would like a strategy to enable my digital camera and microphone proceed working whereas WKWebView is enjoying YouTube video.