<图形图像,动画,多媒体> 读书笔记 --- 视频

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

时间: 2024-10-22 07:36:26

<图形图像,动画,多媒体> 读书笔记 --- 视频的相关文章

&lt;图形图像,动画,多媒体&gt; 读书笔记 --- 录制与编辑视频

使用UIImagePickerController 进行录制 #import "ViewController.h" #import <MobileCoreServices/MobileCoreServices.h> #import <QuartzCore/QuartzCore.h> @interface ViewController () <UIImagePickerControllerDelegate,UINavigationControllerDele

&lt;图形图像,动画,多媒体&gt; 读书笔记 --- AirPlay

AirPlay技术是之前一直没有接触过的技术,正好这次做一个笔记 共用: 1.可以通过AirPlay将iOS和MAC设备上的视频或音频输出到高清电视上或高保真音响 2.可以通过AirPlay将iOS和MAC设备屏幕镜像显示到高清电视上 3.可以通过AirPlay将iOS和MAC设备屏幕与高清电视实现双屏幕显示 AirPlay对能够播放的媒体编码有要求 1.音频数据采用AAC或MP3编码压缩 2.视频数据采用H264编码压缩 可以通过AirPlay播放的技术有 1.MPMoviePlayerCon

&lt;图形图像,动画,多媒体&gt; 读书笔记 --- 图像处理

为了便于操作图像iOS中定义图像类,UIImage是UIKit框架中定义的图像类,其封装了高层次图像类,可以通过多种方式创建这些对象.在Core Graphics框架(或Quartz 2D)中也定义了CGImage,他表示位图图像,因为CGImage被封装起来了,所以通常通过CGImageRef来使用CGImage. 除了UIImage和CGImage外,在Core Image框架中也有一个图像类 CIImage,CIImage封装了图像类能够很好地进行图像效果处理.例如,滤镜的使用.UIIma

&lt;图形图像,动画,多媒体&gt; 读书笔记 --- 力学行为特性

UIKit力学行为包含了:重力(UIGravityBehavior),碰撞(UICollisionBehavior),吸附(UIAttachmentBehavior),推(UIPushBehavior),甩(UISnapBehavior)和行为限制(UIDynamicItemBehavior). - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; _animator = [[UIDynamicAnimato

&lt;图形图像,动画,多媒体&gt; 读书笔记 --- 图像处理之人脸识别

人脸识别过程一般分为以下3个步骤: 1.首先建立人脸的面纹数据库.可以通过照相机或摄像机采集人脸的面相图片,将这些面相图片生成面纹编码保存到数据库中. 2.获取当前人脸面相图片.即通过照相机或摄像机采集人脸的面相图片,将当前的面相文件生成面纹编码 3.用当前的面纹编码与数据库中的面纹编码进行对比 在iOS5之后提供人脸识别的API,通过提供的CIDetector类可以进行人脸特征识别,CIDetector是CoreImage框架中的一个特征识别滤镜,CIDetector主要用于人脸特征识别.通过

&lt;图形图像,动画,多媒体&gt; 读书笔记 --- 音效

音频多媒体文件主要是存放音频数据信息,音频文件在录制的过程中把声音信号,通过音频编码,变成音频数字信号保存到某种格式文件中.在播放过程中在对音频文件解码,解码出的信号通过扬声器等设备就可以转成音波.音频文件在编码的过程中数据量很大,所以有的文件格式对于数据进行了压缩,因此音频文件可以分为: 无损格式,是非压缩数据格式,文件很大一般不适合移动设备,例如:WAV,AU,APE等文件 有损格式,对于数据进行了压缩,压缩后丢掉了一些数据,例如MP3,WMA等文件. 1.WAV文件 WAV文件目前是最流行

&amp;lt;图形图像,动画,多媒体&amp;gt; 读书笔记 --- 录制与编辑视频

使用UIImagePickerController 进行录制 #import "ViewController.h" #import <MobileCoreServices/MobileCoreServices.h> #import <QuartzCore/QuartzCore.h> @interface ViewController () <UIImagePickerControllerDelegate,UINavigationControllerDele

&amp;lt;图形图像,动画,多媒体&amp;gt; 读书笔记 --- AirPlay

AirPlay技术是之前一直没有接触过的技术,正好这次做一个笔记 共用: 1.能够通过AirPlay将iOS和MAC设备上的视频或音频输出到高清电视上或高保真音响 2.能够通过AirPlay将iOS和MAC设备屏幕镜像显示到高清电视上 3.能够通过AirPlay将iOS和MAC设备屏幕与高清电视实现双屏幕显示 AirPlay对可以播放的媒体编码有要求 1.音频数据採用AAC或MP3编码压缩 2.视频数据採用H264编码压缩 能够通过AirPlay播放的技术有 1.MPMoviePlayerCon

&amp;lt;图形图像,动画,多媒体&amp;gt; 读书笔记 --- 音效

音频多媒体文件主要是存放音频数据信息,音频文件在录制的过程中把声音信号,通过音频编码,变成音频数字信号保存到某种格式文件里.在播放过程中在对音频文件解码,解码出的信号通过扬声器等设备就能够转成音波.音频文件在编码的过程中数据量非常大,所以有的文件格式对于数据进行了压缩,因此音频文件能够分为: 无损格式,是非压缩数据格式,文件非常大一般不适合移动设备,比如:WAV,AU,APE等文件 有损格式,对于数据进行了压缩,压缩后丢掉了一些数据,比如MP3,WMA等文件. 1.WAV文件 WAV文件眼下是最