जब मैं AVAssetExportSession के माध्यम से एक वीडियो संपत्ति निर्यात करता हूं तो परिणाम फ़ाइल लैंडस्पेस मोड में होती है। (फ़ाइल itune-> ऐप्स-> फ़ाइल साझाकरण-> मेरा ऐप के माध्यम से पकड़ा गया)। मैं पोर्ट्रेट मोड में वीडियो संपत्ति कैसे निर्यात कर सकता हूं (इसे घुमाएं)?पोर्ट मोड में AVAssetExportSession के माध्यम से वीडियो संपत्ति को निर्यात करने के लिए कैसे करें
उत्तर
आईफोन कैप्चर डिवाइस से आने वाला वीडियो हमेशा लैंडस्केप उन्मुख होता है जो कैप्चर करते समय डिवाइस अभिविन्यास होता है।
यदि आप अपने वीडियो को घुमाने के लिए चाहते हैं, तो 'सरल' समाधान निर्यातित सत्र के वीडियो ट्रैक में परिवर्तन को असाइन करना है।
AVMutableCompositionTrack *videoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVMutableCompositionTrack *audioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
अपनी संरचना के ट्रैक करने के लिए अपने मीडिया पटरियों जोड़ें::
अपने AVComposition वस्तु में 2 परिवर्तनशील पटरियों बनाएँ, के बाद आप अपने सभी ट्रैक जोड़े
...
BOOL videoResult = [videoTrack insertTimeRange:sourceCMTime
ofTrack:[tracks objectAtIndex:0]
atTime:currentTime
error:&error];
BOOL audioResult = [audioTrack insertTimeRange:sourceCMTime
ofTrack:[tracks objectAtIndex:0]
atTime:currentTime
error:&error];
...
लागू अपने वीडियो ट्रैक करने के लिए बदलना आपकी रचना:
CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(M_PI_2);
// CGAffineTransform rotateTranslate = CGAffineTransformTranslate(rotationTransform,360,0);
videoTrack.preferredTransform = rotationTransform;
(सावधान रहें कि ट्रांसफ ओआरएम के ऊपरी बाएं कोने के रूप में मूल था, इसलिए घूर्णन के बाद अनुवाद की आवश्यकता थी, लेकिन आईफोन 4 एस, आईओएस 5.1 पर परीक्षण किया गया, ऐसा लगता है कि घूर्णन अब केंद्र के चारों ओर बनाया गया है।)
जब यू ट्रैक को बदलता है तो रचना रेंडर आकार सेट करें क्योंकि यह फ्रेम से बाहर हो सकता है या काला ब्लॉक के साथ दिखाई दे सकता है:
self.mutableVideoComposition.renderSize = CGSizeMake(assetVideoTrack.naturalSize.height,assetVideoTrack.naturalSize.width);