视频播放MPMoviePlayerViewController
2016-11-08 15:26
393 查看
https://github.com/potato512/SYAVPlayer
使用MPMoviePlayerViewController进行视频播放
注意:
1、iOS9版本及以上版本已经弃用网络视频的播放了,所以MPMoviePlayerViewController现在大部分只是用作本地视频的播放,当然也并不是完全不能播放网络视频。
2、要想实现既能播放本地视频,又能播放网络视频,同时又能根据需求定制播放界面,可以采用其他的播放framework(如AVFoundation中的AVPlayer)。
3、在使用网络视频地址,或本地视频地址时,注意NSURL的使用方法:
(3-1)网络视频地址(URLWithString):
(3-2)本地视频地址(fileURLWithPath):
![](https://img-blog.csdn.net/20161109093758514?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
封装类使用
使用MPMoviePlayerViewController进行视频播放
注意:
1、iOS9版本及以上版本已经弃用网络视频的播放了,所以MPMoviePlayerViewController现在大部分只是用作本地视频的播放,当然也并不是完全不能播放网络视频。
2、要想实现既能播放本地视频,又能播放网络视频,同时又能根据需求定制播放界面,可以采用其他的播放framework(如AVFoundation中的AVPlayer)。
3、在使用网络视频地址,或本地视频地址时,注意NSURL的使用方法:
(3-1)网络视频地址(URLWithString):
NSURL *networkUrl = [NSURL URLWithString:@"xxxxxx"];
(3-2)本地视频地址(fileURLWithPath):
NSURL *localUrl = [NSURL fileURLWithPath:@"xxxxxx"];
// 导入头文件 #import <MediaPlayer/MediaPlayer.h>
@property (nonatomic, strong) MPMoviePlayerViewController *moviePlayerController;
- (void)movieNotification { // 添加通知中心 [[NSNotificationCenter defaultCenter] addObserver:self selector: @selector(moviePlayingDone) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; }
// 播放事件 - (void)moviePlayingDone { NSLog(@"播放完成"); // 方法1 // [self.moviePlayerController.view removeFromSuperview]; // 方法2 [self.moviePlayerController.moviePlayer stop]; [self dismissMoviePlayerViewControllerAnimated]; self.moviePlayerController = nil; }
- (void)moviePlay:(NSString *)filePath { // 方法1 if (filePath) { NSURL *movieUrl = [NSURL fileURLWithPath:filePath]; if (movieUrl) { self.moviePlayerController = [[MPMoviePlayerViewController alloc] initWithContentURL:movieUrl]; MPMoviePlayerController *moviePlayer = [self.moviePlayerController moviePlayer]; moviePlayer.movieSourceType = MPMovieSourceTypeFile; // 控制播放行为 moviePlayer.controlStyle = MPMovieControlStyleFullscreen; // 控制影片的尺寸 moviePlayer.scalingMode = MPMovieScalingModeAspectFit; // 准备播放 [moviePlayer prepareToPlay]; // 播放 [moviePlayer play]; // 在当前view上添加视频的视图 // 方法1 // [[[UIApplication sharedApplication] keyWindow] addSubview:moviePlayerView.view]; // 方法2 [self presentMoviePlayerViewControllerAnimated:self.moviePlayerController]; } } }
// 按钮播放事件 - (void)startPlay:(UIBarButtonItem *)button { // 获取不到视频文件路径??(添加方法不当。因复制粘贴到项目文件夹,然后再添加文件到项目) NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"movie" ofType:@"3gp"]; [self moviePlay:moviePath]; }
封装类使用
// h文件
#import <Foundation/Foundation.h>
// 导入头文件 #import <MediaPlayer/MediaPlayer.h>
@interface MPMoviePlayer : NSObject
/// 创建单例
+ (MPMoviePlayer *)shareMPMoviePlayer;
/// 播放视频(网络视频,或本地视频)
- (void)playWithFilePath:(NSString *)filePath target:(id)target;
@end
// m文件 #import "MPMoviePlayer.h" @interface MPMoviePlayer () @property (nonatomic, retain) MPMoviePlayerViewController *playerViewController; @property (nonatomic, strong) MPMoviePlayerController *playerController; @property (nonatomic, strong) NSURL *playerUrl; @property (nonatomic, strong) UIViewController *controller; @end @implementation MPMoviePlayer #pragma mark - 生命周期 // 初始化 - (id)init { self = [super init]; if (self) { } return self; } // 内存管理 - (void)dealloc { NSLog(@"dealloc"); [[NSNotificationCenter defaultCenter] removeObserver:self]; [self.playerController stop]; } #pragma mark - 单例 /// 创建单例 + (MPMoviePlayer *)shareMPMoviePlayer { static MPMoviePlayer *sharedManager; if (sharedManager == nil) { @synchronized (self) { sharedManager = [[self alloc] init]; assert(sharedManager != nil); } } return sharedManager; } #pragma mark - 通知 - (void)addNotification { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; } - (void)movieFinishedCallback:(NSNotification *)aNotification { NSLog(@"movieFinishedCallback"); // [UIView animateWithDuration:0.3 animations:^{ // CGRect rect = self.playerViewController.view.frame; // rect.origin.y = [UIScreen mainScreen].bounds.size.height; // self.playerViewController.view.frame = rect; // } completion:^(BOOL finished) { // [self.playerViewController.view removeFromSuperview]; // }]; [self.playerController stop]; [self.controller dismissMoviePlayerViewControllerAnimated]; [[NSNotificationCenter defaultCenter] removeObserver:self]; } #pragma mark - 视频播放 /// 播放视频(网络地址,或本地路径,或本地文件名称) - (void)playWithFilePath:(NSString *)filePath target:(id)target { if (!filePath || 0 >= filePath.length || !target) { return; } self.controller = target; if ([filePath hasPrefix:@"https://"] || [filePath hasPrefix:@"http://"]) { // 是否是网络文件 self.playerUrl = [NSURL URLWithString:filePath]; self.playerController.movieSourceType = MPMovieSourceTypeStreaming; } else { // 是否存在本地视频文件 NSString *fileName = [self fileNameWithFile:filePath]; NSString *fileType = [self fileTypeWithFile:filePath]; NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:fileType]; if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { self.playerUrl = [NSURL fileURLWithPath:filePath]; self.playerController.movieSourceType = MPMovieSourceTypeFile; } } if (self.playerUrl) { // [self.playerController prepareToPlay]; // [self.playerController play]; // [self addNotification]; // // 在当前view上添加视频的视图 // __block CGRect rect = self.playerViewController.view.frame; // rect.origin.y = [UIScreen mainScreen].bounds.size.height; // self.playerViewController.view.frame = rect; // [[[UIApplication sharedApplication] keyWindow] addSubview:self.playerViewController.view]; // [UIView animateWithDuration:0.3 animations:^{ // rect = self.playerViewController.view.frame; // rect.origin.y = 0.0; // self.playerViewController.view.frame = rect; // } completion:^(BOOL finished) { // // }]; [self addNotification]; [self.controller presentMoviePlayerViewControllerAnimated:self.playerViewController]; [self.playerController prepareToPlay]; [self.playerController play]; } } #pragma mark - 获取文件名称、文件类型 - (NSString *)fileNameWithFile:(NSString *)file { NSString *name = file; if (file && 0 < file.length) { NSRange range = [name rangeOfString:@"/" options:NSBackwardsSearch]; if (range.location != NSNotFound) { name = [file substringFromIndex:(range.location + range.length)]; } } NSRange range = [name rangeOfString:@"." options:NSBackwardsSearch]; if (range.location != NSNotFound) { name = [name substringToIndex:range.location]; } return name; } - (NSString *)fileTypeWithFile:(NSString *)file { if (file && 0 < file.length) { NSRange range = [file rangeOfString:@"." options:NSBackwardsSearch]; if (range.location != NSNotFound) { NSString *type = [file substringFromIndex:range.location + range.length]; return type; } return nil; } return nil; } #pragma mark - getter - (MPMoviePlayerViewController *)playerViewController { if (_playerViewController == nil) { _playerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:self.playerUrl]; } return _playerViewController; } - (MPMoviePlayerController *)playerController { if (_playerController == nil) { _playerController = self.playerViewController.moviePlayer; // 控制播放行为 _playerController.controlStyle = MPMovieControlStyleFullscreen; // 控制影片的尺寸 _playerController.scalingMode = MPMovieScalingModeAspectFit; // 自动播放 _playerController.shouldAutoplay = YES; } return _playerController; } @end
// 使用 // 步骤1 添加头文件 // 导入封装方法头文件 #import "MPMoviePlayer.h" // 步骤2 实现 // 按钮播放事件 - (void)startPlay:(UIBarButtonItem *)button { // 本地视频文件 // NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"movie" ofType:@"mp4"]; //网络视频文件 NSString *moviePath = @"http://devimages.apple.com/iphone/samples/bipbop/gear4/prog_index.m3u8"; [[MPMoviePlayer shareMPMoviePlayer] playWithFilePath:moviePath target:self]; }
相关文章推荐
- 视频播放MPMoviePlayerViewController
- iOS疯狂详解之视频播放MPMoviePlayerViewController
- iOS 视频播放(AVPlayer、MPMoviePlayerController、MPMoviePlayerViewController 区别)
- 7.iOS 视频播放2MPMoviePlayerViewController
- (ios)MPMoviePlayerController首次播放视频的时候,没有控制条
- 视频播放MPMoviePlayerController
- 关于MPMoviePlayerController以及MPMoviePlayerViewControlle流媒体视频播放
- IOS 播放视频(MPMoviePlayerController、MPMoviePlayerViewController)
- 照相、从相册上取照片、播放音频、播放本地视频、播放网络视频、MPMoviePlayerController
- iOS 视频播放之MPMoviePlayerController
- iPhone控件之MPMoviePlayerViewController
- iOS--播放音频、视频(1:AVAudioPlayer 2:MPMoviePlayerViewController)
- iOS 视频播放 MPMoviePlayerViewController
- MPMoviePlayerViewController视频播放
- MPMoviePlayerViewController或MPMoviePlayerController播放本地视频报错:_itemFailedToPlayToEnd: {kind = 1;new =
- 利用MPMoviePlayerViewController 播放视频 iOS
- iphone之MPMoviePlayer 视频播放
- iPhone开发笔记(1)MPMoviePlayerController的用法和播放时只有声音没有图像的解决办法
- 我要的音视频文章 MPMoviePlayerViewController VS MPMoviePlayerController AVAudioPlayer MPMusicPlayerControll
- iOS用MPMoviePlayerViewController 播放MP4视频