Skip to content

MobileVLCKit 3.3.17 play and play after stop, caused crash(EXC_BAD_ACCESS).

Hi,

(First, sorry my poor English....)

EXC_BAD_ACCESS will occur when call stop() during playback then call play().


pattern 1 : occur

     play() -> stop() -> play()

pattern 2 : not occur

     stop() -> play()

pattern 3 : not occur

     play() -> play()


Do I need to destroy the object or do some initialization?


Thanks,
Kimoto

[Test Code(Please refer //comment)]

    var mediaPlayer: VLCMediaPlayer = VLCMediaPlayer(options: ["-vvvv"])
    var mediaPlayerStopped: Bool = true

    override func viewDidLoad() {
        super.viewDidLoad()

        let gesture = UITapGestureRecognizer(target: self, action: #selector(liveViewTapped(_:)))
        self.liveView.addGestureRecognizer(gesture)
    }
    
    override func viewDidAppear(_ animated: Bool) {
       let targetUrl = URL(string: "rtsp://\(targetIPAddress)/h264")!
       let media = VLCMedia(url: targetUrl)
       mediaPlayer.media = media
       mediaPlayer.delegate = self
       mediaPlayer.drawable = self.liveView
       mediaPlayer.play()                         // 1. The video will display correctly.
       mediaPlayerStopped = false
    }

    @objc func liveViewTapped(_ sender:UITapGestureRecognizer){
        //if mediaPlayer.isPlaying {              // !! This flag cannot be used after stop()
        if !mediaPlayerStopped{
            mediaPlayer.stop()                    // 2. The video will be stopped.
            mediaPlayerStopped = true
        }else{
            mediaPlayer.play()                    // 3. EXC_BAD_ACCESS will occur. 
            mediaPlayerStopped = false
        }
    }

EXC_BAD_ACCESS_2021-08-24_9.53.33

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information