Search code examples
iosiphoneswiftavaudioplayer

How to turn off audio from a video using AVAudioPlayer?


I have a simple camera that records a video then transitions to a videoPreview. In it there is a button that hwne presses segues back to the camera. However hwen I do this the video audio does not stop. How can I delete it (not mute) so that a new vid can be taken?

Bellow is my Video preview code with what I have attempted

    class VideoPlayback: UIViewController {

    //receives url video value from VideoViewController
    var videoURL: URL!

    //place where video gets displayed
    @IBOutlet weak var videoView: UIView!

    var avPlayer = AVPlayer()

    private var playerQueue: AVQueuePlayer!
    private var playerItem1: AVPlayerItem!
    private var playerLooper: AVPlayerLooper!
    private var playerLayer: AVPlayerLayer!

    override func viewDidLoad() {
        super.viewDidLoad()

        print(avPlayer, "avPlayer")
        print("videoURL", videoURL)

        playerItem1 = AVPlayerItem(url: videoURL as URL)
        print(playerItem1, "playerItem1")

        playerQueue = AVQueuePlayer(playerItem: playerItem1)
        print(playerQueue, "player queue")

        playerLayer = AVPlayerLayer(player: playerQueue)
        print(playerLayer, "playerLayer")

        playerLooper = AVPlayerLooper(player: playerQueue, templateItem: playerItem1)
        print(playerLooper, "player looper")

        playerLayer.frame = view.bounds
        playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
        print(videoView, "yruewioq")
        videoView.layer.insertSublayer(playerLayer, at: 0)

        view.layoutIfNeeded()
        self.playerQueue?.play()
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        //attempt at turing audio off
        playerQueue = nil
    }
    @IBAction func cancelVidPreviewButton(_ sender: Any) {
        performSegue(withIdentifier: "cancelVideo", sender: self)
    }
}

Update:

I have also tried playerLayer.isMuted = true But I get that it has no member isMuted


Solution

  • So I see that actually what needs to be done here is all the video data which has audio needs to be removed as seen bellow

            self.playerQueue?.removeAllItems()
    

    But if you want to get rid of audio you just need to do .pause() and then remove the data. here is docs