无法检测到 MPMoviePlayerDidExitFullscreenNotification
Posted
技术标签:
【中文标题】无法检测到 MPMoviePlayerDidExitFullscreenNotification【英文标题】:Can not detect MPMoviePlayerDidExitFullscreenNotification 【发布时间】:2012-07-14 07:54:14 【问题描述】:在我的项目中,我使用 MPMoviePlayerController
从 http url 流式传输视频。它播放全屏。播放视频时,如果您点击“完成”按钮,视频会停止并消失,但问题是;如果您捏合以关闭视频屏幕,视频屏幕会消失但仍会播放,视频声音会继续播放。
我尝试检测退出全屏通知并手动停止视频,但没有成功。我的moviePlayerDidExitFullScreen
方法没有被调用。
为了控制如果我以正确的方式收到通知,我尝试收到另一个通知:MPMoviePlayerPlaybackStateDidChangeNotification
,它正在工作。它调用视频启动的方法。
我搜索了许多论坛和 Apple 文档,但找不到足够的信息。
这是我打开全屏视频并检测退出全屏的代码:
- (void)openFullVideo
NSString* path = @"http://trtvizyon.mysys.com/test/leyla_ile_mecnun.mp4";
NSURL *fileURL = [NSURL URLWithString:path];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerDidExitFullScreen:) name:MPMoviePlayerDidExitFullscreenNotification object:nil];
player.controlStyle = MPMovieControlStyleDefault;
player.movieSourceType = MPMovieSourceTypeStreaming;
[self.view addSubview:player.view];
[player setFullscreen:YES animated:YES];
[player play];
- (void) moviePlayerDidExitFullScreen:(id)sender
NSLog(@"moviePlayerDidExitFullScreen");
【问题讨论】:
【参考方案1】:好的,我用你的代码玩了一会儿,终于把那个小虫子打死了。
您的第一个问题是没有保留播放器对象(假设您使用的是 ARC,如果没有,则跳过此步骤)。因此,只需确保将其保留为实例变量,例如:
//Header File
@interface ViewController : UIViewController
MPMoviePlayerController* _player;
// Implementation File
- (void)openFullVideo
// ...
_player = player;
现在,如果这行得通,那就太好了!但是我在苹果方面遇到了一个可怕的未解决的错误:
An AVPlayerItem can occupy only one position in a player's queue at a time
要解决此问题,请这样做:
NSString* path = @"http://trtvizyon.mysys.com/test/leyla_ile_mecnun.mp4";
NSURL *fileURL = [NSURL URLWithString:path];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerDidExitFullScreen:) name:MPMoviePlayerDidExitFullscreenNotification object:nil];
player.controlStyle = MPMovieControlStyleDefault;
player.movieSourceType = MPMovieSourceTypeStreaming;
[self.view addSubview:player.view];
[player setContentURL:fileURL];
[player setInitialPlaybackTime:-1.f];
[player setFullscreen:YES animated:YES];
[player prepareToPlay];
[player play];
_player = player;
应该这样做!
其他一些友好的建议:
确保在再次播放电影之前将自己从 NSNotificationCenter 中移除。 我建议添加类似if (_player != nil)
的内容以避免重新创建对象。
【讨论】:
抱歉,我修正了一些错别字。另外,我在 ios 模拟器 4.3 和 5.1 上测试了这段代码,它在两者上都有效。 非常感谢,我已经为这个问题工作了很长时间。我试图在接口上定义 MPMoviPlayerController 但我得到了错误“一个 AVPlayerItem 一次只能占据播放器队列中的一个位置”,就像你说的那样。我认为定义“_player = player”解决了它。再次感谢...以上是关于无法检测到 MPMoviePlayerDidExitFullscreenNotification的主要内容,如果未能解决你的问题,请参考以下文章
为 UIView 添加时,UITapGestureRecognizer 无法正常工作无法检测到问题