ozg*_*unb 6 objective-c mpmovieplayercontroller mpmovieplayer ios
在我的项目中,我曾经MPMoviePlayerController从http网址流式传输视频.它播放全屏.播放视频时,如果点击"完成"按钮,视频会停止并消失,但问题是; 如果你捏合关闭视频屏幕,视频屏幕会消失但仍然播放,视频声音继续播放.
我试图检测退出全屏通知并手动停止视频,但它不起作用.我的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");
}
Run Code Online (Sandbox Code Playgroud)
好吧,我玩了一段时间你的代码,最后在肠道中拍摄了那个小虫子.
你的第一个问题是没有保留播放器对象(假设你正在使用ARC,如果没有,那么跳过这个).因此,只需确保将其保留为实例变量,例如:
//Header File
@interface ViewController : UIViewController {
MPMoviePlayerController* _player;
}
// Implementation File
- (void)openFullVideo {
// ...
_player = player;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果那只是有效,那就太棒了!但我在苹果方面遇到了一个可怕的未解决的错误:
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;
Run Code Online (Sandbox Code Playgroud)
应该这样做!
一些其他友好的建议:
if (_player != nil)避免重新创建对象的东西.| 归档时间: |
|
| 查看次数: |
2224 次 |
| 最近记录: |