Ich habe eine Freigabe-Erweiterung erstellt, deren Zweck es ist, Videos mit meiner Container-App zu teilen. Als Teil des Share-Flusses möchte ich überprüfen, ob Benutzer angemeldet ist usw. Also habe ich eine App-Gruppe erstellt und die Daten zwischen der Container-App und der Erweiterung (mit NSUserDefaults und Core Data)Nicht in der Lage, Video von der Freigabe-Erweiterung zu speichern ios
let sharedUserDefaults = NSUserDefaults(suiteName:"group.app.group.name")
lazy var applicationDocumentsDirectory: NSURL = {
NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.app.group.name")!
}()
Das funktioniert gut.
Jetzt, da ich das Video zu komprimieren versuchen SDAVAssetExportSession
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH-mm-ss"
let timeStamp = NSDate()
let asset = AVAsset(URL: self.shareVideoURL)
let exportSession = SDAVAssetExportSession(asset: asset)
let outputURL = self.applicationDocumentsDirectory.URLByAppendingPathComponent("\(dateFormatter.stringFromDate(timeStamp)).MP4")
exportSession.outputURL = outputURL
exportSession.outputFileType = AVFileTypeMPEG4
exportSession.shouldOptimizeForNetworkUse = true
let assetTrack = asset.tracksWithMediaType(AVMediaTypeVideo).first!
let videoWidth:NSNumber = assetTrack.naturalSize.width, videoHeight:NSNumber = assetTrack.naturalSize.height,
let desiredBitrate:NSNumber = 3*1024*1024 , desiredKeyFrameInterval:NSNumber = 20
exportSession.videoSettings = [AVVideoCodecKey:AVVideoCodecH264,
AVVideoWidthKey:videoWidth,
AVVideoHeightKey:videoHeight,
AVVideoCompressionPropertiesKey: [
AVVideoAverageBitRateKey:desiredBitrate,
AVVideoMaxKeyFrameIntervalKey:desiredKeyFrameInterval]]
exportSession.audioSettings = [AVFormatIDKey: NSNumber(unsignedInt: kAudioFormatMPEG4AAC),
AVNumberOfChannelsKey: 2,
AVSampleRateKey: 44100,
AVEncoderBitRateKey: 64000]
exportSession.exportAsynchronouslyWithCompletionHandler({
switch exportSession.status {
case .Completed:
print("Compressed Video size : \(Double(NSData(contentsOfURL: outputURL)!.length)/(1024*1024)) mb")
case .Failed:
print("Export Failed :\(exportSession.error)")
case .Cancelled:
print("Export Cancelled :\(exportSession.error)")
default:
print("complete")
}
})
Verwendung Wenn ich dies ausführen in Aktien-Erweiterung ich die Störung erhalte:
Error Domain=NSURLErrorDomain Code=-3000 "Cannot create file"
UserInfo={NSLocalizedDescription=Cannot create file, NSUnderlyingError=0x160900450
{Error Domain=NSOSStatusErrorDomain Code=-12149 "(null)"}}
Wenn ich diesen Code ausführen in Eine andere App, die das Dokumentenverzeichnis verwendet, funktioniert ohne Probleme, aber wenn ich den App-Gruppencontainer benutze, kann die Datei nicht gespeichert werden.
Kann jemand mich in der richtigen Richtung weist die komprimierte Datei in den gemeinsamen genutzten App Gruppencontainern