有一个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];
我有一些问题:
如何确定电影剧正在播放并完成播放?使用停止?
如果正在播放a.mp4,我点击按钮,它会调用播放b.mp4,但仍然会播放a.mp4秒,然后跳转到b.mp4播放。
如何预加载视频?我认为前戏是行不通的。
由于
答案 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
您是否考虑为每部电影启动两个不同的电影播放器并简单地切换它们?它会使我认为过渡更顺畅。