Ios 相机预览会冻结并停止录制音频(在一次或几次录制后)
我已经使用iOS-Swift创建了一个定制的相机应用程序。问题是,有时在我用手机录制后,相机预览会冻结。更重要的是,在我录制一次视频后,摄像机也会停止录制音频。我似乎无法理解这是否是内存问题,因为应用程序内存没有显示任何问题。以下是可能出现问题的主要代码片段:Ios 相机预览会冻结并停止录制音频(在一次或几次录制后),ios,swift,camera,avfoundation,avcapturesession,Ios,Swift,Camera,Avfoundation,Avcapturesession,我已经使用iOS-Swift创建了一个定制的相机应用程序。问题是,有时在我用手机录制后,相机预览会冻结。更重要的是,在我录制一次视频后,摄像机也会停止录制音频。我似乎无法理解这是否是内存问题,因为应用程序内存没有显示任何问题。以下是可能出现问题的主要代码片段: func load_camera() { // Load the session capture_session = AVCaptureSession(); capture_ses
func load_camera() {
// Load the session
capture_session = AVCaptureSession();
capture_session?.beginConfiguration();
capture_session?.usesApplicationAudioSession = true;
capture_session?.automaticallyConfiguresApplicationAudioSession = true;
capture_session?.sessionPreset = AVCaptureSessionPresetHigh
camera_device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo);
if(selfie) {
guard let device = AVCaptureDevice.devices().filter({ $0.position == .Front })
.first as? AVCaptureDevice else {
fatalError("No front facing camera found")
}
camera_device = device;
}
do {
// Set up the camera image output
let input = try AVCaptureDeviceInput(device: camera_device)
if((capture_session?.canAddInput(input)) != nil) {
capture_session?.addInput(input);
}
// Set up the camera video output
video_output = AVCaptureMovieFileOutput();
video_output?.movieFragmentInterval = kCMTimeInvalid;
video_output?.maxRecordedDuration = CMTime(seconds: 10, preferredTimescale: 1);
if((capture_session?.canAddOutput(video_output)) != nil) {
capture_session?.addOutput(video_output);
preview_layer = AVCaptureVideoPreviewLayer(session: capture_session);
preview_layer?.videoGravity = AVLayerVideoGravityResizeAspect;
preview_layer?.connection.videoOrientation = AVCaptureVideoOrientation.Portrait;
self.camera_view.layer.addSublayer(preview_layer!);
preview_layer!.frame = self.view.bounds;
}
// Set up camera audio output
let audio_device: AVCaptureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeAudio)
let audio_input: AVCaptureDeviceInput = try AVCaptureDeviceInput(device: audio_device)
if((capture_session?.canAddInput(audio_input)) != nil) {
capture_session?.addInput(audio_input)
}
try self.camera_device!.lockForConfiguration()
self.camera_device!.subjectAreaChangeMonitoringEnabled = true;
self.camera_device!.unlockForConfiguration()
// Focus camera when camera moves
let subjectAreaDidChangeBlock = {(notification: NSNotification) -> Void in
self.focus_camera();
}
NSNotificationCenter.defaultCenter().addObserverForName(AVCaptureDeviceSubjectAreaDidChangeNotification, object: nil, queue: nil, usingBlock: subjectAreaDidChangeBlock)
// Done
capture_session?.commitConfiguration();
} catch _ { }
}
然后我使用以下代码开始录制:
// Record
if let video_connection = self.video_output?.connectionWithMediaType(AVMediaTypeVideo) {
// Start recording the video
let recordingDelegate:AVCaptureFileOutputRecordingDelegate = self;
let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let filePath = documentsURL.URLByAppendingPathComponent("recorded.mov")
if(selfie) {
video_connection.automaticallyAdjustsVideoMirroring = false;
video_connection.videoMirrored = true;
}
// Video Orientation
video_connection.videoOrientation = AVCaptureVideoOrientation.Portrait;
if(self.orientation == "PortraitUpsideDown") {
video_connection.videoOrientation = AVCaptureVideoOrientation.PortraitUpsideDown;
}
else if(self.orientation == "LandscapeLeft") {
video_connection.videoOrientation = AVCaptureVideoOrientation.LandscapeRight;
}
else if(self.orientation == "LandscapeRight") {
video_connection.videoOrientation = AVCaptureVideoOrientation.LandscapeLeft;
}
video_output!.startRecordingToOutputFileURL(filePath, recordingDelegate: recordingDelegate);
}
然后,我使用以下代码停止视频录制:
// Stop recording
self.video_output!.stopRecording();
// Stop the camera
self.capture_session?.stopRunning();
self.preview_layer?.connection.enabled = false;
self.capture_session = nil;
我似乎在我的代码中找不到任何问题。有人能告诉我哪里出了问题吗?我是否在录制视频或设置相机时做了一些事情,以便相机预览层开始冻结,音频停止随机录制?我错过了什么
发生了一些奇怪的事情:
任何帮助都将不胜感激 你找到解决方案了吗?有更新吗?我也有同样的问题,你有什么解决办法吗?请帮忙!