2015-10-07 12 views
13

मैं वर्तमान में स्विफ्ट का उपयोग कर ऑडियो स्ट्रीमिंग यूआरएल के साथ एवीप्लेयर के उपयोग का परीक्षण कर रहा हूं। play() और pause() विधियां हैं, लेकिन समस्या यह है कि, केवल रुकने पर, डिवाइस डिवाइस में कैश रहती है।AVPlayer को रोकने के लिए असंभव

import UIKit 
import AVFoundation 

class ViewController: UIViewController { 

    let player = AVPlayer(URL: NSURL(string: "http://streaming.radio.rtl.fr/rtl-1-48-192")!) 

    @IBOutlet weak var btnPlay: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad()    
    } 

    @IBAction func btnPress(sender: AnyObject) { 
     if (btnPlay.titleLabel?.text == "Play") { 
      initPlayer() 
      btnPlay.setTitle("Stop", forState: UIControlState.Normal) 
     } else { 
      stopPlayer() 
      btnPlay.setTitle("Play", forState: UIControlState.Normal) 
     } 
    } 

    func initPlayer() { 
     player.play() 
    } 

    func stopPlayer() { 
     // player.currentItem = nil // Last thing I tried, but generate an error 
     player.pause() 
    } 
} 

यहाँ मुद्दे हैं जब कोशिश कर somethings:

यहाँ अपने परीक्षण कोड है

player = nil: " 'प्रकार का एक मूल्य के प्रकार' NilLiteralCOnvertible 'का मान निर्दिष्ट नहीं किया जा सकता AVPlayer ' "

player.currentItem = nil:" संपत्ति के लिए आवंटित नहीं किया जा सकता:' CurrentItem 'एक get-केवल संपत्ति "

०१२३५१६४१० है

मैंने बिना किसी प्रभावी परिणाम के AVQueuePlayer के माध्यम से सब कुछ करने की कोशिश की। (जाहिर है, क्योंकि मेरे मामले में केवल एक आइटम है)।

कैसे रोकें AVPlayer या अपने उदाहरण को नष्ट कर दें?

+1

'प्लेयर = शून्य ' या 'player.currentItem = nil'? – JAL

+0

@ जेएएल, 'प्लेयर' एवीप्लेयर का एक उदाहरण है, इसलिए मैं इसे नहीं कर सकता। कृपया 'स्टॉपप्लेयर()' फ़ंक्शन देखें, मैंने पहले से ही इस – Zl3n

+0

का परीक्षण किया है जब आप खिलाड़ी को शून्य पर सेट करने का प्रयास करते हैं तो आपको क्या त्रुटि मिल रही है? साथ ही, क्या आपने प्लेयर के वर्तमान इटिम को हटाने का प्रयास किया है जैसा मैंने सुझाव दिया था? – JAL

उत्तर

9

यदि आप वैकल्पिक चर के रूप में player घोषित करते हैं, तो आप इसे प्लेयर को nil पर डिलीकेट करने के लिए सेट कर सकते हैं।

बेवकूफ उदाहरण लेकिन यह पता चलता है कि क्या होता है:

import UIKit 
import AVFoundation 

class ViewController: UIViewController { 

    @IBOutlet weak var btnPlay: UIButton! 

    var player:AVPlayer? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    @IBAction func btnPress(sender: AnyObject) { 
     if (btnPlay.titleLabel?.text == "Play") { 
      initPlayer() 
      btnPlay.setTitle("Stop", forState: UIControlState.Normal) 
     } else { 
      stopPlayer() 
      btnPlay.setTitle("Play", forState: UIControlState.Normal) 
     } 
    } 

    func initPlayer() { 
     if let play = player { 
      print("playing") 
      play.play() 
     } else { 
      print("player allocated") 
      player = AVPlayer(URL: NSURL(string: "http://streaming.radio.rtl.fr/rtl-1-48-192")!) 
      print("playing") 
      player!.play() 
     } 
    } 

    func stopPlayer() { 
     if let play = player { 
      print("stopped") 
      play.pause() 
      player = nil 
      print("player deallocated") 
     } else { 
      print("player was already deallocated") 
     } 
    } 
} 
+0

आपके उत्तर के लिए धन्यवाद। मुझे यकीन है कि आपका समाधान काम करता है, लेकिन फ़ंक्शन 'initPlayer()' में फिर से दर्ज करते समय प्लेयर को पुन: आवंटित करने के लिए कैसे? – Zl3n

+0

'प्लेयर = एवीप्लेयर (यूआरएल: एनएसआरएल (स्ट्रिंग:" http://streaming.radio.rtl.fr/rtl-1-48-192 ")!)। ध्यान रखें कि यह जवाब सिर्फ एक * मूर्ख * उदाहरण है जो आपको यह दिखाने के लिए है कि आप वास्तव में एक खिलाड़ी को शून्य में सेट कर सकते हैं। यह प्लेयर का सही तरीके से उपयोग करने के तरीके के बारे में एक ट्यूटोरियल नहीं है। ;) – Moritz

+2

मेरा उदाहरण अपडेट किया गया। – Moritz

18

इस post से मैं सबसे अच्छा समाधान पाया पूरी तरह से AVPlayer को रोकने के लिए जाने से पहले या एक नया खिलाड़ी शुरू:

videoPlayer.replaceCurrentItemWithPlayerItem(nil) 
+0

यह सही उत्तर है। कृपया अपनी स्वीकृति के साथ उत्तर देने वाला पुरस्कार दें। –

+0

क्या आप जानते हैं कि नष्ट करने के बाद ऑडियो जारी रखने का तरीका है कि ViewController पर हमने AVPlayer का उदाहरण बनाया है। –

+0

यह काम करता है! स्विफ्ट 3 के लिए: videoPlayer.replaceCurrentItem (के साथ: शून्य) – BenHedges

0

स्विफ्ट 3 संस्करण:

player.replaceCurrentItem(with: nil) 
संबंधित मुद्दे