2011-12-26 20 views
7

का उपयोग करके वीडियो चलाएं मुझे AVAssetReader का उपयोग करके वीडियो फ़ाइल से फ्रेम बफर मिल रहा है और फ्रेम पर कुछ ऑपरेशन कर रहा है और फिर AVAssetWritter का उपयोग करके temp फ़ाइल में नया फ्रेम सहेज रहा है। अब मेरे पास temp फ़ाइल पथ है जहां सभी नए फ्रेम सहेजे जा रहे हैं एक एक करके। फ़्रेम हमेशा temp फ़ाइल में जोड़ते समय वीडियो चलाने का कोई तरीका है ??AVPlayer

यहाँ

ब्लॉक कभी नहीं चलाता अंदर (जहां फ्रेम को लगातार जोड़ रहा है) अस्थायी मार्ग से वीडियो खेलने के लिए

- (void)loadAssetFromFile { 

    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:[(mMediaReader.mCameraRecorder) tempVideoFilePath ]] options:nil]; 
    NSString *tracksKey = @"tracks"; 

    [asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:tracksKey] completionHandler: 
    ^{ 

     // Completion handler block. 
     dispatch_async(dispatch_get_main_queue(), 
         ^{ 
          NSError *error = nil; 
          AVKeyValueStatus status = [asset statusOfValueForKey:tracksKey error:&error]; 

          if (status == AVKeyValueStatusLoaded) { 
           self.mPlayerItem = [AVPlayerItem playerItemWithAsset:asset]; 
           [mPlayerItem addObserver:self forKeyPath:@"status" 
               options:0 context:&ItemStatusContext]; 
           [[NSNotificationCenter defaultCenter] addObserver:self 
                     selector:@selector(playerItemDidReachEnd:) 
                      name:AVPlayerItemDidPlayToEndTimeNotification 
                      object:mPlayerItem]; 
           self.mPlayer = [AVPlayer playerWithPlayerItem:mPlayerItem]; 
           [mPlayerView setPlayer:mPlayer]; 
           [self play:nil]; 
          } 
          else { 
           // You should deal with the error appropriately. 
           NSLog(@"The asset's tracks were not loaded:\n%@", [error localizedDescription]); 
          } 
         }); 
    }]; 
} 

- (IBAction)play:sender { 
    [mPlayer play]; 
} 

कोड और कोड है।

+0

आपके सुझाव की तलाश में ?? – iOSPawan

+0

अभी भी इस – iOSPawan

+0

के लिए समाधान ढूंढ रहा है ऐसा लगता है कि 'loadValuesAsynchronouslyForKeys: completHandler: '' AVMetaDataItem 'पर एक विधि है, न कि' AVURLASSet' या 'AVAsset'। क्या आप पुष्टि कर सकते हैं कि 'NSURL' ऑब्जेक्ट' शून्य 'नहीं है? – sho

उत्तर

4

एकाधिक उप वीडियो में वीडियो को विभाजित करने के लिए मेरे लिए काम किया।

मैंने एक अस्थायी पथ में पूर्ण वीडियो को सहेजने के बजाय क्या किया। मैंने उस वीडियो को कई उप वीडियो में विभाजित किया और उसके बाद AVPlayerItemAVPlayer की संपत्ति को तदनुसार बदल दिया।

तो अब कार्यक्षमता वीडियो स्ट्रीमिंग के समान काम कर रही है। :)

+0

एक बहुत अच्छा समाधान की तरह लगता है – Magnus

1

आप CMSampleBuffer को भी परिवर्तित कर सकते हैं कि AVAssetReader एक CGImage में लौटता है और फिर UIImage और UIImageView में प्रदर्शित करता है, फ्रेम को प्रस्तुत करने के लिए, क्योंकि उन्हें मूल वीडियो फ़ाइल से बाहर निकाला जाता है।

AVFoundation Programming Guide के अंदर उदाहरण कोड है जो दिखाता है कि यह रूपांतरण कैसे करें।

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