How to change AVPlayer Live Streaming URL?

Nisar Ahmad picture Nisar Ahmad · Apr 19, 2017 · Viewed 8.1k times · Source

Hi developers and experts, I need your good suggestions and help. I am working an application which has four different radio channels(buttons). I am using AVPlayer for live streaming. I would like to create an AVPlayer object in ViewDidLoad and just change the streaming url by using the four different buttons without having to re-create the AVPlayer object again and again. I googled but not find any solution. So your good suggestions and help would be appreciated. Thanks

- (IBAction)playBtn_clicked:(id)sender {

     NSURL *streamURL = [NSURL URLWithString:urlString];

    // I don't like this line, creating a new object again and again
    _streamPlayer = [[AVPlayer alloc] initWithURL:streamURL]; 

    if (_streamPlayer.rate == 1.0) {
        [_streamPlayer pause];
    } else {
        [_streamPlayer play];
    }
}

Answer

Esteban Vallejo picture Esteban Vallejo · Jun 1, 2017

AVPlayer has a method to change the "currentItem" to the new one.

On ViewDidLoad()

let player = AVPlayer(playerItem: nil) // You can use an item if you have one

Then, when you want to change the current item... Or set nil to remove it...

player.replaceCurrentItem(with: AVPlayerItem(url: streamingURL))

NOTE: Yeah, it's in Swift 3, I don't have it's ObjC version at hand.

This way, you can create one single instance of AVPlayer, and handle the current AVPlayerItem being played.