如何更改AVPlayer的直播流URL?

15

各位开发者和专家,我需要您们的好建议和帮助。我正在开发一个应用程序,其中包含四个不同的电台频道(按钮)。我正在使用AVPlayer进行直播流媒体传输。我想在ViewDidLoad中创建一个AVPlayer对象,并通过使用四个不同的按钮来改变流媒体的URL地址,而无需一遍又一遍地重新创建AVPlayer对象。我已经搜索了谷歌,但没有找到任何解决方案。因此,非常感谢您的好建议和帮助。谢谢

- (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];
    }
}

你能提供代码吗?这样我们才能帮助你。 - NAVEEN KUMAR
我的代码非常简单。我不想一遍又一遍地创建播放器。我想在viewDidLoad中创建它,只需通过点击按钮更改URL即可。 - Nisar Ahmad
2个回答

28
AVPlayer有一个方法可以将"currentItem"更改为新的项目。
在ViewDidLoad()中。
let player = AVPlayer(playerItem: nil) // You can use an item if you have one

那么,当您想要更改当前项目时...或者将其设置为nil以删除它...

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

注意:是Swift 3版本,我手头没有它的Objective-C版本。

通过这种方式,您可以创建一个AVPlayer的单个实例,并处理当前正在播放的AVPlayerItem。


2
[player replaceCurrentItemWithPlayerItem:[AVPlayerItem playerItemWithURL:streamingURL]]; ObjC: - Hans Knöchel

11

最后,我通过替换AVPlayer中的当前项目而不是更改播放器中的流媒体URL来找到了解决方案。

 - (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];
}

1
我很高兴你找到了解决方案,但那正是我在上面的评论中指出的(除了我的是在Swift 3中)。所以,如果你认为我的评论对你有帮助,将其标记为正确答案会很好。祝你编码愉快! - Esteban Vallejo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接