gpt4 book ai didi

objective-c - 无法检测到 MPMoviePlayerDidExitFullscreenNotification

转载 作者:可可西里 更新时间:2023-11-01 03:49:49 24 4
gpt4 key购买 nike

在我的项目中,我使用 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");
}

最佳答案

好的,我玩了一会儿你的代码,终于解决了那个小错误。

您的第一个问题是没有保留播放器对象(假设您使用的是 ARC,如果不是,则跳过此步骤)。因此,只需确保将其保留为实例变量,例如:

//Header File
@interface ViewController : UIViewController {
MPMoviePlayerController* _player;
}

// Implementation File
- (void)openFullVideo {
// ...
_player = player;
}

现在,如果这能奏效,那就太好了!!但是我在苹果方面遇到了一个可怕的 Unresolved 错误:

一个 AVPlayerItem 一次只能占据玩家队列中的一个位置

要解决这个问题,可以这样做:

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) 的内容以避免重新创建对象。

关于objective-c - 无法检测到 MPMoviePlayerDidExitFullscreenNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11482045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com