您的位置:首页 > 产品设计 > 产品经理

MPMoviePlayerController-播放视频文件

2014-12-11 11:04 344 查看
如果你只是想显示一个全屏的视频播放器,你可以使用MPMoviePlayerViewController 类,(举例来说)你可以将你的影片播放视图控制器推入到一 个导航控制器的视图控制器栈上,或者简单的使用 UIViewController 的 presentMoviePlayerViewControllerAnimated:实例方法,在别的控制器上展示你的影片播放视 图控制器。 
 
MPMoviePlayerController 实例有一个 view 的属性。这个视图是一个 UIView 类型,而且 他是诸如视频之类的媒体播放的那个视图。作为程序员,你有责任将这个视图插入到你的应 用中的视图结构中,为你的用户展示播放的内容。因为你得到了一个
UIView 对象的引用, 你可以按照自己的想法修改这个视图。例如,你可以将视图的背景色修改为自定义颜色。 

 
很多的多媒体操作依赖通知系统。例如,MPMoviePlayerController 并不和委托一起工作,作为替代,它依靠通知。这允许在系统库和 iOS 开发者写的程序代码间,实现非常灵活 的解耦。对于像 MPMoviePlayerController 的类,我们只要监听那个类所发出的通知就好了。我们使用默认的通知中心,并将我们自己加为某个通知的观察者。 

 

开始尝试写一个播放视频的简单例子:

.h

#import <UIKit/UIKit.h>

#import <MediaPlayer/MediaPlayer.h>

@interface ViewController :
UIViewController

@property (nonatomic,strong)MPMoviePlayerController *moviePlayer;

@property (nonatomic,strong)UIButton *playButton;

@end
 

.m

实现播放的方法

 

- (void)startPlayingVideo:(id)paramSender{

    //创建视频的URl

    NSString *filePath = [[NSBundlemainBundle]pathForResource:@"Sample"ofType:@"m4v"];

    NSURL *url = [NSURLURLWithString:filePath];

    //如果早先已经创建了一个视频播放器,要停止它

    if (self.moviePlayer !=nil) {

        [selfstopPlayingVideo:nil];

    }

    

    //创建一个新的视频播放器

    _moviePlayer = [[MPMoviePlayerControlleralloc]initWithContentURL:url];

    if (self.moviePlayer !=nil) {

        /* Listen for the notification that the movie player sends us

         whenever it finishes playing an audio file */

        [[NSNotificationCenter
defaultCenter]addObserver:selfselector:@selector(videoHasFinishedPlaying:)name:MPMoviePlayerPlaybackDidFinishNotificationobject:_moviePlayer];

        NSLog(@"Successfully instantiated the movie player.");

        _moviePlayer.scalingMode =MPMovieScalingModeAspectFit;

        [_moviePlayer
play];

        [self.viewaddSubview:_moviePlayer.view];

        [_moviePlayersetFullscreen:YESanimated:YES];

    }else{

        NSLog(@"Failed to instantiate the movie player.");

    }

}

如果我们将影片播放器的视图添加到视图控制
器的视图上面,之后我们需要手动的移除它。即使我们释放了影片播放器,它的视图也不会
被视图控制器释放。下面的方法停止播放视频并将其相关的视图移除。


- (void) stopPlayingVideo:(id)paramSender{

    if (_moviePlayer !=nil) {

        [[NSNotificationCenterdefaultCenter]removeObserver:selfname:MPMoviePlayerPlaybackDidFinishNotificationobject:_moviePlayer];

        [_moviePlayer
stop];

        if ([_moviePlayer.view.superviewisEqual:self.view])
{

            [_moviePlayer.viewremoveFromSuperview];

        }

    }

}
在视图控制器的 startPlayingVideo:实例方法中,我们注册了 MKMoviePlayerViewController 发送到默认通知中心的 MPMoviePlayerPlaybackDidFinishNotification 通知。我们在视图控制器的 videoHasFinishedPlaying:实例方法中监听这个通知。在这里,我们可以得知影片已经完成播放,然后可能处理影片播放对象: 

 

- (void)videoHasFinishedPlaying:(NSNotification *)paramNotification{

    /* Find out what the reason was for the player to stop */

    NSNumber *reason = [paramNotification.userInfovalueForKey:MPMoviePlayerPlaybackDidFinishNotification];

    if (reason !=
nil) {

        NSInteger reasonAsInteger = [reason
integerValue];

        switch (reasonAsInteger) {

            caseMPMovieFinishReasonPlaybackEnded:

                /*播放正常结束*/

                break;

            caseMPMovieFinishReasonPlaybackError:

                /*发生了一个错误使播放结束*/

                break;

            caseMPMovieFinishReasonUserExited:

                /*用户结束了播放*/

                break;

            default:

                break;

        }

        NSLog(@"Finish Reason = %ld", (long)reasonAsInteger);

        [selfstopPlayingVideo:nil];

    }

}


解决pathForResource返回nil的问题

http://www.it165.net/os/html/201301/4327.html
http://blog.csdn.net/zttjhm/article/details/38063605  ios下视频边下载连播放实现
_itemFailedToPlayToEnd: {

    kind = 1;
    new = 2;
    old = 0;
} 视频播放出现此问题 ,解决:
http://blog.csdn.net/zttjhm/article/details/8581189
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: