一、简介



iOS提供了MPMoviePlayerController、MPMoviePlayerViewController两个类,可以用来轻松播放视频和网络流媒体\网络音频



提示:网络音频同样使用此控制器播放



YouTobe就是用MPMoviePlayerController实现的



MPMoviePlayerViewController只能全屏播放视频



上述两个类都定义在了MediaPlayer框架中



 



二、MPMoviePlayerController支持的格式



MPMoviePlayerController



继承自NSObject



内部有个view可以展示视频内容



将该视图添加其他控制器的view上,即可显示视频内容



MPMoviePlayerController可以播放的视频格式包括:



H.264、MPEG-4等



支持的文件扩展名包括:avi,mkv,mov,m4v,mp4等



 



可以从苹果官网:http://support.apple.com/kb/HT1425下载一些用来测试的视频文件,文件都比较小



 



提示:MPMoviePlayerController并不支持所有的视频格式,如果要播放不支持的视频格式,需要借助第三方框架进行解码,如VLC



https://github.com/videolan/vlc



 



三、MPMoviePlayerController的使用



加载视频资源(注意,如果url为nil同样可以加载)


NSAssert(self.url, @"URL不能为空");
[[MPMoviePlayerController alloc] initWithContentURL:self.url];



显示



[self.view addSubview:self.moviePlayer.view];
通过设置AutoresizingMask属性可以在横竖屏转换时自动调整视图大小
 
   

     播放 
   
 
   
[self.moviePlayer play];



全屏


[self.moviePlayer setFullscreen:YES animated:YES];
 
   

       
   
 
   

     MPMoviePlayerController的播放状态是通过通知中心监听的



 



四、常用监听通知事件



状态变化



MPMoviePlayerPlaybackStateDidChangeNotification
 
    

      播放结束 
    
 
    
MPMoviePlayerPlaybackDidFinishNotification
 
    

      退出全屏 
    
 
    
MPMoviePlayerDidExitFullscreenNotification



截屏完成


MPMoviePlayerThumbnailImageRequestDidFinishNotification 
 
    

      截屏方法 
    
 
    
-requestThumbnailImagesAtTimes:timeOption:

 

五、VLC(基于FFmpeg)



注意点



存放VLC的文件夹名不要有空格



一旦执行过编译脚本sh, 就别再修改存放VLC的文件夹名



1.集成



静态库 + 头文件




 



依赖库




 



C++标准库




 



导入头文件, 播放视频



#import "VLCMediaPlayer.h"
 
      

          
      
 
      
self.vlcPlayer = [[VLCMediaPlayer alloc] init];
self.vlcPlayer.drawable = self.view;
self.vlcPlayer.media = [VLCMedia mediaWithURL:[NSURL URLWithString:@"http://streams.videolan.org/streams/mp4/Mr_MrsSmith-h264_aac.mp4"]];
[self.vlcPlayer play];
 
     

         
     
 
     

       1.VLCMediaPlayer – 常见方法 
     
 
     

        播放控制 
      
 
      
- (BOOL)play;
- (void)pause;
- (void)stop;
- (BOOL)isPlaying;
@property float rate; // 播放速率
 
 
      

        播放进度 
      
 
      
- (void)setTime:(VLCTime *)value; // 当前的播放时间
- (VLCTime *)time;
@property (readonly) VLCTime *remainingTime; // 剩余的播放时间
- (void)setPosition:(float)newPosition; // 播放进度(0.0 ~ 1.0)
- (float)position;
 
     

         
     
 
     

        播放的内容 
      
 
      
- (void)setMedia:(VLCMedia *)value;
- (VLCMedia *)media;
 
 
      

        播放的载体(显示到哪里, 一般是一个UIView) 
      
 
      
@property (retain) id drawable;
 
2.VLCMediaPlayer – 播放器的状态
 
    

       播放器的状态 
     
 
     

       - (VLCMediaPlayerState)state; 
     
 
     
enum {
    VLCMediaPlayerStateStopped,        // 播放器已经停止
    VLCMediaPlayerStateOpening,        // 流正在打开
    VLCMediaPlayerStateBuffering,      // 流正在缓冲
    VLCMediaPlayerStateEnded,          // 流已经结束
    VLCMediaPlayerStateError,          // 播放器产生了错误
    VLCMediaPlayerStatePlaying,        //  流正在播放
    VLCMediaPlayerStatePaused          // 流被暂停了
};
 
    
3.VLCMediaPlayerDelegate
 
    

      通过代理对象可以监听播放器的状态 
    
 
    

      当播放器的状态改变就调用 
    
 
    
- (void)mediaPlayerStateChanged:(NSNotification *)aNotification;
 
    

        
    
 
    

      当播放器的时间改变就调用 
    
 
    
- (void)mediaPlayerTimeChanged:(NSNotification *)aNotification;

 



1 //
 2 //  ViewController.m
 3 //  IOS_0322_视频
 4 //
 5 //  Created by ma c on 16/3/22.
 6 //  Copyright © 2016年 博文科技. All rights reserved.
 7 //
 8 
 9 #import "ViewController.h"
10 #import <MediaPlayer/MediaPlayer.h>
11 #import <MobileVLCKit/MobileVLCKit.h>
12 
13 @interface ViewController ()
14 
15 @property (nonatomic, strong) VLCMediaPlayer *player;
16 
17 @end
18 
19 @implementation ViewController
20 
21 - (void)viewDidLoad {
22     [super viewDidLoad];
23     self.view.backgroundColor = [UIColor cyanColor];
24 
25 }
26 
27 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
28 {
29 //    [self systemMoviePlayer];
30     [self mobileVLCMoviePlayer];
31     
32 }
33 
34 - (void)mobileVLCMoviePlayer
35 {
36     NSURL *url = [[NSBundle mainBundle] URLForResource:@"11-传感器.mp4" withExtension:nil];
37     self.player = [[VLCMediaPlayer alloc] init];
38     self.player.media = [VLCMedia mediaWithURL:url];
39     
40     //设置播放界面的载体
41     self.player.drawable = self.view;
42     //播放
43     [self.player play];
44 
45 }
46 
47 - (void)systemMoviePlayer
48 {
49     MPMoviePlayerController *mpc = [[MPMoviePlayerController alloc] init];
50     mpc.contentURL = [[NSBundle mainBundle] URLForResource:@"11-传感器.mp4" withExtension:nil];
51     
52     //缓冲之后自动播放
53 //    [mpc prepareToPlay];
54     
55     //隐藏自带的控制面板
56 //    mpc.controlStyle = MPMovieControlStyleNone;
57     
58     //添加播放器的界面到控制器View上面
59     mpc.view.frame = CGRectMake(7, 50, 400, 300);
60     [self.view addSubview:mpc.view];
61     
62     //播放
63     [mpc play];
64 
65 }
66 
67 @end