【问题标题】:Global Audio Player for tabbed App选项卡式应用程序的全局音频播放器
【发布时间】:2013-09-02 06:36:58
【问题描述】:

经过几天的研究,我得出的结论是,除了直接在这里问之外别无他法。

我有一个选项卡式应用程序,里面有几个 UITableViewControllers。当我单击这些 TableViewControllers 之一中的单元格时,应该会播放一些音频流。到目前为止,这是使用 MPMoviePlayerViewController 工作的。但是当我点击播放器中的“完成”时,音频停止播放。

我需要的是能够启动音轨,并且当我单击“完成”时它不应该停止。另外,应该有办法回到玩家身边。

我的想法是使用集成播放器制作类似“全局视图”的东西,应用程序中的所有其他视图都应该使用这个全局视图来播放选定的音频。

所以,我创建了一个 UIView,它有一个 playAudio 方法,它开始在 MPMoviePlayerViewController 中播放。但是从另一个角度去这个观点的方法是什么。现在我只是直接调用这个方法,在此之前我添加了

[self.navigationController pushViewController:mediaPlayer animated:YES];

但我认为我在这里走错了路。我想要实现的是在播放器中播放音频,当点击播放器中的“完成”时,它会留在后台。并且应该从每个视图中访问该播放器(例如,通过每个标签栏视图中的 UIButton) - 就像大多数广播应用程序和音乐应用程序一样。

不胜感激。

【问题讨论】:

    标签: ios objective-c audio background mpmovieplayer


    【解决方案1】:

    为此,您不应使用MPMoviePlayerViewController。您可以使用视图和控件创建自己的音频播放器,或使用第三方库(在 Google 上搜索有很多)。祝你好运!

    【讨论】:

      【解决方案2】:

      您不应使用 MPMoviePlayerViewController 播放音频,因为它是为播放电影而设计的。我建议使用AVPlayer 播放音频(如果您只关心本地音频并且不是从 Internet 流式传输,AVAudioPlayer 也可以。)

      当您使用 AVPlayer 播放音频时,即使您的应用进入后台,它也会继续播放。

      您的应用的视图层次结构应如下所示:

      • 根视图控制器

        • 标签栏控制器

          • 你的视图控制器放在这里
          • “正在播放”视图控制器

      “正在播放”的视图控制器将是一个视图控制器,您可以在其中放置音频控件并向用户显示正在播放的内容。您可以将正在播放的视图控制器设置为应用程序委托或根视图控制器中的属性,以便您可以轻松访问它。例如:

      id<UIApplicationDelegate> appDelegate = [[UIApplication sharedApplication] delegate];
      [self.navigationController presentViewController:appDelegate.nowPlayingViewController animated:YES completion:nil];
      

      您可以将此代码添加到需要显示“正在播放”屏幕的任何视图控制器的按钮中。

      【讨论】:

      • 哦,谢谢。那声音很棒,也很合乎逻辑。我使用 MPMoviePlayer 是因为它很容易处理。还有一个问题:音频播放器是否有默认样式,所以我不必自己控制播放器?我问是因为默认玩家风格就足够了。此外,UITableViewControllers 中会有一个“全部播放”按钮,所以我必须建立一个队列。这里可以使用AVQueuePlayer吗?
      • 很遗憾,如果你使用AVPlayer没有默认播放器,所以你必须自己构建它,但你可以使用AVQueuePlayer来排队播放音乐。另外,请采纳答案。 :)
      猜你喜欢
      • 2017-01-12
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 2011-08-09
      • 2020-10-26
      • 2020-11-15
      相关资源
      最近更新 更多