Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change AVPlayer Live Streaming URL?

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];
    }
}
like image 457
Nisar Ahmad Avatar asked Apr 19 '17 08:04

Nisar Ahmad


2 Answers

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.

like image 77
Esteban Vallejo Avatar answered Oct 23 '22 07:10

Esteban Vallejo


Finally i found the solution by replacing the current item in AVPlayer instead of changing the Streaming URL in the Player.

 - (void)viewDidLoad {
   [super viewDidLoad];
   // Do any additional setup after loading the view.

   _streamPlayer = [[AVPlayer alloc] init];
}


- (IBAction)playBtn_clicked:(id)sender {

  NSURL *streamURL = [NSURL URLWithString:_urlString];
  AVPlayerItem *currentItem = [[AVPlayerItem alloc] initWithURL:streamURL];
  [_streamPlayer replaceCurrentItemWithPlayerItem:currentItem];
}
like image 44
Nisar Ahmad Avatar answered Oct 23 '22 06:10

Nisar Ahmad