9

में प्रोग्राम के रूप में प्रोग्राम के आयाम प्राप्त करें मैं आईओएस विकास में एक नौसिखिया हूं। मैं एक ऐसा एप्लीकेशन विकसित कर रहा हूं जहां मुझे MPMoviePlayerController में खेले जाने वाले वीडियो के आकार की आवश्यकता हो।उद्देश्य सी

मैं वीडियो के आयाम प्राप्त करने के लिए MPMoviePlayerController की प्राकृतिक प्राकृतिक आकार का उपयोग कर रहा हूं।

@property(nonatomic, readonly) CGSize naturalSize; 

लेकिन समस्या यह है कि मैं प्राकृतिक आकार केवल जब वीडियो MPMoviePlayerController में खेला जाता है मिल सकता है।

क्या कोई तरीका है जिसमें मैं MPMoviePlayerController में चलाने से पहले वीडियो के आयाम प्राप्त कर सकता हूं।

- संपादित करें -

क्या कोई अन्य वैकल्पिक हल मैं इस समस्या को हल करने के लिए संपर्क कर सकते हैं है? कृपया मदद करे।

+0

'एमपीएमवी प्लेर कंट्रोलर' की 'अवधि' संपत्ति भी है – tipycalFlow

+0

@tipycalFlow हाँ, मैंने उस संपत्ति को देखा है, लेकिन मैं जानना चाहता था वीडियो की ऊंचाई और चौड़ाई जो MPMoviePlayerController ऑब्जेक्ट में वास्तव में खेले जाने से पहले खेला जा रहा है। – An1Ba7

उत्तर

7

MPMoviePlayerController के लिए वीडियो मेटाडेटा लोड करने में समय लगता है, इसलिए आपको श्रोता जोड़ना चाहिए और प्राकृतिक आकार लोड होने की प्रतीक्षा करनी चाहिए। कुछ इस तरह:

[[NSNotificationCenter defaultCenter] addObserver:self 
       selector:@selector(movieNaturalSizeAvailable:) 
       name:MPMovieNaturalSizeAvailableNotification 
       object:myMoviePlayer]; 

और movieNaturalSizeAvailable: में, myVideoPlayer.naturalSize आप इच्छित मूल्य देता है और उसके बाद, आप वीडियो खेल सकते हैं।

+1

धन्यवाद! यह पूरी तरह से काम करता है! :) – An1Ba7

32

आप AVURLAsset और AVAssetTrack, का उपयोग करते हुए इस तरह एक वीडियो के आयामों पढ़ सकते हैं:

NSURL *mediaURL; // Your video's URL 
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:mediaURL options:nil]; 
NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeVideo]; 
AVAssetTrack *track = [tracks objectAtIndex:0]; 

फिर AVAssetTrack के naturalSize संपत्ति का उपयोग कर:

CGSize mediaSize = track.naturalSize; 

वीडियो का मेटाडेटा इस तरह से होने का लाभ यह है कि आप वीडियो को चलाने या लोड होने की प्रतीक्षा किए बिना तुरंत इसे एक्सेस कर सकते हैं।

+0

यह मेरे लिए काम करता है। धन्यवाद। –

1

बस सोचा कि मैं इस पृष्ठ को ढूंढने वालों के लिए अपने अनुभव साझा करूंगा।

प्राकृतिक आकार वास्तव में एन्कोडेड रिज़ॉल्यूशन नहीं है, यह डिस्प्ले रेज़ोल्यूशन है। यह एन्कोडेड रिज़ॉल्यूशन से अलग हो सकता है उदाहरण के लिए यदि पिक्सेल पहलू अनुपात! = 1 या (अधिक आम) एन्कोडेड वीडियो में एक स्वच्छ एपर्चर मेटाडेटा जानकारी है।

इनकोडिंग संकल्प एक ही रास्ता मैं पाया है के साथ जैसे AVASsetReaderTrackOutput तो CVPixelBufferGetWidth (या GetHeight) के साथ जिसके परिणामस्वरूप पिक्सेल बफर का निरीक्षण डेटा संकल्प प्राप्त करने के लिए पहली फ्रेम डिकोड करने के लिए है पाने के लिए। यदि आप छवि जनरेटर का उपयोग करते हैं तो आपको डिस्प्ले रेज़ोल्यूशन (और डिस्प्ले रिज़ॉल्यूशन का आरजीबी बिटमैप)