यह नहीं पता कि यह कहां से पूछना है, इसलिए मैंने यहां शुरू करना सोचा।मेरे ऐप के वीडियो एक खाली हरे रंग की स्क्रीन के रूप में फेसबुक पर क्यों अपलोड कर रहे हैं?
मेरे पास दो वीडियो क्लिप हैं। न तो वीडियो क्लिप में कोई ऑडियो है।
एवीकैप्चर सत्र के माध्यम से आईफोन के कैमरे से एक वीडियो क्लिप कैद की जाती है।
दूसरी वीडियो क्लिप डिवाइस पर स्थानीय रूप से संग्रहीत की जाती है।
मैं दो वीडियो को इस तरह से मर्ज करना चाहता हूं कि कब्जा कर लिया गया वीडियो पूरी तरह से चलाता है, तुरंत दूसरी वीडियो क्लिप के एक सेकंड के बाद। मैं फिर एक पूर्व निर्धारित ऑडियो फ़ाइल के साथ नई वीडियो क्लिप मर्ज करता हूं और अपने शेयर मेनू में सेग्यू करता हूं जहां मैं कैमरा रोल में सहेजता हूं।
अंतिम परिणाम कैमरे रोल में बिल्कुल ठीक तरह से खेलता है। हालांकि, जब मैं वीडियो को फेसबुक पर साझा करता हूं, तो पहली वीडियो क्लिप को हरे या कभी-कभी ग्रे स्क्रीन के रूप में विकृत किया जाता है। दूसरी बार ठीक होने पर दूसरी क्लिप ठीक खेलती है। और ऑडियो पूरी चीज में ठीक है।
मुझे नहीं पता कि इसका क्या कारण है।
कोई मदद?
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)
})
}
}