菜鸟教程小白 发表于 2022-12-11 22:42:27

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


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

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

<pre><code>2012-04-17 11:37:41.198 NexTest2 *** Terminating app due to uncaught exception &#39;CALayerInvalidGeometry&#39;, reason: &#39;CALayer position contains NaN: &#39;
</code></pre>

<p>viewController.m</p>

<pre><code>- (void)viewDidLoad{
;   
fileURL = ;
moviePlayerController = [ initWithContentURL:fileURL];
moviePlayerController.controlStyle = MPMovieControlStyleNone;
;
;   

/* Inset the movie frame in the parent view frame. */
CGRect viewInsetRect = CGRectInset (,0.0, 0.0 );
[ setFrame: viewInsetRect ];
;
;
}
</code></pre>

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

<pre><code>-(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;
;
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;
;
}
</code></pre>

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

<p>我添加了这些观察者来控制播放:</p>

<pre><code>//Add the observers to the player
-(void)addObservers{
[ addObserver:self selector:@selector(playbackStarted:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];
[ addObserver:self selector:@selector(setDurationLabel:) name:MPMovieDurationAvailableNotification object:nil];
[ addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
[ addObserver:self selector:@selector(keyWindowChanged:) name:UIWindowDidBecomeKeyNotification object:nil];

}
</code></pre>

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

<pre><code>//called when the playback state changes of state
- (void)playbackStarted:(NSNotification*)notification {
MPMoviePlayerController *player = notification.object;
if (player.playbackState == MPMoviePlaybackStatePlaying) {
    ;
}
}
</code></pre>

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

<pre><code>-(void)timerRunning{
self.currentTime.text = ;
self.timeBar.value = moviePlayerController.currentPlaybackTime / moviePlayerController.duration;

if (moviePlayerController.playbackState == MPMoviePlaybackStatePlaying) {
    ;
}      
}
</code></pre>

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

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

<pre><code>self.timeBar.value = moviePlayerController.currentPlaybackTime / moviePlayerController.duration;
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>检查您的 UI 相关代码。在从播放器获取和使用与内容相关的属性之前,您很可能没有正确检查播放器状态。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 如何在同一个 MPMoviePlayerController 中播放另一个视频?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/10189031/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/10189031/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 如何在同一个 MPMoviePlayerController 中播放另一个视频?