利用MediaPlayer框架进行视频播放

时间:2022-08-31 22:53:02

一、概述:

在苹果中进行多媒体的播放有两种技术,一种是利用MediaPlayer框架进行播放;另外一种是利用AVFoundation进行播放。利用前者可以快速集成视频播放,而后者可以更深层次的处理视频播放。在这里我们先介绍一下MediaPlayer框架的使用。

二、对MediaPlayer的介绍

利用MediaPlayer进行视频播放又有两种方式,第一种是利用MPMoviePlayerController进行播放,第二种是利用MPMoviePlayerViewController进行播放。
MPMoviePlayerController:它继承自NSObject,所以它并不是一个视图控制器。它有view属

性,可以设置其大小等属性。
MPMoviePlayerViewController:它是一个控制器,弹出一个全屏的视频播放器界面,不支持改变其大小。

三、MPMoviePlayerController进行视频播放

下面的例子是一个全屏循环播放视频的例子:

//
// ViewController.m
// 视频播放
//
// Created by QiZhang on 11/25/15.
// Copyright (c) 2015 QiZhang. All rights reserved.
//

#import "ViewController.h"
#import <MediaPlayer/MediaPlayer.h>
@interface ViewController ()
@property (nonatomic,strong) MPMoviePlayerController* moviePlayer;
@end

@implementation ViewController

- (MPMoviePlayerController *)moviePlayer
{
if (_moviePlayer == nil) {
NSURL *url = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"tvuanywhere" ofType:@"mp4"]];
_moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
[_moviePlayer.view setFrame:self.view.bounds];
_moviePlayer.initialPlaybackTime = 1;
_moviePlayer.controlStyle = MPMovieControlStyleNone; // 把控制条去掉
}
return _moviePlayer;
}


- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.moviePlayer.view];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMovieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayer];
[self.moviePlayer play];
}

- (void)myMovieFinishedCallback:(NSNotification *)notification
{
MPMoviePlayerController *theMovie = [notification object];
[theMovie play];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

说明:
当视频播放完后,moviePlayer.view并不会自动移除,并且系统会产生一个播放完毕的通知,所以在代码中我建立了一个通知中心来处理视频播放完毕以后的操作(此处为继续播放)
利用MediaPlayer框架进行视频播放

MPMoviePlayerViewController进行视频播放

//
// ViewController.m
// 视频播放
//
// Created by QiZhang on 11/25/15.
// Copyright (c) 2015 QiZhang. All rights reserved.
//

#import "ViewController.h"
#import <MediaPlayer/MediaPlayer.h>
@interface ViewController ()
@property (nonatomic,strong) MPMoviePlayerViewController* moviePlayerVC;
@end

@implementation ViewController

- (MPMoviePlayerViewController *)moviePlayerVC
{
if (_moviePlayerVC == nil) {
NSURL *url = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"tvuanywhere" ofType:@"mp4"]];
_moviePlayerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
}
return _moviePlayerVC;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self presentViewController:self.moviePlayerVC animated:YES completion:nil];
}

- (void)viewDidLoad {
[super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

利用MediaPlayer框架进行视频播放

注意:

使用MedaiPlayer框架进行播放时不能设置播放器的自定义样式。。该框架的播放器已经足够强大,几乎不用写几行代码就能完成一个播放器,但是正是由于它的高度封装是的要自定义这个播放器变得非常不发,甚至是不可能完成。。所以,如果要对视频的*的控制则可以使用AVPlayer. AVPlayer存在于AVFoundation中,它更接近于底层,所以灵活性更强。