2013-03-13 103 views
1

播放视频我已经在我的应用程序的info.plist中设置应用程序播放音频为所需的背景模式,以保持mpmovieplayerviewcontroller后不去背景后解雇。它做得很好。然而,苹果公司最近拒绝了我的应用程序的更新,因为我设置了该属性。MPMoviePlayerViewController播放视频后为youtube

然后我一直在找同样的工作但失败的解决方案。为了对付它,我救currentplaybacktime当视图控制器接收使用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:

它将从视频的开头,如果我跳过线玩。

+0

http://stackoverflow.com/questions/13023241/continue-playing-movie-in-mpmovieplayerviewcontroller-in-background/21752593#21752593 – 2014-02-13 11:15:45

回答

3

你发现了什么是完全正常的 - 很奇怪,但正常。 MPMoviePlayerController仅在新实例上使用时才会考虑initialPlaybackTime。我确实希望你提交一个关于这个问题的错误报告,因为它自从年龄以来就已经知道了(iOS3),但并未修复。

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


现在直接回答你的问题;

re 1)是和否。正如你自己发现的那样,苹果的使用情况确实非常恶劣。即使他们明确推荐使用它来实现不间断的AirPlay流(视频和音频内容),但他们在播放视频时仍会拒绝应用。我也考虑过苹果审查小组史上的失败。你可能会想尝试争取他们的拒绝,引用自己的文件:

重要:的UIBackgroundModes音频键将允许应用流使用AirPlay的背景 音频或视频内容。

来源:http://developer.apple.com/library/ios/#qa/qa1668/_index.html

重2)否(见introductional答复文件)


还让我从不同的侧面解决这个问题...

如果您的问题实际上是在iOS5设备在通过AirPlay进行流式传输时进入睡眠模式。然后,实际上有一个可能的解决方法,至少可以工作 - 即使它是讨厌的地狱......

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

+0

感谢您的回复。仅供参考,我已经引用了这句话来对抗他们的拒绝,但没有运气。他们为了同样的原因不断拒绝我的更新。当我放弃尝试时,我会接受你的回答。 – Horst 2013-03-15 09:48:57

+0

@fattomhk在这个问题上增加了一个部分解决方法。 – Till 2013-03-15 17:18:21

+0

虽然这不是我的情况,但很高兴知道iOS5中可能会发生另一个问题。我放弃寻找答案,因为我想尽快发布更新。我相信有一天会有背景流的标志 – Horst 2013-03-18 04:27:11