AVFoundation-AVPlayer

使用AVPlayer播放视频

1. 父类是NSObject
2. AVPlayer可以播放本地音频文件,远程音频文件,本地和远程视频
3. 单纯用AVPlayer播放视频,只能播放声音, 看不到图像;解决方案:需要借助AVPlayerLayer对象,根据player创建图层, 添加到视图上
4. AVPlayerLayer父类是CALayer

使用AVPlayer 播放远程视频

  1. objc

    // 0准备工作
        // 01 导入框架
        #import <AVFoundation/AVFoundation.h>
    
        // 02 iOS9.0 网络请求适配(HTTPS-->HTTP)需在info.plist配置NSAppTransportSecurity
    
        // 03 设置成员变量
            @property (nonatomic, readwrite, strong) MPMoviePlayerController *moviePlayer;
    
    // 1. 通过远程URL创建AVPlayer对象
        NSURL *remoteURL = [NSURL URLWithString:@"http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4"];
        _player = [AVPlayer playerWithURL:remoteURL];
    
    // 2. 开始播放
        [self.player play];
    
    // 3 实现视频显示功能
        // 3.1 根据player对象, 创建 AVPlayerLayer 对象
        AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:self.player];
    
        // 3.2 添加到需要展示的视图上
        [self.view.layer addSublayer:layer];
    
        // 3.3 设置图层 AVPlayerLayer 的大小
        // 不要在viewDidLoad设置,此时view的frame不一定准
        layer.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height * 9 / 16);
    
    // 4. 封装专门用于播放的视图
    // 主要封装一些操作的工具条
    
  2. swift

    // 0 准备工作
        // 01 导入框架
        import AVFoundation
    
        // 02 iOS9.0 网络请求适配(HTTPS-->HTTP)需在info.plist配置NSAppTransportSecurity
    
    // 懒加载AVPlayer
    lazy var player: AVPlayer = {
            // 1. 通过远程URL创建AVPlayer对象
            let url = NSURL(string: "http://v1.mukewang.com/19954d8f-e2c2-4c0a-b8c1-a4c826b5ca8b/L.mp4")
            let player = AVPlayer(URL: url!)
            return player
        }()
    
        // 2. 定义图层用于显示视图
        var layer: AVPlayerLayer?
    
        override func viewDidLoad() {
            // 2.1 根据player对象, 创建 AVPlayerLayer 对象,并添加到视图中
            layer = AVPlayerLayer(player: player)
            view.layer.addSublayer(layer!)
        }
    
        override func viewWillLayoutSubviews() {
            // 2.2 设置图层 AVPlayerLayer 的大小
            super.viewWillLayoutSubviews()
            layer?.frame = view.bounds
        }
    
        // 点击时调用
        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            // 3. 开始播放
            player.play()
    }
    
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容