美文网首页程序员iOS音视频开发
AVFoundation开发秘籍笔记-05AVKit用法-AVP

AVFoundation开发秘籍笔记-05AVKit用法-AVP

作者: 竹与豆 | 来源:发表于2018-05-29 14:58 被阅读62次

    MediaPlayer

    iOS3.0-iOS9.0
    

    定义了MPMoviePlayerControllerMPMoviePlayerViewController两个类,提供简单的方法将完整的视频播放功能整合到应用程序中。播放、暂停、快进等功能

    需要导入对应的库文件#import <MediaPlayer/MediaPlayer.h>,iOS8.0以后可以不再使用这个库,iOS9.0之后已经彻底放弃这个库文件,另外在iOS8.0之后提供了更加灵活的AVKitAVFoundation结合的方式播放视频。

    MPMoviePlayerController

    MPMoviePlayerController定义了一些标准的播放控件,这些控件可以以子视图或全屏的方式置于应用程序中,并支持通过AirPlay连接的音频流和视频流。

    MPMoviePlayerController继承自NSObject不是UIViewController,不能当成一个视图控制器,可以当成一个view处理。

    # pragma 远程/网络视频地址
    NSURL *fileUrl = [NSURL URLWithString:@"http://devstreaming.apple.com/videos/wwdc/2014/503xx50xm4n63qe/503/503_sd_mastering_modern_media_playback.mov"];//视频网络地址
    
    _moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:fileUrl];
    _moviePlayer.view.frame = self.view.frame;
    //    _moviePlayer.controlStyle = MPMovieControlStyleNone;
    [self.view addSubview:_moviePlayer.view];
    _moviePlayer.shouldAutoplay = YES;
    [_moviePlayer prepareToPlay]; //准备资源,缓冲
    
    # pragma 本地视频地址
    NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"WeChatSight3033" withExtension:@"mp4"];
    _moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:fileUrl];
    _moviePlayer.view.frame = self.view.frame;
    _moviePlayer.movieSourceType = MPMovieSourceTypeFile;//播放本地视频
    
    [self.view addSubview:_moviePlayer.view];
    _moviePlayer.shouldAutoplay = YES;
    [_moviePlayer prepareToPlay]; //准备资源,
    
    

    MPMoviePlayerViewController

    MPMoviePlayerViewController继承自UIViewController,它包含一个MPMoviePlayerController的属性moviePlayer。可以简单理解为是对MPMoviePlayerController的简单封装使用。对视频属性的修改还是通过moviePlayer来设置。

    NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"WeChatSight3033" withExtension:@"mp4"];
    MPMoviePlayerViewController *playerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:fileUrl];
    [self presentMoviePlayerViewControllerAnimated:playerViewController];
    

    AVPlayerController 的问题是他是一个极度的黑盒组件,基于AV Foundation之上,但是它将所有基础功能都隐藏了,无法使用AVPlayer和AVPlayerItem提供的更高级的功能。

    AVKit

    iOS 8.0之后引入AVKit框架,相对于之前的Media Player框架,更复杂也更加灵活强大。iOS9.0之后Media Player将被遗弃,所以更要关注的是AVKit

    AVKit里包含的内容很少,通过查看头文件,可以看到:

    #import <AVKit/AVError.h>
    #import <AVKit/AVPictureInPictureController.h>
    #import <AVKit/AVPlayerViewController.h>
    #import <AVKit/AVRoutePickerView.h>
    

    其中iOS8.0只有对应的AVPlayerViewController

    AVPlayerViewController

    AVPlayerViewController是UIViewController的子类,用于展示并控制AVPlayer实例的播放。

    最简单的创建视频播放方式:

    //初始化viewcontroller
    AVPlayerViewController *playerVC = [[AVPlayerViewController alloc] init];
    NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"WeChatSight3033" withExtension:@"mp4"];
    //创建AVPlayer
    AVPlayer *player = [[AVPlayer alloc] initWithURL:fileUrl];
        
    //将Player赋值给AVPlayerViewController
    playerVC.player = player;    
    
    [self presentViewController:playerVC animated:YES completion:nil];
    
    

    1、对应的一些关键属性:

    • player(AVPlayer): 播放视图的资源媒体内容
    • showsPlaybackControls(BOOL): 表示播放空间是否显示或隐藏,默认YES-显示。
    • videoGravity(NSString): 设置视频资源与视图承载范围的适应情况。
    • readyForDisplay(BOOL): 通过观察这个值来确定视频内容是否已经准备好进行展示。
    • videoBounds(CGRect): 视频相对于图层的尺寸和位置
    • contentOverlayView(UIView): 只读,可以添加自定义view,在视频与控件之间。

    2、层级/结构

    3、为AVPlayerViewController提供资源的步骤

    //1、 通过URL创建资源
    AVAsset *asset = [AVAsset assetWithURL:fileUrl];
        
    //2、 为资源创建playerItem
    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];
    
    //3、 通过playerItem创建Player
    AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
        
    //4、 将player与playerViewController关联。
    playerViewController.player = player;
    
    
    //最简单的方式,将以上四步简化为一步。但是对应的更多操作将会受到限制,根据实际情况处理。
    playerViewController.player = [AVPlayer playerWithURL:fileUrl];
    
    

    关于AVPlayerViewController更多的高级用法,更多是AVPlayer的用法,与AVPlayerItemAVAsset相关密切。也即是与AVFoundation的联合使用。

    相关文章

      网友评论

        本文标题:AVFoundation开发秘籍笔记-05AVKit用法-AVP

        本文链接:https://www.haomeiwen.com/subject/qncajftx.html