iOS 基于AVPlayer自定义视频播放器

作者: 卢叁 | 来源:发表于2017-10-12 18:41 被阅读174次

    前言:视频播放是一个很常见的功能,系统自带的有三种播放器 MPMoviePlayerController、AVPlayerViewController、AVPlayer。但是MPMoviePlayerController 在iOS9以后被弃用,AVPlayerViewController 只能用于iOS8以后,所以使用AVFoundation框架中的AVPlayer来自定义视频播放器是很多项目的选择。我封装的LYAVPlayer只需几行代码就可以实现视频播放的功能:

             LYAVPlayerView *playerView =[LYAVPlayerView alloc]init];         
             playerView.frame =CGRectMake(0, 64, ScreenWidth,200);
             playerView.delegate =self;//设置代理
             [self.view addSubview:playerView];
             [playerView setURL:[NSURL URLWithString:VideoURL]];//设置播放的URL
             [playerView play];//开始播放
    

    一、开放的属性和方法
    1.AVPlayer本身并不显示视频!需要一个AVPlayerLayer播放层来显示视频,然后添加到父视图的layer中。
    2.AVPlayer只负责视频管理和调控,而视频资源是由AVPlayerItem提供的,每个AVPlayerItem对应一个视频地址。

    2183550-682ad3bbbd93789d.png 2183550-c094634076ef398a.png

    二、代理方法

    /**AVPlayerItem的三种状态
    
    *AVPlayerItemStatusUnknown,
    
    *AVPlayerItemStatusReadyToPlay,
    
    *AVPlayerItemStatusFailed
    
    */
    
    //所有的代理方法均已回到主线程 可直接刷新UI
    
    // 可播放/播放中
    
    - (void)videoPlayerIsReadyToPlayVideo:(LYAVPlayerView *)playerView;
    
    //播放完毕
    
    - (void)videoPlayerDidReachEnd:(LYAVPlayerView *)playerView;
    
    //当前播放时间
    
    - (void)videoPlayer:(LYAVPlayerView *)playerView timeDidChange:(CGFloat )time;
    
    //duration 当前缓冲的长度
    
    - (void)videoPlayer:(LYAVPlayerView *)playerView loadedTimeRangeDidChange:(CGFloat )duration;
    
    //进行跳转后没数据 即播放卡顿
    
    - (void)videoPlayerPlaybackBufferEmpty:(LYAVPlayerView *)playerView;
    
    // 进行跳转后有数据 能够继续播放
    
    - (void)videoPlayerPlaybackLikelyToKeepUp:(LYAVPlayerView *)playerView;
    
    //加载失败
    
    - (void)videoPlayer:(LYAVPlayerView *)playerView didFailWithError:(NSError *)error;
    

    GitHub源码

    相关文章

      网友评论

        本文标题:iOS 基于AVPlayer自定义视频播放器

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