iOS Media Player遥控事件(MpremoteCommand)不与Unity合作



最近,我发现MediaPlayer远程控制事件(MpremoteCommand)处理程序未通过嵌入式Unity Player在iOS应用程序中调用。我正在使用Xcode 6.3.1和Unity 5.0.1f1,但是,它看起来可以通过当前可用版本的任何组合来复制。

这是用于处理iOS上的遥控事件的官方苹果文件:P>

问题很容易复制 - 仅添加到一个空项目中的24行代码。

  1. 在Xcode中创建新的单个视图应用程序(在没有Unity Player的情况下创建工作示例)或在Unity中创建一个空项目,并立即构建IT针对iOS平台(文件 ->构建设置...,iOS,构建)所有设置都剩下默认值以获取由Unity生成的XCode项目(用嵌入式Unity Player进行破碎的示例)。

  2. appdelegate.h中的导入MediaPlayer Framework标题文件(例如没有Unity)或UnityAppController.h(例如,Unity):

    #import <MediaPlayer/MediaPlayer.h>
    
  3. 在AppDelegate.h/unityAppController.h中的类接口中声明MPMoviePlayerController对象的属性:

    @property (strong, nonatomic) MPMoviePlayerController *player;
    
  4. 插入以URL创建播放器的代码(这是一个实时广播电台,您可以使用任何其他HTTP实时音频源),注册播放,暂停和togglePlaypause远程控制事件的登记处理程序并在应用程序开始时开始播放音频(从而使应用程序成为"现在播放"应用程序):didfinishlaunchingwithoptions:appdelegate.m/unityappcontroller.mm中的方法(您还可以在该方法的返回语句之前添加它 - 't Matter):

    self.player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://81.9.96.34/eldoradio-64k"]];
    [[MPRemoteCommandCenter sharedCommandCenter].playCommand addTarget:self action:@selector(playCommand)];
    [[MPRemoteCommandCenter sharedCommandCenter].pauseCommand addTarget:self action:@selector(pauseCommand)];
    [[MPRemoteCommandCenter sharedCommandCenter].togglePlayPauseCommand addTarget:self action:@selector(togglePlayPauseCommand)];
    [self.player play];
    
  5. 将处理程序的实现添加到appdelegate.m/unityappController.mm:

    - (void)playCommand {
        [self.player play];
    }
    - (void)pauseCommand {
        [self.player pause];
    }
    - (void)togglePlayPauseCommand {
        if (self.player.playbackState == MPMoviePlaybackStatePlaying) {
            [self.player pause];
        } else {
            [self.player play];
        }
    }
    
  6. 构建并运行应用程序。

  7. ,您应该听到音乐播放的声音。
  8. 触发一些遥控事件。最简单的方法是在其上插入标准Apple Earpods并按Play pause按钮,该按钮应该生成togglePlaypause事件,但要打开iOS控制中心(您通过从底部刷屏幕获得的UI),然后按播放/暂停按钮从也可以(他们应该分别生成单独的游戏和暂停事件)。

在没有Unity音频的应用程序中,按照发送的遥控事件开始播放。在带有Unity处理程序的应用程序中,永远不会被调用(您可以在其中设置断点并在调试器下查看),并且根本没有任何事情发生。您还可以注意到,iOS控制中心的外观完全不同:在具有嵌入式统一播放器的应用程序中,它具有播放和两个倒带按钮,无论音频状态如何只需播放按钮即可播放。

您还可以用Avfoundation Framework替换MPMoviePlayerController,结果将完全相同。

有人知道这种行为和/或任何解决方法是否知道任何理由?这对我们的应用程序非常严重。

P.S。:我之前已经问过类似的问题,但没有得到任何答案。这个示例尽可能简单。

我的应用程序与您的设置几乎相同,并且存在相同的问题。只要我使用了可混合的音频会话

    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: [.DuckOthers, .InterruptSpokenAudioAndMixWithOthers])

我的应用不会触发任何mpremotecommand处理程序。

当我将音频会话变成不可混合的会话时(通过删除选项)

    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)

每当我按下播放/暂停按钮时,我的mpremotecommand处理程序都会被打电话。

因此,解决方案是使用不可混合的音频会话,playAndRecord没有明确的混合选项,而不是可混合的音频会话。

最新更新