Recently in one of my iOS project , there was requirement to play Video stored in temporary folder of Application data. After some hours of struggle I managed to get it working.
So the problem I was facing is I have absolute URL of the video that I was trying to play in MPMoviePlayerController but it was not working as the player was displayed for couple of seconds and it's dismissed automatically and there was a black screen.
So after sometime I found out that MPMoviePlayerController is deprecated, instead of it we shall use AVPlayer and that too was not working if I give absolute path to initialize a player. So first of all I just extracted file name fro the absolute path will following code.
NSRange range = [filePath rangeOfString:@"/" options:NSBackwardsSearch];
NSUInteger index = range.location;
filename = [filePath substringFromIndex:index+1];
Now we will initialize player. Please note you have to import AVKIt first in your header file.
#import <AVKit/AVKit.h>
Now initialize player.
NSString *outputPath = [NSTemporaryDirectory() stringByAppendingPathComponent:filename];
AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:outputPath]];
AVPlayer *_avPlayer = [[AVPlayer alloc]initWithPlayerItem:[[AVPlayerItem alloc]initWithAsset:asset]];
movieLayer = [AVPlayerLayer playerLayerWithPlayer:_avPlayer];
movieLayer.frame = self.view.bounds;
[self.view.layer addSublayer:movieLayer];
So player will be added as sublayer on the view so we have to dismiss it when video finished playing.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(videoDidFinish:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:[_avPlayer currentItem]];
And add callback function to remove player layer.
- (void)videoDidFinish:(id)notification
{
NSLog(@"finsihed");
[movieLayer removeFromSuperlayer];
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
That's it. Hope this will help you.
So the problem I was facing is I have absolute URL of the video that I was trying to play in MPMoviePlayerController but it was not working as the player was displayed for couple of seconds and it's dismissed automatically and there was a black screen.
So after sometime I found out that MPMoviePlayerController is deprecated, instead of it we shall use AVPlayer and that too was not working if I give absolute path to initialize a player. So first of all I just extracted file name fro the absolute path will following code.
NSRange range = [filePath rangeOfString:@"/" options:NSBackwardsSearch];
NSUInteger index = range.location;
filename = [filePath substringFromIndex:index+1];
Now we will initialize player. Please note you have to import AVKIt first in your header file.
#import <AVKit/AVKit.h>
Now initialize player.
NSString *outputPath = [NSTemporaryDirectory() stringByAppendingPathComponent:filename];
AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:outputPath]];
AVPlayer *_avPlayer = [[AVPlayer alloc]initWithPlayerItem:[[AVPlayerItem alloc]initWithAsset:asset]];
movieLayer = [AVPlayerLayer playerLayerWithPlayer:_avPlayer];
movieLayer.frame = self.view.bounds;
[self.view.layer addSublayer:movieLayer];
So player will be added as sublayer on the view so we have to dismiss it when video finished playing.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(videoDidFinish:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:[_avPlayer currentItem]];
And add callback function to remove player layer.
- (void)videoDidFinish:(id)notification
{
NSLog(@"finsihed");
[movieLayer removeFromSuperlayer];
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
No comments:
Post a Comment