具体步骤
本文用于调试的真机是ipod touch5,系统是iOS7.0.4。
新建工程
新建一个Single View工程
起个名字叫myPlayer
简单UI
在storyboard中拖放三个控件,分别是UILabel,用于展示视频名称;UIView用于承载播放画面,UIButton用于播放或暂停。
按钮的default状态显示“播放”,selected状态显示“暂停”:
建立控件与变量的连接:
UILabel是lblTitle
UIView是playerView
UIButton是btnPlayOrPause,点击事件是btnPlayOrPauseClick
再加一个NSString变量存视频地址
目前看起来这样:
[objc] view plaincopy
@interface iTechBlueViewController : UIViewController
{
NSString* videoPath;
}
@property (weak, nonatomic) IBOutlet UILabel *lblTitle;
@property (weak, nonatomic) IBOutlet UIView *playerView;
@property (weak, nonatomic) IBOutlet UIButton *btnPlayOrPause;
- (IBAction)btnPlayOrPauseClick:(id)sender;
@end
检测视频文件
我们要遍历Documents文件夹下的文件,将找到的第一个视频文件的地址记住,并将其名称显示在UILabel上。
[objc] view plaincopy
-(NSString*)findVideoInDocuments
{
NSString *documentsDirectory = [NSString stringWithFormat:@"%@/Documents", NSHomeDirectory()];
NSFileManager *fileMg = [[NSFileManager alloc] init];
//遍历Documents下的文件,找到视频文件就返回它的全路径
NSArray *subPaths = [fileMg contentsOfDirectoryAtPath:documentsDirectory error:nil];
if (subPaths) {
for (NSString *subPath in subPaths) {
if ( [self isMediaFile:[subPath pathExtension]]) {
NSString *path = [documentsDirectory stringByAppendingPathComponent:subPath];
return path;
}
}
}
return nil;
}
[objc] view plaincopy
-(BOOL)isMediaFile:(NSString*)pathExtension
{
//可用格式
/*
".M1V", ".MP2", ".MPE", ".MPG", ".WMAA",
".MPEG", ".MP4", ".M4V", ".3GP", ".3GPP", ".3G2", ".3GPP2", ".MKV",
".WEBM", ".MTS", ".TS", ".TP", ".WMV", ".ASF", ".ASX", ".FLV",
".MOV", ".QT", ".RM", ".RMVB", ".VOB", ".DAT", ".AVI", ".OGV",
".OGG", ".VIV", ".VIVO", ".WTV", ".AVS", ".SWF", ".YUV"
*/
//简单粗暴地判断是否为视频格式,这里先试6个
NSString*ext = [pathExtension uppercaseString];
if([ext isEqualToString:@"MP4"])
{
return YES;
}
else if([ext isEqualToString:@"MOV"])
{
return YES;
}
else if([ext isEqualToString:@"RMVB"])
{
return YES;
}
else if([ext isEqualToString:@"MKV"])
{
return YES;
}
else if([ext isEqualToString:@"FLV"])
{
return YES;
}
else if([ext isEqualToString:@"TS"])
{
return YES;
}
return NO;
}
[objc] view plaincopy
- (void)viewDidLoad
{
[super viewDidLoad];
videoPath = [self findVideoInDocuments];
if(videoPath)
{
_lblTitle.text = [videoPath lastPathComponent];
}
}
现在编译一下看看有没有问题吧!
好,虽然没问题,但也只是我们拖出来的那个界面而已。
咱们现在用iFunBox往Documents文件夹下放一个视频吧。
什么!?你还没用过iFunBox?赶紧去下载一个试试,确实能给开发带来便利哦。
我放了一个特小的文件0.ts进去。
再编译试试,这回题目就出来啦!
添加Vitamio并配置工程(or not?)
现在我们已经有了视频文件并且获得了它的具体路径,接着就是要播放它了。开始使用Vitamio!
将上文解压后获得的Vitamio文件夹添加至工程:
添加后如果你手痒编译,竟然发现是能编译成功的!
难道VitamioSDK这么强悍,不需要任何配置就能用了?且往下看。
写播放器代码
引入Vitamio头文件
[objc] view plaincopy
#import "Vitamio.h"
声明一个播放器变量
[objc] view plaincopy
VMediaPlayer *mMPayer;
声明使用播放器协议
[objc] view plaincopy
以上三行代码写好,Vitamio SDK的各种接口就可以任你调遣了。这是最精简的配置。
VMediaPlayer和VMediaPlayerDelegate都藏了什么好东西?我们只能边学变探索。
现在咱们的头文件看起来是这样的:
[objc] view plaincopy
#import
#import "Vitamio.h"
@interface iTechBlueViewController : UIViewController
{
NSString* videoPath;
VMediaPlayer *mMPayer;
}
@property (weak, nonatomic) IBOutlet UILabel *lblTitle;
@property (weak, nonatomic) IBOutlet UIView *playerView;
@property (weak, nonatomic) IBOutlet UIButton *btnPlayOrPause;
- (IBAction)btnPlayOrPauseClick:(id)sender;
@end
初始化播放器,以下代码是初始化播放器的最精简写法。
[objc] view plaincopy
-(void)initPlayer
{
if (!mMPayer) {
mMPayer = [VMediaPlayer sharedInstance];
[mMPayer setupPlayerWithCarrierView:self.playerView withDelegate:self];
}
}
可以看到,我们将自己拖到界面上的playerView传了过去,表示要用它来承载视频画面。
准备播放视频,同样,下面代码是准备播放视频最精简的写法:
[objc] view plaincopy
-(void)prepareVideo
{
if(videoPath)
{
//播放时不要锁屏
[UIApplication sharedApplication].idleTimerDisabled = YES;
NSURL* videoURL = [NSURL fileURLWithPath:videoPath];
[mMPayer setDataSource:videoURL];
[mMPayer prepareAsync];
}
}