2013-05-28 10 views
14

मैं MPMoviePlayerController से AVPlayer पर स्विच कर रहा हूं क्योंकि मुझे वीडियो स्वैपिंग पर बेहतर अनाज नियंत्रण की आवश्यकता है। .mov फ़ाइल मैं MPMoviePlayerController के साथ खेल रहा था ठीक है, लेकिन AVPlayer पर स्विच करने के बाद मैं वीडियो से ऑडियो सुनता हूं, लेकिन वीडियो सिर्फ दृश्य पृष्ठभूमि दिखाता है जिसे मैंने AVPlayerLayer जोड़ा। यहां बताया गया है कि मैं AVPlayer कैसे शुरू कर रहा हूं।एवीप्लेयर वीडियो खाली लेकिन सुनवाई ध्वनि

self.player = [[AVPlayer alloc] initWithURL:video]; 

AVPlayerLayer* playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player]; 
playerLayer.frame = self.playerContainer.bounds; 
[self.playerContainer.layer addSublayer:playerLayer]; 

बाद में मैं बस एक जारी करता हूं।

[self.player play]; 

जब वीडियो चलाता है तो मैं ऑडियो सुनता हूं, लेकिन कोई वीडियो नहीं देखता। मैंने zPosition को कोई भाग्य नहीं सेट करने का भी प्रयास किया।

playerLayer.zPosition = 1; 

उत्तर

7

पता चला कि यह AutoLayout का उपयोग करने का परिणाम था। viewDidLoad में self.playerContainer.bounds एक CGRectZero है।

मुझे प्लेयरकेंटर से मेल खाने के लिए viewDidAppear में प्लेयरलेयर फ्रेम असाइन करना पड़ा।

+1

मैं ऑटोलाउट का उपयोग नहीं करता लेकिन एक ही समस्या है। http://stackoverflow.com/questions/16872193/avqueueplayer-shows-black-screen-when-called-from-app-delegate आप इसे कैसे हल कर सकते हैं? – Burak

+0

मेरे लिए वीडियो एक CGRectZero था और दिखाई नहीं दे रहा था। यह वास्तव में एक 0.0x0.0 स्क्रीन में, वास्तव में खेल रहा था। –

+0

@ गैरी मुझे एक ही समस्या है लेकिन मैकोज़ प्रोजेक्ट के साथ - मैं ध्वनि सुनता हूं लेकिन कोई वीडियो सिर्फ ब्लैक विंडो नहीं है - यहां मेरा कुल कोड है: 'fileURL = URL (string: "http://commondatastorage.googleapis.com/gtv -Videos-बाल्टी/नमूना/BigBuckBunny.mp4 ") जाने avAsset = AVURLAsset (यूआरएल: fileURL !, विकल्प: शून्य) जाने playerItem = AVPlayerItem (संपत्ति: avAsset) videoPlayer = AVPlayer (playerItem: playerItem) जाने playerView = self.playerView प्लेयर व्यू? .player = videoPlayer वीडियो प्लेयर.प्ले() 'कोई भी विचार जो मुझे वीडियो दिखाने के लिए इसमें जोड़ने की ज़रूरत है? –

1

जब से हम AVPlayerLayer (CALayer का एक उपवर्ग) का उपयोग, हम फ्रेम निर्धारित करने की आवश्यकता

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 

    self.avPlayerLayer.frame = self.movieContainerView.bounds; 
} 
0

सुनिश्चित करें कि आप बयान है कि वीडियो निभाता करें:

[self.player play] 

मुख्य प्रेषण से शुरू हो जाती है इस तरह कतार (स्विफ्ट 3):

DispatchQueue.main.async { 
    self.player.play() 
} 
+0

क्षमा करें, यह मेरी मदद नहीं की थी। –

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