您好,欢迎来到二三四教育网。
搜索
您的当前位置:首页玩转简单的本地视频播放,你也可以!

玩转简单的本地视频播放,你也可以!

来源:二三四教育网

本篇主要介绍如何使用苹果自带的控件播放视频,一种是iOS9.0之前的:苹果提供了两个控制器,一个是带有界面的(可以模态弹出,也可以自定义view的frame),一个是不带界面的(需要自定义frame);另一种是iOS9.0之后的,这个弹出方式同第一种的第一个。

先介绍iOS9.0之前的:

注意:最好把DT版本调成9.0之前的(要不然会提示已过期,但是也不影响使用):

dt.png

第一种:带有界面的播放器的控制器-MPMoviePlayerViewController

步骤:

1.导入MediaPlayer框架,创建MPMoviePlayerViewController
2.传入要播放的资源的URL
3.模态弹出此控制器
4.模态视图需要在当前视图加载完成之后再弹出
新建一个target:
ViewController.m

- (IBAction)didClickButtonPlay:(id)sender {
    NSURL *url = [[NSBundle mainBundle]URLForResource:@"Alizee_La_Isla_Bonita.mp4" withExtension:nil];
    MPMoviePlayerViewController *mp = [[MPMoviePlayerViewController alloc]initWithContentURL:url];
    [self presentViewController:mp animated:YES completion:nil];
    //mp.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, 200);//也可自定义mp.view的frame
   // [self.view addSubview:mp.view];
}```
*这段代码写到viewDidLoad中,运行后,音乐会播放但是没有画面,此外控制台也会同时输出:*
2016-05-06 11:51:05.715 视频播放[7150:3663976] Warning: Attempt to present <MPMoviePlayerViewController: 0x7fe8914b1920> on <ViewController: 0x7fe8914a6eb0> whose view is not in the window hierarchy!*
(大的视图刚加载完成,就模态弹出另一个控制器,会有问题)
####第二种:不带界面的播放器的控制器-MPMoviePlayerController。
新建一个taget:
``ViewController.m``

import "ViewController.h"

import <MediaPlayer/MediaPlayer.h>

@interface ViewController ()
//一定要强引用,否则,下面代码块里的mpc指针变量出了代码块就直接销毁
@property(nonatomic,strong) MPMoviePlayerController *mpc;
@end

@implementation ViewController

  • (void)viewDidLoad {
    [super viewDidLoad];
    NSURL *url = [[NSBundle mainBundle]URLForResource:@"Alizee_La_Isla_Bonita.mp4" withExtension:nil];
    //注意:因为此控制器没有view,所以不能用模态方式弹出,此外,还需要强引用属性;还需要设置此控制器的view的frame(当没有控制器不自带view的时候,view得frame是空的);还需要将此控制器起的添加到外部控制器的view上;还需要主动调用播放;
    self.mpc= [[MPMoviePlayerController alloc]initWithContentURL:url];

    // self.mpc.view.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 200);
    self.mpc.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, 200);

    [self.view addSubview:self.mpc.view];

    //规范写法,(最好写上),如果不写的话也可以,因为调用play方法时候会自动调用此方法
    [self.mpc prepareToPlay];

    [self.mpc play];
    //控制模式自己可以根据需求设置上看看效果
    /**
    MPMovieControlStyleNone, // No controls
    MPMovieControlStyleEmbedded, // Controls for an embedded view(默认)
    MPMovieControlStyleFullscreen, // Controls for fullscreen playback
    */
    self.mpc.controlStyle = MPMovieControlStyleEmbedded;
    }
    @end```

注意:

第一种方式视频播放完成后,view会自动回收,播放页面自动消失;
第二种方式视频播放完成后,view不会回收,就是说页面还在。此种方式适合播放下一个视频的需求,这时就需要检测视频播放的状态,在MPMoviePlayerController这个类里提供的是代理而是通知。
ViewController.m

#import "ViewController.h"

#import <MediaPlayer/MediaPlayer.h>
@interface ViewController ()

@property(nonatomic,strong) MPMoviePlayerController *mpc;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //注册通知监测视频播放完毕
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackDidFinishNotification:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
    
}
#pragma mark 通知绑定的方法
- (void)moviePlayerPlaybackDidFinishNotification:(NSNotification *)notification
{
    /**
     MPMovieFinishReasonPlaybackEnded,  播放结束
     MPMovieFinishReasonPlaybackError,  播放错误
     MPMovieFinishReasonUserExited      退出播放
     */
    
    //1. 获取通知结束的状态
    NSInteger movieFinishKey = [notification.userInfo[MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] integerValue];
    
    //2. 根据状态不同来自行填写逻辑代码
    switch (movieFinishKey) {
        case MPMovieFinishReasonPlaybackEnded:
            NSLog(@"播放结束");
            
            // 进行视频切换 需要两步
            
            //1. 要想换视频, 就需要更换地址
            self.mpc.contentURL = [[NSBundle mainBundle] URLForResource:@"Cupid_高清.mp4" withExtension:nil];
            [self.mpc play];
            break;
            
        case MPMovieFinishReasonPlaybackError:
            NSLog(@"播放错误");
            break;
            
        case MPMovieFinishReasonUserExited:
            NSLog(@"退出播放");
            
            // 如果是不带view的播放器, 那么播放完毕(退出/错误/结束)都应该退出
            [self.mpc.view removeFromSuperview];
            break;
            
        default:
            break;
    }
    
}


- (IBAction)moviePlayerController:(id)sender{
    NSURL *url = [[NSBundle mainBundle]URLForResource:@"Alizee_La_Isla_Bonita.mp4" withExtension:nil];
    self.mpc= [[MPMoviePlayerController alloc]initWithContentURL:url];
    
    //    self.mpc.view.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 200);
    self.mpc.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, 200);
    
    [self.view addSubview:self.mpc.view];
    
    //规范写法,(最好写上),如果不写的话也可以,因为调用play方法时候会自动调用此方法
    [self.mpc prepareToPlay];
    
    [self.mpc play];
    //控制模式自己可以根据需求设置上看看效果
    /**
     MPMovieControlStyleNone,       // No controls
     MPMovieControlStyleEmbedded,   // Controls for an embedded view(默认)
     MPMovieControlStyleFullscreen, // Controls for fullscreen playback
     */
    self.mpc.controlStyle = MPMovieControlStyleEmbedded;
}

下面的是iOS9.0的其中一个视频播放的新特性:

一定要导入AVKit和AVFoundation框架
新建一个target
ViewController.m


#import "ViewController.h"
#import <AVKit/AVKit.h>
#import <AVFoundation/AVFoundation.h>

@interface ViewController ()

@end

@implementation ViewController

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

- (IBAction)playerViewController {
    
    //1. 获取URL地址
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"Cupid_高清.mp4" withExtension:nil];
    
    //2. AV播放视图控制器
    AVPlayerViewController *pVC = [AVPlayerViewController new];
    
    //3. 创建player --> 设置时需要传入网址
    pVC.player = [AVPlayer playerWithURL:url];
    
    //4. 开始播放
    [pVC.player play];
    
    //5. 模态弹出
    //[self presentViewController:pVC animated:YES completion:nil];
    
    //5. 如果想要自定义播放器的大小,应该自定义 --> 设置frame / 添加到视图中
//    pVC.view.frame = CGRectMake(-150, 150, self.view.bounds.size.height, self.view.bounds.size.width);
//    CGAffineTransform rotation = CGAffineTransformMakeRotation(M_PI_2);
//    
//    pVC.view.transform=rotation;
    
     pVC.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
    [self.view addSubview:pVC.view];
    
}

@end

Copyright © 2019- how234.cn 版权所有 赣ICP备2023008801号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务