1.AVI文件
AVI是音频视频交错的英文缩写,它是微软公司开发的一种符合RIFF文件规范的数字音频与视频文件格式,是将音频与视频同步组合在一起的文件格式,他对视频文件採用了一种有损压缩方式.
2.WMV文件
WMV也是微软公司推出的一种流媒体格式,在同等视频质量下,WMV格式的体积非常小,因此非常适合在网上播放和传输.
3.RMVB文件
RMVB是一种视频文件格式,RMVB中的VB指他打破了压缩的平均比特率,使在静态画面下的比特率减少,来达到优化整个视频中比特率,提高效率节约资源的目的.RMVB最大特点是在保证文件清晰度的同一时候具有体积小巧的特点.
4.3GP文件
3GP是一种3G流媒体的视频编码格式,主要是为了配合3G网络的高传输速度而开发的,也是手机中的一种视频格式.3GP使用户可以发送大量的数据到移动电话网络,从而明白传输大型文件,是新的移动设备标准格式.长处是文件体积小,移动性强,适合移动设备使用.缺点是在pc上兼容性差.支持软件少,且播放质量差,帧数低,交avi差非常多.
5.MOV文件
MOV是苹果公司开发的一种音频,视频文件格式,用于存储经常使用数字媒体类型.mov格式文件是以轨道的形式组织起来的.一个MOV格式文件结构中能够包括多个轨道,MOV格式文件,画面效果较avi各市要略微好一些.
6.MP4文件
MP4是一种使用MPEG-4的多媒体文件格式,文件后缀名为MP4,採用H264解码.
7.M4V文件
M4V是一个标准视频文件格式,此种格式为iOS设备所使用,同事此格式基于MPEG-4编码第二版
关于 MPMovePlayerController
<p class="p1"><span class="s1">_moviePlayer</span><span class="s2">.</span><span class="s3">scalingMode</span><span class="s2"> = </span>MPMovieScalingModeAspectFit<span class="s2">;</span></p>
typedef NS_ENUM(NSInteger, MPMovieScalingMode) {
MPMovieScalingModeNone, // 原始尺寸
MPMovieScalingModeAspectFit, // 保持原始高宽比缩放视频,使其填充一个方向,还有一个方向会有黑边
MPMovieScalingModeAspectFill, // 保持原始高宽比缩放视频,使其填充两个方向,一个方向可能超出屏幕,则会切除
MPMovieScalingModeFill // 两个方向刚好填充两边,不考虑保持原始的高宽比缩放视频,结果有可能会高宽比例失真
};
_moviePlayer.controlStyle = MPMovieControlStyleDefault;
typedef NS_ENUM(NSInteger, MPMovieControlStyle) {
MPMovieControlStyleNone, // 没有播放控制控件,适合与游戏等应用过度界面或片尾视频等
MPMovieControlStyleEmbedded, // 嵌入风格的播放控制控件,没有Donebutton
MPMovieControlStyleFullscreen, // 全屏播放,有播放进度,Donebutton,快进等控件
MPMovieControlStyleDefault = MPMovieControlStyleEmbedded //默认风格,没有Donebutton
};
注意,MPMovePlayerController 加入到view上须要add一个_moviePlayer . view,由于他不是view也不是controller 而是继承NSObject,还有就是要 [ _moviePlayer setFullscreen : YES animated : YES ];全屏显示. 在播放完毕以后还要记得 removeFromSuperview
<p class="p1"><span class="s1">_moviePlayer</span><span class="s2">.</span>playbackState</p>
typedef NS_ENUM(NSInteger, MPMoviePlaybackState) {
MPMoviePlaybackStateStopped, //停止状态
MPMoviePlaybackStatePlaying, //播放状态
MPMoviePlaybackStatePaused, //暂停状态
MPMoviePlaybackStateInterrupted, //暂时中断状态
MPMoviePlaybackStateSeekingForward, //向前跳过状态
MPMoviePlaybackStateSeekingBackward //向后跳过状态
};
AVFoundation框架下的一些记录
AVPlayer,核心的播放视频须要的核心类,它有4个构造方法,能够通过NSURL或AVPlayerItem构造他,在呈现视频时候须要把AVPlayer放入到AVPlayerLayer中,然后把AVPlayerLayer对象加入到当前视图的图层上
AVQueuePlayer,假设须要播放多个视频时,能够使用AVQueuePlayer对象,他能够有多个AVPlayerItem对象组成
AVPlayerLayer,视频播放图层对象,它是须要加入到当前视图的图层上.
AVAsset,代表一个抽象的媒体,包括标题,文件大小等等,不关联不论什么格式.每一个AVAsset由多个track组成,每一个track能够是一个音频通道或者视频通道
AVURLAsset,是AVAsset详细实现类,能够使用NSURL来初始化AVURLAsset
AVPlayerItem,是代表一个AVAsset状态,能够使用他观察到视频播放状态.
AVPlayer的一个简单播放器
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
{
id timeObserver;//自己定义监听着
BOOL isPlaying;//推断是否播放
}
- (IBAction)play:(id)sender;
- (IBAction)seek:(id)sender;
@property (weak, nonatomic) IBOutlet UISlider *slider;
@property (weak, nonatomic) IBOutlet UIToolbar *toolBar;
@property (nonatomic,weak) AVPlayer *avPlayer;
@property (nonatomic,weak) AVPlayerLayer *layer;
@property (nonatomic,strong) AVPlayerItem *playerItem;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *filepath = [[NSBundle mainBundle] pathForResource:@"YY" ofType:@"mp4"];
NSURL *fileURL = [NSURL fileURLWithPath:filepath];
//详细实现类
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:fileURL options:nil];
//代表一个AVAsset状态,能够使用他观察到视频播放状态
self.playerItem = [AVPlayerItem playerItemWithAsset:asset];
//播放视频须要的核心类
self.avPlayer = [AVPlayer playerWithPlayerItem: self.playerItem ];
self.layer = [AVPlayerLayer playerLayerWithPlayer:self.avPlayer];
float scale = 1.776;
self.layer.frame = CGRectMake(0, -350,
self.view.frame.size.width * scale,
self.view.frame.size.height * scale);
//加入到当前视图的图层上
[self.view.layer insertSublayer:self.layer atIndex:0];
double duration = CMTimeGetSeconds(asset.duration);
self.slider.maximumValue = duration;
self.slider.minimumValue = 0.0;
isPlaying = NO;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (IBAction)play:(id)sender {
UIBarButtonItem *item1;
if (!isPlaying) {
[self addObserver];
[self.avPlayer seekToTime:kCMTimeZero];
[self.avPlayer play];
isPlaying = YES;
item1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPause
target:self
action:@selector(play:)];
} else {
isPlaying = NO;
item1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay
target:self
action:@selector(play:)];
[self.avPlayer pause];
}
NSMutableArray *items = [[NSMutableArray alloc] initWithArray:[self.toolBar items]];
[items replaceObjectAtIndex:0 withObject:item1];
[self.toolBar setItems:items];
}
- (IBAction)seek:(id)sender {
float value = [self.slider value];
[self.avPlayer seekToTime:CMTimeMakeWithSeconds(value, 10)];
}
-(void)addObserver{
if (timeObserver == nil) {
//播放完毕的通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:self.playerItem];
//创建AVPlayer定时器事件观察者对象
timeObserver = [self.avPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 10)
queue:dispatch_get_main_queue()
usingBlock:^(CMTime time) {
float duration = CMTimeGetSeconds(self.avPlayer.currentTime);
NSLog(@"duration = %f",duration);
self.slider.value = duration;
}
];
}
}
- (void) playerItemDidReachEnd:(NSNotification*) aNotification
{
NSLog(@"播放完毕");
if (timeObserver) {
[self.avPlayer removeTimeObserver:timeObserver];
timeObserver = nil;
self.slider.value = 0.0;
isPlaying = NO;
[[NSNotificationCenter defaultCenter] removeObserver:self
name:AVPlayerItemDidPlayToEndTimeNotification
object:nil];
UIBarButtonItem* item1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay
target:self
action:@selector(play:)];
NSMutableArray *items = [[NSMutableArray alloc] initWithArray:[self.toolBar items]];
[items replaceObjectAtIndex:0 withObject:item1];
[self.toolBar setItems:items];
}
}
原书:http://item.jd.com/11522516.html