<图形图像,动画,多媒体> 读书笔记 --- 视频
来源:互联网 发布:淘宝热门店铺秒杀技巧 编辑:程序博客网 时间:2024/05/17 06:04
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, // 嵌入风格的播放控制控件,没有Done按钮 MPMovieControlStyleFullscreen, // 全屏播放,有播放进度,Done按钮,快进等控件 MPMovieControlStyleDefault = MPMovieControlStyleEmbedded //默认风格,没有Done按钮};
注意,MPMovePlayerController 添加到view上需要add一个_moviePlayer.view,因为他不是view也不是controller 而是继承NSObject,还有就是要 [_moviePlayersetFullscreen:YESanimated: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
- <图形图像,动画,多媒体> 读书笔记 --- 视频
- <图形图像,动画,多媒体> 读书笔记 --- 录制与编辑视频
- <图形图像,动画,多媒体> 读书笔记 --- 录制与编辑视频
- <图形图像,动画,多媒体> 读书笔记 --- 音效
- <图形图像,动画,多媒体> 读书笔记 --- AirPlay
- <图形图像,动画,多媒体> 读书笔记 --- 图像处理
- <图形图像,动画,多媒体> 读书笔记 --- 力学行为特性
- <图形图像,动画,多媒体> 读书笔记 --- UIKit,Quartz 2D
- <图形图像,动画,多媒体> 读书笔记 --- 图像处理之人脸识别
- <图形图像,动画,多媒体> 读书笔记 --- Quartz 2D 图形的基本变换
- 多媒体图形图像技术
- 关东升的《iOS实战:图形图像、动画和多媒体卷(Swift版)》上市了
- 读书笔记--多媒体
- Android中的图形图像相关(多媒体1)
- Android图形图像动画的生成
- Android图形图像之属性动画
- 读书笔记-现代操作系统-7多媒体操作系统-7.3视频编码7.4音频压缩
- 《网络和多媒体》读书笔记
- J-LINK突然不能下载(错误:JLink Warning: RESET (pin 15) high, but should be low. Please check target)
- Linux(CentOS)下的apache服务器配置与管理
- Java路径空格问题
- JavaScript 与jquery 之间不同的函数调用方式
- [寒江孤叶丶的Cocos2d-x之旅_14]Cocos2d-x 3.2版本以上LUA脚本Socket通讯解决方案——LuaSocket
- <图形图像,动画,多媒体> 读书笔记 --- 视频
- Office 2010: word中如何新建博客文章
- 知者不惑,仁者不忧,勇者不惧 --- 《论语》
- mysql 索引( mysql index )
- Nagios监控mongodb分片集群服务实战
- Android 超高仿微信图片选择器 图片该这么加载
- 每天一个小算法(matlab armijo)
- 开灯问题与数组清零
- css盒子模型