2012-01-27 5 views
11

मैं इस कोडplayer.duration वीडियो फ़ाइल

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] 
            initWithContentURL:[NSURL fileURLWithPath:videostr]]; 

जहां videostr कि वीडियो फ़ाइल का मार्ग है का उपयोग कर mpmediaplayer नियंत्रक में एक छोटा सा वीडियो खेल रहा हूँ के लिए शून्य हमेशा MPMoviePlayerController में पता चलता है।

अब मुझे उस वीडियो फ़ाइल की लंबाई प्राप्त करने की आवश्यकता है जिसके लिए मैं इस कोड का उपयोग कर रहा हूं।

length = player.duration; 

लेकिन यह हमेशा 0.000 दिखाता है। लेकिन वीडियो अच्छी तरह से खेल रहा है।

मैं वीडियो अवधि प्राप्त करने के लिए प्रत्येक कोड को गुगल करके जांच कर रहा हूं player.duration केवल।

और मैं कुछ अन्य कोड भी

AVURLAsset *asset = [[[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:videostr] 
              options:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], AVURLAssetPreferPreciseDurationAndTimingKey, nil]] autorelease]; 
NSTimeInterval duration; 
if (asset) 
    duration = CMTimeGetSeconds(asset.duration) ; 
NSLog(@">>>>>>>>>>>>>>>>>>>> %f", asset.duration); 

भले ही यह किसी भी एक कृपया मेरी मदद zero.Can से पता चलता प्रयास करें।

अग्रिम धन्यवाद।

उत्तर

22

सामग्री उपयोगी होने तक आपको उपयोगी अवधि नहीं मिल सकती है। लोड राज्य में परिवर्तन के लिए

रजिस्टर:

- (void)MPMoviePlayerLoadStateDidChange:(NSNotification *)notification 
{ 
    if ((player.loadState & MPMovieLoadStatePlaythroughOK) == MPMovieLoadStatePlaythroughOK) 
    { 
     NSLog(@"content play length is %g seconds", player.duration); 
    } 
} 
+0

अधिसूचना: MPMoviePlayerLoadStateDidChangeNotification कॉल 2 बार automatiaclly – g212gs

+0

डिफ़ॉल्ट रूप से वीडियो को रोका गया है यह समाधान काम नहीं करता है, क्योंकि जब उपयोगकर्ता उपयोगकर्ता को क्रिया निष्पादित करता है तो यह अधिसूचना कहा जाता है। पहले अवधि प्राप्त करने के लिए किसी भी तरह से मौजूद हैं? – jose920405

2

स्विफ्ट

आप इस

func getMediaDuration(url: NSURL!) -> Float64{ 
     var asset : AVURLAsset = AVURLAsset.assetWithURL(url) as AVURLAsset 
     var duration : CMTime = asset.duration 

     return CMTimeGetSeconds(duration) 
    } 
तरह तेज में कर सकते हैं:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(MPMoviePlayerLoadStateDidChange:) 
              name:MPMoviePlayerLoadStateDidChangeNotification 
              object:nil]; 

राज्य एक बार सूचित किया जा रहा है का मूल्यांकन

1

उपयोग MPMovieDurationAvailableNotification

[[NSNotificationCenter defaultCenter] addObserver:self 
            selector:@selector(movieDurationAvailable:) 
             MPMovieDurationAvailableNotification object:nil]; 

- (void)movieDurationAvailable:(NSNotification *)notification { 

     NSLog(@"content play length is %g seconds", moviePlayer.duration); 


} 
+1

शायद उस उत्तर पर थोड़ा सा विस्तार करें। कोड नमूना या कुछ उपयोगी के साथ .... –

+0

केवल तभी काम करता है जब उपयोगकर्ता प्ले एक्शन निष्पादित करता है – jose920405

0

आप नीचे दिए गए कोड का उपयोग कर वीडियो फ़ाइल से समय अवधि प्राप्त कर सके।

NSURL *videoURL = [NSURL fileURLWithPath:VideoFileURL]; 

AVURLAsset *sourceAsset = [AVURLAsset URLAssetWithURL:videoURL options:nil]; 

CMTime duration = sourceAsset.duration; 

double durationInSeconds = duration.value/duration.timescale; 

durationInSeconds चर में आप सेकंड में सटीक अवधि मिलता है।