Ich weiß nicht, wo ich das sonst noch fragen soll, also dachte ich mir, hier anzufangen.Warum werden die Videos meiner App als leerer grüner Bildschirm auf Facebook hochgeladen?
Ich habe zwei Videoclips. Kein Videoclip hat Audio.
Ein Videoclip wird über AVCaptureSession von der iPhone-Kamera aufgenommen.
Der zweite Videoclip wird lokal auf dem Gerät gespeichert.
Ich möchte die beiden Videos so zusammenführen, dass das aufgenommene Video in seiner Gesamtheit abgespielt wird, unmittelbar gefolgt von einer Sekunde des zweiten Videoclips. Ich füge dann den neuen Videoclip mit einer vorherbestimmten Audiodatei zusammen und segne zu meinem Aktienmenü, wo ich auf der Kamerarolle speichere.
Das Endergebnis spielt genau so ab, wie es in der Kamerarolle sein sollte. Wenn ich das Video jedoch mit Facebook teile, wird der erste Videoclip als grüner oder manchmal grauer Bildschirm verzerrt. Der zweite Clip spielt gut, wenn die Zeit gekommen ist. Und das Audio ist während der gesamten Sache in Ordnung.
Ich habe keine Ahnung, was das verursacht.
Irgendwelche Hilfe?
func mergeVideos() {
let videoAsset = AVAsset(URL: recordedVideoURL)
let videoAsset2 = AVAsset(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Credits", ofType: "mp4")!))
let audioAsset = AVAsset(URL: finalAudioURL)
// 1 - Create AVMutableComposition object.
let mixComposition = AVMutableComposition()
// 2 - Audio track
do {
let audioTrack = mixComposition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: 0)
try audioTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, audioAsset.duration + CMTime(seconds: 1, preferredTimescale: 30)), ofTrack: audioAsset.tracksWithMediaType(AVMediaTypeAudio)[0], atTime: kCMTimeZero)
} catch {
print(error)
}
// 3 - Video tracks
do {
let videoTrack = mixComposition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
try videoTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoAsset.duration), ofTrack: videoAsset.tracksWithMediaType(AVMediaTypeVideo)[0], atTime: kCMTimeZero)
try videoTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, audioAsset.duration-videoAsset.duration + CMTime(seconds: 1, preferredTimescale: 30)), ofTrack: videoAsset2.tracksWithMediaType(AVMediaTypeVideo)[0], atTime: videoAsset.duration)
} catch {
print(error)
}
// 5 - Create Exporter
let exporter = AVAssetExportSession(asset: mixComposition, presetName: AVAssetExportPresetHighestQuality)
deleteFileAtURL(videoToShareURL)
exporter!.outputURL = videoToShareURL
exporter!.outputFileType = AVFileTypeMPEG4
exporter!.shouldOptimizeForNetworkUse = true
// 6 - Perform the Export
exporter!.exportAsynchronouslyWithCompletionHandler() {
dispatch_async(dispatch_get_main_queue(), {() -> Void in
hideSpinner()
self.performSegueWithIdentifier("backToShare", sender: self)
})
}
}