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];
}
}
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.
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];
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With