7

से वीडियो के लिए सही अभिविन्यास कैसे प्राप्त करें I Instagram वीडियो क्रॉपिंग सुविधा को लागू करने का प्रयास कर रहा हूं। इसके लिए मुझे वीडियो के अभिविन्यास प्राप्त करने की आवश्यकता है जिसके साथ मैं अपने MPMoviePlayerController को सही पहलू अनुपात में देखता हूं और उपयोगकर्ता वीडियो को पैन करने में सक्षम होंगे और दिखाएगा कि स्क्वायर वीडियो क्रिया पर फसल हो जाएगा।फोटो लाइब्रेरी आईओएस

मुझे वीडियो के सही अभिविन्यास के साथ समस्या हो रही है। मैं निम्नलिखित कोड का उपयोग कर रहा

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:fileUrl options:nil]; 
NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeVideo]; 
AVAssetTrack *track = [tracks objectAtIndex:0]; 
UIInterfaceOrientation orientation =[self orientationForTrack:track]; 

// method to get orientation 
- (UIInterfaceOrientation)orientationForTrack:(AVAssetTrack *)videoTrack 
{ 
    CGSize size = [videoTrack naturalSize]; 
    CGAffineTransform txf = [videoTrack preferredTransform]; 

    if (size.width == txf.tx && size.height == txf.ty) 
     return UIInterfaceOrientationLandscapeRight; 
    else if (txf.tx == 0 && txf.ty == 0) 
     return UIInterfaceOrientationLandscapeLeft; 
    else if (txf.tx == 0 && txf.ty == size.width) 
     return UIInterfaceOrientationPortraitUpsideDown; 
    else 
     return UIInterfaceOrientationUnknown; 
} 

समस्या जो मैं कर रहा हूँ यह है कि कुछ समय वीडियो जो चित्र में वास्तव में कर रहे हैं, कोड का टुकड़ा ऊपर परिदृश्य के रूप में यह वर्गीकृत करने और इसके विपरीत है। मुझे केवल वीडियो के अभिविन्यास (लैंडस्केप या पोर्ट्रेट) के दो राज्यों को जानने की आवश्यकता है। मुझे सटीक वही अभिविन्यास मान चाहिए जो MPMoviePlayerController व्याख्या कर रहा है। मेरा आवेदन केवल पोर्ट्रेट अभिविन्यास का समर्थन करता है। किसी भी मदद को बहुत सराहा जाएगा।

पीएस: ऊपर कोड उन वीडियो के लिए ठीक काम कर रहा है जो आईफोन कैमरा से पकड़े गए हैं, जो व्हाट्सएप के माध्यम से डाउनलोड या साझा किए गए वीडियो समस्या का कारण बन रहे हैं।

+0

यह लिंक आपकी मदद करेगा https://gist.github.com/lukabernardi/5020724 –

+0

नहीं, यह नहीं है। मैंने इस मुद्दे को हल कर लिया है, जब मैं कुछ समय प्राप्त करूंगा तो मैं समाधान अपलोड करूंगा। आपकी सहायता के लिए धन्यवाद. – Usama

+0

ठीक है। इसे अन्य लोगों को कुछ मदद मिलेगी ....:) –

उत्तर

5

केवल जिस तरह मेरे लिए यह समस्या हल हो जाती पद्धति का उपयोग करके वीडियो से थंबनेल छवि पर कब्जा करने की है:

- (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option 

और उसके बाद की तरह थंबनेल छवि पर जाँच जोड़ने:

if (singleFrameImage.size.height > singleFrameImage.size.width) { 
    // potrait video 
} else { 
    // landscape video 
} 

यह समाधान आईफोन कैमरे से पकड़े गए वीडियो और इंटरनेट से यादृच्छिक रूप से डाउनलोड किए गए वीडियो के सेट (8-10) पर भी परीक्षण किया जाता है।

4

AVAssetTrack संपत्ति preferredTransform है। आप इसका उपयोग वीडियो के वास्तविक अभिविन्यास को खोजने के लिए कर सकते हैं।

 AVAssetTrack *videoAssetTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 
UIImageOrientation videoAssetOrientation_ = UIImageOrientationUp; 
CGFloat videoAngle = RadiansToDegrees(atan2(videoAssetOrientation_.b, videoAssetOrientation_.a)); 


int orientation = 0; 
switch ((int)videoAngle) { 
    case 0: 
     orientation = UIImageOrientationRight; 
     break; 
    case 90: 
     orientation = UIImageOrientationUp; 
     break; 
    case 180: 
     orientation = UIImageOrientationLeft; 
     break; 
    case -90: 
     orientation = UIImageOrientationDown; 
     break; 
    default: 
     //Not found 
     break; 
} 
+0

यह केवल आईफोन कैमरा से कैप्चर किए गए वीडियो के लिए काम करता है, यह इंटरनेट से डाउनलोड किए गए यादृच्छिक वीडियो के लिए काम नहीं करता है। – Usama

+0

मैंने इस मुद्दे को हल किया है, एक बार मुझे कुछ खाली समय मिलने पर मैं समाधान पोस्ट करूंगा। आपकी सहायता के लिए धन्यवाद. – Usama

+0

मुझे लगता है कि सुझाया गया कोड सही है, लेकिन आपको वीडियो अभिविन्यास आकार में उस अभिविन्यास को भी लागू करने की आवश्यकता है। मेरा मतलब है कि अगर अभिविन्यास 0 या 180 है तो लैंडस्केप = चौड़ाई> ऊंचाई है, लेकिन यह 90 या -90 है तो लैंडस्केप = चौड़ाई <ऊंचाई – markov

संबंधित मुद्दे