如何设置MPMoviePlayerController播放远程视频

时间:2014-03-26 09:11:40

标签: ios objective-c video mpmovieplayercontroller

有一个MPMoviePlayerController *电影播放器​​,它将在服务器上播放远程mp4文件,代码如下:

movieplayer = [[MPMoviePlayerController alloc] init];
movieplayer.view.frame = CGRectMake(0, 0, 320, 300);
movieplayer.scalingMode = MPMovieScalingModeNone;
[self.view addSubview:movieplayer.view];

有两个按钮,按钮,按钮,按钮调用a.mp4

NSString *VideoUrl = @"http://domain.com/a.mp4";
movieplayer.contentURL = [NSURL URLWithString:VideoUrl];
[movieplayer play];

bbutton打电话给b.mp4

NSString *VideoUrl = @"http://domain.com/b.mp4";
movieplayer.contentURL = [NSURL URLWithString:VideoUrl];
[movieplayer play];

我有一些问题:

  1. 如何确定电影剧正在播放并完成播放?使用停止?

  2. 如果正在播放a.mp4,我点击按钮,它会调用播放b.mp4,但仍然会播放a.mp4秒,然后跳转到b.mp4播放。

  3. 如何预加载视频?我认为前戏是行不通的。

  4. 由于

2 个答案:

答案 0 :(得分:0)

1)要检查您的MPMoviePlayerController是否正在播放,您可以查看playbackState,定义为:

enum {
   MPMoviePlaybackStateStopped,
   MPMoviePlaybackStatePlaying,
   MPMoviePlaybackStatePaused,
   MPMoviePlaybackStateInterrupted,
   MPMoviePlaybackStateSeekingForward,
   MPMoviePlaybackStateSeekingBackward
};
typedef NSInteger MPMoviePlaybackState; 

如果其值为MPMoviePlaybackStatePlaying,则您的播放器当前正在播放内容。

2)正确,但在播放新内容之前,我建议您停止前一个,等待播放器通知(播放器通知您状态更改),然后播放新内容。

3)播放器已完成播放:当播放内容时,播放器开始加载内容:播放仅在缓冲区有足够数据时开始播放(因此预载已经由玩家完成)。 您可以检查可以具有此值之一的loadState var:

enum {
   MPMovieLoadStateUnknown        = 0,
   MPMovieLoadStatePlayable       = 1 << 0,
   MPMovieLoadStatePlaythroughOK  = 1 << 1,
   MPMovieLoadStateStalled        = 1 << 2,
};
typedef NSInteger MPMovieLoadState;

如果播放器loadStateis MPMovieLoadStatePlayable,则可以开始播放。

有关详细信息,请参阅reference

答案 1 :(得分:0)

为了确定MoviePlayer播放状态,请添加通知:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(playbackStateChanged)
                                             name:MPMoviePlayerPlaybackStateDidChangeNotification
                                           object:nil];

您可以添加通知,以了解播放器何时成功加载视频。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(MPMoviePlayerLoadStateDidChange:)
                                             name:MPMoviePlayerLoadStateDidChangeNotification
                                           object:nil];

关于只是知道玩家当前是否正在玩,你可以使用

MoviePlayer.isPlaying

您是否考虑为每部电影启动两个不同的电影播放器​​并简单地切换它们?它会使我认为过渡更顺畅。

相关问题