详细介绍下ios用MPMoviePlayerController来播放视频

来源:互联网 发布:https协议端口 编辑:程序博客网 时间:2024/06/10 23:15
最近接触到ios播放视频这方面,顺便学习了一下MPMoviePlayerController这个东西,在网上找了不少资料和博客来参考,感觉这些材料都是比较旧的,也不是很详细,因为最近还算有空,就整理了一下最近项目时使用MPMoviePlayerController的一些心得:(是我自己整理的一些笔记,因为涉及还不是很深,大家适当参考)

        

视频播放:

    视频播放有几个类可以实现,其中最适合用来播放视频的就是MPMoviePlayerController(在xcode5.0以上版本后需要将其创建的变量设置为全局才能正常播放),要调用该类要#import<MediaPlayer/MediaPlayer.h>的头文件,每次通过MPMoviePlayerController创建的视频变量使用完之后都要进行销毁(非arcMPMoviePlayerController里面包含了很多通知方法用来监听视频对象,例如:(整理我觉得比较常用的几个,前面两个我觉得最重要)

MPMoviePlayerPlaybackDidFinishNotification

 当电影播放完毕或者用户按下了Done按钮后发出。

MPMoviePlayerNowPlayingMovieDidChangeNotification

当电影开始播放时调用的通知方法,当你需要视频开始播放时实现什么功能你可以使用。


 MPMoviePlayerContentPreloadDidFinishNotification

 当电影播放器结束对内容的预加载后发出。因为内容可以在仅加载了一部分的情况下播放,所以这个通知可能在已经播放后才发出。

 MPMoviePlayerScallingModeDidChangedNotification

 当用户改变了电影的缩放模式后发出。用户可以点触缩放图标,在全屏播放和窗口播放之间切换。

 

使用MPMoviePlayerController实现视频的播放具体步骤

总体的方法实现:



1.先定义一个类型的全局变量_movie(我觉得这步很重要)

@interface TKVideo2ViewController ()

{

    MPMoviePlayerController *playerVc;

}

@end

 

2.通过url播放视频方法:

// 1.获得视频播放的URL

    NSURL *videoUrl = [NSURLfileURLWithPath:filePath];


    // 2.根据url创建视频变量

    playerVc = [[MPMoviePlayerControlleralloc]initWithContentURL:videoUrl];

    

    playerVc.view.frame =CGRectMake(0,0,kScreenWidth,kScreenWidth * (9.0 /16.0));

    playerVc.scalingMode =MPMovieScalingModeAspectFill;

    playerVc.controlStyle =MPMovieControlStyleDefault;


    [self.viewaddSubview:playerVc.view];

    [playerVc play];

    //1 监听播放状态

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(stateChange)name:MPMoviePlayerPlaybackStateDidChangeNotificationobject:nil];

    //2 监听播放完成

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(finishedPlay:)name:MPMoviePlayerPlaybackDidFinishNotificationobject:nil];

    //3视频截图

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(caputerImage:)name:MPMoviePlayerThumbnailImageRequestDidFinishNotificationobject:nil];

    //4退出全屏通知

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(exitFullScreen)name:MPMoviePlayerDidExitFullscreenNotificationobject:nil];

    //5全屏播放

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(enterFullscreen)name:MPMoviePlayerDidEnterFullscreenNotificationobject:nil];


#pragma mark -监听播放状态

- (void)stateChange {

    switch (self.playerVc.playbackState) {

        caseMPMoviePlaybackStatePaused:

            NSLog(@"暂停");

            break;

        caseMPMoviePlaybackStatePlaying:

      

            NSLog(@"播放");

            break;

        caseMPMoviePlaybackStateStopped:

            //注意:正常播放完成,是不会触发MPMoviePlaybackStateStopped事件的。

            //调用[self.player stop];方法可以触发此事件。

            NSLog(@"停止");

            break;

        default:

            break;

    }

}


#pragma mark -监听播放完成

- (void)finishedPlay:(NSNotification *)notification {

     NSLog(@"播放完成");

    // 1.视频播放对象

    MPMoviePlayerController* theVideo = [notificationobject];

    // 2.销毁播放通知

    [[NSNotificationCenterdefaultCenter]removeObserver:self

                                                  name:MPMoviePlayerPlaybackDidFinishNotification

                                                 object:theVideo];

    // 播放结束移除视频对象(非arc记得release!!)

    [theVideo.viewremoveFromSuperview];


}


- (void)finishedPlayBtn {

    [self.playerVcstop];


    [self.playerVc.viewremoveFromSuperview];



}


#pragma mark -进入全屏

- (void)enterFullscreen {

    NSLog(@"进入全屏");

    CGAffineTransform landscapeTransform =CGAffineTransformMakeRotation(M_PI_2);

    self.playerVc.view.transform = landscapeTransform;


}

#pragma mark -视频截图

- (void)caputerImage:(NSNotification *)notification {

    NSLog(@"视频截图");

    

}


#pragma mark -退出全屏通知

- (void)exitFullScreen {

    NSLog(@"退出全屏");

    CGAffineTransform landscapeTransform =CGAffineTransformMakeRotation(M_PI *2);

    self.playerVc.view.transform = landscapeTransform;

    self.playerVc.fullscreen =NO;


}




还想给大家介绍的一个就是视频的controlStyle属性,他是一个枚举类型,它使视频的播放类型,我简单介绍这4个类型:(这是xcode头文件的描述,我自己也试了一下)

    MPMovieControlStyleNone,       // 没有任何控制操作

    MPMovieControlStyleEmbedded,   // 默认普通播放,但是有暂停和全屏的控制按钮

    MPMovieControlStyleFullscreen, // 默认全屏播放,有一个结束播放的done按钮,还有暂停按钮、下一个视频和上一个视频的切换按钮

    

    MPMovieControlStyleDefault = MPMovieControlStyleEmbedded // 默认的播放控制模式就是跟上面的embedded一样的意思

其他属性:

     MPMovieScalingModeNone,       // 无缩放

     MPMovieScalingModeAspectFit,  // 适应大小模式

     MPMovieScalingModeAspectFill, // 充满可视范围,可能会被裁剪

     MPMovieScalingModeFill        // 缩放到充满视图



    MPMoviePlaybackStateStopped,//停止播放
    MPMoviePlaybackStatePlaying,//正在播放
    MPMoviePlaybackStatePaused,//暂停播放
    MPMoviePlaybackStateInterrupted,//中断播放
    MPMoviePlaybackStateSeekingForward,//快进
    MPMoviePlaybackStateSeekingBackward//快退


    MPMovieControlStyleNone,       // 无控制器
    MPMovieControlStyleEmbedded,   // 嵌入视频风格
    MPMovieControlStyleFullscreen, // 全屏播放风格


    MPMovieRepeatModeNone,//播放结束后不循环
    MPMovieRepeatModeOne//循环


好了,我就给大家介绍到这里了,
1 0