• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

iphone - 如何在同一个 MPMoviePlayerController 中播放另一个视频?

[复制链接]
菜鸟教程小白 发表于 2022-12-11 22:42:27 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

*我正在创建一个可以观看视频的 iPhone 应用程序... 我一直在制作自己的控件,所以我想实现下一个,后退按钮,我可以显示主题,所以对于 UI,一切都很好,问题是用另一个内容重新启动 MoviePlayer... 有什么想法???

播放完成后我可以使用相同的配置,我的意思是...如果视频结束播放开始播放另一个... 我尝试设置 contentUrl 但它引发了异常:

2012-04-17 11:37:41.198 NexTest2[8218:11f03] *** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan 11.5]'

viewController.m

- (void)viewDidLoad{
[super viewDidLoad];    
fileURL = [NSURL URLWithString:urlString];
moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];
moviePlayerController.controlStyle = MPMovieControlStyleNone;
[moviePlayerController setShouldAutoplay:YES];
[self addObservers];   

/* Inset the movie frame in the parent view frame. */
CGRect viewInsetRect = CGRectInset ([self.view bounds],0.0, 0.0 );
[[moviePlayerController view] setFrame: viewInsetRect ];
[self.view addSubview:moviePlayerController.view]; 
[self resizeControlViews];
}

然后在 resizeControlViews 我有这个,因为我正在使用这两个 View ,如控件:

-(void)resizeControlViews{
CGRect barFrame = self.controlBarView.frame;
barFrame.origin.x = round((moviePlayerController.view.frame.size.width - barFrame.size.width) / 2.0);
barFrame.origin.y = round((moviePlayerController.view.frame.size.height - barFrame.size.height)/10.0);
self.controlBarView.frame = barFrame;
[moviePlayerController.view addSubview:controlBarView];
CGRect playFrame = self.controlPlaybackView.frame;
playFrame.origin.x = round((moviePlayerController.view.frame.size.width - playFrame.size.width) / 2.0);
playFrame.origin.y = round((moviePlayerController.view.frame.size.height - playFrame.size.height)/1.1);
self.controlPlaybackView.frame = playFrame; 
[moviePlayerController.view addSubview:controlPlaybackView];
}

这里一切正常,其中一个 View 有一个控制搜索的 slider ,另一个是播放、下一步和后退按钮。 我认为问题可能出在这些 View 的 UI 组件上......

我添加了这些观察者来控制播放:

//Add the observers to the player
-(void)addObservers{
[[NSNotificationCenter defaultCenter] addObserver:self selectorselector(playbackStarted name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selectorselector(setDurationLabel name:MPMovieDurationAvailableNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selectorselector(moviePlayBackDidFinish name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selectorselector(keyWindowChanged name:UIWindowDidBecomeKeyNotification object:nil];

}

为了在播放器播放时进行处理,我将 MPMoviePlayerPlaybackStateDidChangeNotification 与此选择器一起使用:

//called when the playback state changes of state
- (void)playbackStartedNSNotification*)notification {
MPMoviePlayerController *player = notification.object;
if (player.playbackState == MPMoviePlaybackStatePlaying) {
    [self timerRunning];
}
}

如果播放器正在“播放”,我会使用以下方法对其进行监控:

-(void)timerRunning{
self.currentTime.text = [self floatToStringTimemoviePlayerController.currentPlaybackTime)];
self.timeBar.value = moviePlayerController.currentPlaybackTime / moviePlayerController.duration;

if (moviePlayerController.playbackState == MPMoviePlaybackStatePlaying) {
    [self performSelectorselector(timerRunning) withObject:nil afterDelay:0.5];
}        
}

所以也许这就是问题所在...但是对于单个视频,它可以完美运行...

我有四个错误在哪里...是在我在线监视以将值设置为 slider 时,但我真的不知道为什么,我认为这是另一个视频或停止时的原因视频它仍在执行,因此播放器没有持续时间或当前播放导致此异常的原因...我该如何解决...这是错误...可能将此代码移至另一部分...

self.timeBar.value = moviePlayerController.currentPlaybackTime / moviePlayerController.duration;



Best Answer-推荐答案


检查您的 UI 相关代码。在从播放器获取和使用与内容相关的属性之前,您很可能没有正确检查播放器状态。

关于iphone - 如何在同一个 MPMoviePlayerController 中播放另一个视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10189031/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap