2014-10-04 18 views
5

मैं AVPlayer के साथ एक AVMutableVideoComposition खेल रहा हूं और चूंकि IOS8 सबकुछ ठीक से ठीक था। लेकिन अब वीडियो खेलना शुरू कर देता है और 4 या 5 सेकंड के बाद यह बंद हो जाता है, जैसे बफरिंग या ऐसा कुछ, ध्वनि बजती रहती है और जब वीडियो एवीप्लेयर लूप समाप्त करता है और बिना स्टॉप के इसे ठीक चलाता है।AVPlayerItem वीडियो कॉम्पोजिशन फ्रीज IOS8

मुझे इस मुद्दे को ठीक करने के लिए कोई संकेत नहीं है।

किसी भी सहायता की सराहना की जाएगी,

आप

+1

मुझे एक ही समस्या मिल रही है। आईओएस 8. के साथ मेरा मुद्दा हो सकता है फिर भी मुझे कोई समाधान नहीं मिला ..... !!! –

उत्तर

0

मुझे एक ही समस्या थी, लेकिन मुझे समाधान मिला।

आपको खिलाड़ी के बाद खेलना चाहिए इटिम की स्थिति बदल दी गई है। ReadyToplay।

मैंने here का उत्तर भी दिया, यह समस्या आपके मुद्दे के समान है।

कृपया नीचे देखें।

func startVideoPlayer() { 
    let playerItem = AVPlayerItem(asset: self.composition!) 
    playerItem.videoComposition = self.videoComposition! 

    let player = AVPlayer(playerItem: playerItem) 
    player.actionAtItemEnd = .None 

    videoPlayerLayer = AVPlayerLayer(player: player) 
    videoPlayerLayer!.frame = self.bounds 

    /* add playerItem's observer */ 
    player.addObserver(self, forKeyPath: "player.currentItem.status", options: .New, context: nil) 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerItemDidReachEnd:", name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem); 

    self.layer.addSublayer(videoPlayerLayer!) 
} 

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    if keyPath != nil && keyPath! == "player.currentItem.status" { 
     if let newValue = change?[NSKeyValueChangeNewKey] { 
      if AVPlayerStatus(rawValue: newValue as! Int) == .ReadyToPlay { 
       playVideo() /* play after status is changed to .ReadyToPlay */ 
      } 
     } 
    } else { 
     super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context) 
    } 
}  

func playerItemDidReachEnd(notification: NSNotification) { 
    let playerItem = notification.object as! AVPlayerItem 
    playerItem.seekToTime(kCMTimeZero) 

    playVideo() 
} 

func playVideo() { 
    videoPlayerLayer?.player!.play() 
}  
0

ही यहाँ धन्यवाद, अगर यह हो सकता है पता नहीं है एक जवाब की तरह गिनती लेकिन वैसे भी, बस [AVPlayer seekToTime:AVPlayer.currentItem.duration]; खुद के द्वारा और करने के लिए पहली पाश बनाने के लिए उपयोग AVPlayer स्टॉप से ​​बचें। यही एकमात्र तरीका है जो मैंने पाया।

0

मैं एक ही समस्या हो रही थी और मैं इसे इस तरह से हल किया .. इसके बजाय सीधे AVPlayerItem को videoComposition लागू करने के .. मैं अपने वीडियो AVAssetExportSession का उपयोग कर videoComposition, जो बदले में मुझे एक वीडियो के साथ एक यूआरएल देता है लागू करने के लिए निर्यात की मेरे सभी वीडियो कॉम्पोजिशन लागू किए गए हैं और अब मैं AVPlayer पर वीडियो चलाने के लिए इस contentURL का उपयोग कर सकता हूं .. यह एक आकर्षण की तरह काम करता है .. वीडियो निर्यात करने में समय लगेगा, लेकिन अब वीडियो कंपोज़िशन को प्रस्तुत करने पर नहीं चल रहा है, यह आसानी से काम करेगा ..

वीडियो का निर्यात करने के लिए निम्नलिखित कोड का उपयोग किया जा सकता है ..

AVAssetExportSession *export = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPreset1280x720]; 

export.videoComposition = videoComposition; 
export.outputURL = [NSURL fileURLWithPath:[[NSTemporaryDirectory() stringByAppendingPathComponent:[NSUUID new].UUIDString] stringByAppendingPathExtension:@"MOV"]]; 
export.outputFileType = AVFileTypeQuickTimeMovie; 
export.shouldOptimizeForNetworkUse = YES; 

[export exportAsynchronouslyWithCompletionHandler:^{ 
dispatch_async(dispatch_get_main_queue(), ^{ 
    if (export.status == AVAssetExportSessionStatusCompleted) { 

    completionHander(export.outputURL, nil); 

    } else { 

    completionHander(nil, export.error); 

    } 
}); 
}]; 
संबंधित मुद्दे