【问题标题】:MPMoviePlayerViewController playback video after going to background for youtubeMPMoviePlayerViewController 在进入 youtube 后台后播放视频
【发布时间】:2023-03-06 21:17:01
【问题描述】:

我已在我的应用程序的 info.plist 中为所需的背景模式设置了应用程序播放音频,以保持 mpmovieplayerviewcontroller 在进入后台后不会关闭。它做得很好。但是,Apple 最近拒绝了我的应用程序更新,因为我设置了该属性。

然后我不断寻找解决方案来做同样的工作,但失败了。为了处理它,我在视图控制器收到 UIApplicationDidEnterBackgroundNotification 时保存了当前播放时间

-(void)willEnterBackground {
    NSLog(@"willEnterBackground");
    if (self.mp) {
        playbackTime = self.mp.moviePlayer.currentPlaybackTime;
        [self.mp dismissModalViewControllerAnimated:YES];
    }
}

并在收到UIApplicationWillEnterForegroundNotification后设置currentPlayBackTime:

- (void)willEnterForeground {
    NSLog(@"willEnterForeground");

    if (!self.mp)
        return;
    if(self.mp.moviePlayer.playbackState == MPMoviePlaybackStateInterrupted || self.mp.moviePlayer.playbackState == MPMoviePlaybackStateStopped || self.mp.moviePlayer.playbackState == MPMoviePlaybackStatePaused)
    {
        [self continuePlayback];
    }
}

- (void)continuePlayback {
    NSLog(@"%f", self.mp.moviePlayer.duration);
    NSLog(@"%f", playbackTime);
    [self.mp.moviePlayer stop];
    self.mp = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:[self.videos objectForKey:@"medium"]]] ;
    [self.mp.moviePlayer setInitialPlaybackTime:playbackTime];
    [self.mp.moviePlayer play];
    [self presentModalViewController:self.mp animated:YES];
}

它有效,但需要权衡: 当我重新启动它时,它丢失了流式视频部分。用户需要再次等待流媒体。

我的问题来了:

  1. 有没有办法在应用程序运行时继续流式传输 Youtube 的视频 在后台?
  2. 或者如何保留流式传输的部分?

如果我跳过该行,它将从视频的开头播放:

self.mp = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:[self.videos objectForKey:@"medium"]]] ;

在 continuePlayBack 方法中,或者我用 setCurrentPlayBackTime 而不是 setInitPlayBackTime。

【问题讨论】:

标签: ios mpmovieplayercontroller appstore-approval


【解决方案1】:

你在那里发现的东西是完全正常的——很奇怪,但很正常。 MPMoviePlayerController 仅在用于新实例时才尊重 initialPlaybackTime。实际上,我确实敦促您就该问题提交一份错误报告,因为它自古以来 (iOS3) 就已为人所知,但尚未修复。

没有办法保持缓冲区状态,您起草的解决方案与我在许多应用程序中使用的几乎相同。


现在直接回答你的问题;

re 1) 是和否。正如您自己发现的那样,Apple 确实对UIBackgroundModes 的使用非常苛刻。尽管他们明确建议使用它来实现不间断的 AirPlay 流(视频和音频内容),但当他们所做的只是播放视频时,他们仍然拒绝应用程序。我还认为苹果审查团队方面的一次史诗般的失败。您可能想尝试与他们的拒绝作斗争,引用他们自己的文档:

重要提示: UIBackgroundModes 音频键将允许应用流式传输 使用 AirPlay 在后台播放音频或视频内容。

发件人:http://developer.apple.com/library/ios/#qa/qa1668/_index.html

re 2) 否(见介绍性答案文本)


让我也从不同的角度来解决这个问题......

如果您的问题实际上是在 iOS5 上设备在通过 AirPlay 流式传输时进入睡眠模式。然后,实际上有一种可能的解决方法至少有效——即使它非常讨厌......

您可以注册MPMoviePlayerIsAirPlayVideoActiveDidChangeNotification 并在 hooked 方法中检查airPlayVideoActive。一旦 AirPlay 处于活动状态,只需通过设置 [UIApplication sharedApplication].idleTimerDisabled = YES; 来防止空闲,记住在 AirPlay 变为非活动状态后执行相反的操作。所有这些都应该只在 iOS5 上需要,因为 iOS6 修复了 AirPlay 处于活动状态时的空闲问题。

【讨论】:

  • 感谢您的回复。仅供参考,我已经引用了那句话来对抗他们的拒绝,但没有运气。他们出于同样的原因不断拒绝我的更新。当我放弃尝试时,我会接受你的回答。
  • @fattomhk 添加了部分解决方法,以便对问题进行一些补救。
  • 虽然不是我的情况,但很高兴知道iOS5可能会出现另一个问题。我放弃寻找答案,因为我想尽快发布更新。我相信有一天会有一个后台流的标志
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-02
  • 2019-07-03
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 2012-06-10
相关资源
最近更新 更多