diff --git a/SceneKitVideoRecorder/Classes/Options.swift b/SceneKitVideoRecorder/Classes/Options.swift index aa162ab..e17a121 100644 --- a/SceneKitVideoRecorder/Classes/Options.swift +++ b/SceneKitVideoRecorder/Classes/Options.swift @@ -29,7 +29,7 @@ extension SceneKitVideoRecorder { outputUrl: URL(fileURLWithPath: NSTemporaryDirectory() + "output.mp4"), audioOnlyUrl: URL(fileURLWithPath: NSTemporaryDirectory() + "audio.m4a"), videoOnlyUrl: URL(fileURLWithPath: NSTemporaryDirectory() + "video.mp4"), - fileType: AVFileTypeAppleM4V, + fileType: AVFileType.m4v.rawValue, codec: AVVideoCodecH264, deleteFileIfExists: true, useMicrophone: true, diff --git a/SceneKitVideoRecorder/Classes/SceneKitVideoRecorder.swift b/SceneKitVideoRecorder/Classes/SceneKitVideoRecorder.swift index f4ef139..ed1b6af 100644 --- a/SceneKitVideoRecorder/Classes/SceneKitVideoRecorder.swift +++ b/SceneKitVideoRecorder/Classes/SceneKitVideoRecorder.swift @@ -93,7 +93,7 @@ public class SceneKitVideoRecorder: NSObject, AVAudioRecorderDelegate { self.options.videoSize = options.videoSize - writer = try! AVAssetWriter(outputURL: self.options.videoOnlyUrl, fileType: self.options.fileType) + writer = try! AVAssetWriter(outputURL: self.options.videoOnlyUrl, fileType: AVFileType(rawValue: self.options.fileType)) self.setupVideo() } @@ -161,7 +161,7 @@ public class SceneKitVideoRecorder: NSObject, AVAudioRecorderDelegate { private func setupVideo() { - self.videoInput = AVAssetWriterInput(mediaType: AVMediaTypeVideo, + self.videoInput = AVAssetWriterInput(mediaType: AVMediaType.video, outputSettings: self.options.assetWriterVideoInputSettings) self.videoInput.mediaTimeScale = self.options.timeScale @@ -188,7 +188,7 @@ public class SceneKitVideoRecorder: NSObject, AVAudioRecorderDelegate { return promise.future } - promise.success() + promise.success(()) return promise.future } @@ -333,8 +333,12 @@ public class SceneKitVideoRecorder: NSObject, AVAudioRecorderDelegate { let aVideoAsset : AVAsset = AVAsset(url: videoUrl) let aAudioAsset : AVAsset = AVAsset(url: audioUrl) - mutableCompositionVideoTrack.append(mixComposition.addMutableTrack(withMediaType: AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid)) - mutableCompositionAudioTrack.append(mixComposition.addMutableTrack(withMediaType: AVMediaTypeAudio, preferredTrackID: kCMPersistentTrackID_Invalid)) +//<<<<<<< HEAD +// mutableCompositionVideoTrack.append(mixComposition.addMutableTrack(withMediaType: AVMediaType.video, preferredTrackID: kCMPersistentTrackID_Invalid)!) +// mutableCompositionAudioTrack.append( mixComposition.addMutableTrack(withMediaType: AVMediaType.audio, preferredTrackID: kCMPersistentTrackID_Invalid)!) +//======= + mutableCompositionVideoTrack.append(mixComposition.addMutableTrack(withMediaType: AVMediaType.video, preferredTrackID: kCMPersistentTrackID_Invalid)!) + mutableCompositionAudioTrack.append(mixComposition.addMutableTrack(withMediaType: AVMediaType.audio, preferredTrackID: kCMPersistentTrackID_Invalid)!) guard !aVideoAsset.tracks.isEmpty, !aAudioAsset.tracks.isEmpty else { let error = NSError(domain: errorDomain, code: ErrorCode.zeroFrames.rawValue, userInfo: nil) @@ -342,8 +346,8 @@ public class SceneKitVideoRecorder: NSObject, AVAudioRecorderDelegate { return promise.future } - let aVideoAssetTrack : AVAssetTrack = aVideoAsset.tracks(withMediaType: AVMediaTypeVideo)[0] - let aAudioAssetTrack : AVAssetTrack = aAudioAsset.tracks(withMediaType: AVMediaTypeAudio)[0] + let aVideoAssetTrack : AVAssetTrack = aVideoAsset.tracks(withMediaType: AVMediaType.video)[0] + let aAudioAssetTrack : AVAssetTrack = aAudioAsset.tracks(withMediaType: AVMediaType.audio)[0] do { try mutableCompositionVideoTrack[0].insertTimeRange(CMTimeRangeMake(kCMTimeZero, aVideoAssetTrack.timeRange.duration), of: aVideoAssetTrack, at: kCMTimeZero) @@ -362,7 +366,7 @@ public class SceneKitVideoRecorder: NSObject, AVAudioRecorderDelegate { let savePathUrl : URL = self.options.outputUrl let assetExport: AVAssetExportSession = AVAssetExportSession(asset: mixComposition, presetName: AVAssetExportPresetHighestQuality)! - assetExport.outputFileType = AVFileTypeMPEG4 + assetExport.outputFileType = AVFileType.mp4 assetExport.outputURL = savePathUrl assetExport.shouldOptimizeForNetworkUse = true @@ -370,7 +374,7 @@ public class SceneKitVideoRecorder: NSObject, AVAudioRecorderDelegate { switch assetExport.status { case AVAssetExportSessionStatus.completed: - promise.success() + promise.success(()) case AVAssetExportSessionStatus.failed: let assetExportErrorMessage = "failed \(String(describing: assetExport.error))" let error = NSError(domain: self.errorDomain, code: ErrorCode.assetExport.rawValue, userInfo: ["Reason": assetExportErrorMessage]) @@ -380,7 +384,7 @@ public class SceneKitVideoRecorder: NSObject, AVAudioRecorderDelegate { let error = NSError(domain: self.errorDomain, code: ErrorCode.assetExport.rawValue, userInfo: ["Reason": assetExportErrorMessage]) promise.failure(error) default: - promise.success() + promise.success(()) } } diff --git a/SceneKitVideoRecorderDemo/SceneKitVideoRecorderDemo.xcodeproj/project.pbxproj b/SceneKitVideoRecorderDemo/SceneKitVideoRecorderDemo.xcodeproj/project.pbxproj index 0b06c9c..e64a11e 100644 --- a/SceneKitVideoRecorderDemo/SceneKitVideoRecorderDemo.xcodeproj/project.pbxproj +++ b/SceneKitVideoRecorderDemo/SceneKitVideoRecorderDemo.xcodeproj/project.pbxproj @@ -176,6 +176,7 @@ TargetAttributes = { 2C1EA3781F6281C200E97D5E = { CreatedOnToolsVersion = 9.0; + LastSwiftMigration = 0910; ProvisioningStyle = Automatic; }; 2C3EB9571F9A580000AA77B4 = { @@ -453,7 +454,8 @@ PRODUCT_BUNDLE_IDENTIFIER = com.okaris.SceneKitVideoRecorderDemo; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -471,7 +473,8 @@ PRODUCT_BUNDLE_IDENTIFIER = com.okaris.SceneKitVideoRecorderDemo; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release;