I am trying to play movies from a view controller. I am using the code below to do that:
VideoPlayerViewController* moviePlayer = [self.storyboard instantiateViewControllerWithIdentifier:#"videoPlayerController"];
moviePlayer.view.frame = rect;
UIWindow *window = [[[UIApplication sharedApplication] windows] lastObject];
[window.rootViewController presentViewController:moviePlayer animated:NO completion:nil];
[moviePlayer playMoviesForItems:items];
Normally it works fine. But sometimes, movie starts but I cannot see the video, just I can hear the sounds.
What is the best way to play video on top of everything?
NSString *path = [[NSBundle mainBundle] pathForResource:#"myVideo" ofType:#"mp4"];
MPMoviePlayerController *myPlayer = [[MPMoviePlayerController alloc] init];
myPlayer.shouldAutoplay = YES;
myPlayer.repeatMode = MPMovieRepeatModeOne;
myPlayer.fullscreen = YES;
myPlayer.movieSourceType = MPMovieSourceTypeFile;
myPlayer.scalingMode = MPMovieScalingModeAspectFit;
myPlayer.contentURL =[NSURL fileURLWithPath:path];
[self.view addSubview:myPlayer.view];
[myPlayer play];
Another solution would be to segue to another ViewController and dissmiss it when the movie ends.
You can also try using AVPlayer. In that case, you can play the video in your current view itself without having a separate overlay for the video.
Here's an example of playing multiple AVPlayers. You can modify the code to play a single video.
Related
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *videoURL = [[NSBundle mainBundle]URLForResource:#"thoughtcastAnimate_v02" withExtension:#"mov"];
// create an AVPlayer
AVPlayer *player = [AVPlayer playerWithURL:videoURL];
// create a player view controller
AVPlayerViewController *controller = [[AVPlayerViewController alloc]init];
controller.player = player;
[player play];
// show the view controller
[self addChildViewController:controller];
[self.view addSubview:controller.view];
controller.view.frame = self.view.frame;
// Do any additional setup after loading the view.
}
This works fine with an mp4 file. But I need a .mov file to be played! This is for my application splash screen. I added the .mov file to the assets. Not sure what to do here.
I just needed to add my mov file to the Build Phases
If I hit below url in browser, it plays video but my below code is not playing it on iPhone.
http://ec2-107-21-15-206.compute-1.amazonaws.com:8000/static/uploads/1337/photos/5819/38111.mp4
MPMoviePlayerController *moviePlayer=[[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:#"http://ec2-107-21-15-206.compute-1.amazonaws.com:8000/static/uploads/1337/photos/5819/38111.mp4"]];
moviePlayer.controlStyle=MPMovieControlStyleDefault;
moviePlayer.shouldAutoplay=YES;
[self.view addSubview:moviePlayer.view];
[moviePlayer setFullscreen:YES animated:YES];
this is the screenshot of the iPhone.
MPMoviePlayerController is deprecated. You can use AVPlayer instead.
AVPlayer *player = [AVPlayer playerWithURL:"URL"];
AVPlayerViewController *controller = [[AVPlayerViewController alloc] init];
[self presentViewController:controller animated:YES completion:nil];
controller.player = player;
[player play];
You need to tell the MPMoviePlayerController that it needs to stream the video. Just add the following line:
moviePlayer.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;
yes , you have to tell its streaming url as :
moviePlayer.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;
then prepare to play
[moviePlayer prepareToPlay];
I am Using AVPlayerViewController here in portrait mode it looks fine but when i change the orientation to landscape mode the player gets too small it look like single tool bar. How can i fix the player size in both portrait mode and in landscape mode and it should be flexible when the device size also changes or can we fix it to the screen centre so the little size difference won't matter if played on bigger device size 6s Plus.
NSString *localfilepath=[NSString stringWithFormat:#"%#",[managedObject valueForKey:#"clip_path"]];
NSURL *url = [NSURL URLWithString:[localfilepath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
player = [AVPlayer playerWithURL:url];
AVPlayerViewController *controller = [[AVPlayerViewController alloc] init];
[self addChildViewController:controller];
[self.view addSubview:controller.view];
controller.view.frame = CGRectMake(10,80,controller.view.frame.size.height+(self.view.frame.size.width/1.6),self.view.frame.size.width/1.2);
controller.player = player;
controller.showsPlaybackControls = YES;
//player.closedCaptionDisplayEnabled = NO;
// [player pause];
[player play];
The following MPMoviePlayerController will not present in my iOS application.
I am trying to make it appear when my tableView row is selected:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:videoUrl]];
[player setFullscreen:YES];
[player play];
[self.tableView addSubview:player.view];
}
Any ideas?
Instead try:
MPMoviePlayerViewController *player = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:videoUrl]];
[player prepareToPlay];
[self presentViewController:player animated:YES completion:nil];
I wouldn't add the view as a subview of a table view if I were you.
You have forgotten to give player.view a size.
You have forgotten to say prepareToPlay to the player. An MPMoviePlayerController absolutely will not play until you have done that.
i need to play the MPMoviePlayerController over a layer of UIView. But only sound that came out, no video.
theMovie = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
[theMovie prepareToPlay];
theMovie.view.frame = CGRectMake(0, 0, 200, 150);
[theMovie setControlStyle:MPMovieControlStyleDefault];
[theMovie setFullscreen:NO animated:YES];
theMovie.shouldAutoplay = YES;
[theMovie setContentURL:movieURL];
[self addSubview:theMovie.view];
[theMovie play];
I only got a black screen, and only audio. Is this because i called the UIView as layer and not as subview? Because my requirement is to call the UIView as layer.
It looks good,try adding this:
[_openingMovie setMovieSourceType:MPMovieSourceTypeStreaming];
Hope this helps
Edit
try setting ContentURL after Setting the SourceType like below,
moviePlayerController_ = [[MPMoviePlayerViewController alloc] init];
moviePlayerController_.movieSourceType = MPMovieSourceTypeStreaming;
[moviePlayerController_.moviePlayer setContentURL:url];
This code snap is from:
An AVPlayerItem cannot be associated with more than one instance of AVPlayer'