当前位置:   article > 正文

AVPlayer 简易媒体播放器_简单av

简单av

最近工作需要用到媒体播放器,所以开始在看这方面的资料。
先是做了一个使用 AVPlayer 播放网络视频的 Demo, 由于需要使用 rtsp 协议连接设备来进行视频实时播放,AVFoundation 并不对此进行支持。
不过既然做了,就还是做一下笔记吧。
如果需要简单的播放 http 协议的网络视频,可以直接套用。

1. 基本步骤

1.1 自定义播放视图

该视图就是播放器的载体。
主要是要重设该视图的 Layer,让他成为 AVPlayerLayer,才能用来播放视频。

NJPreviewPlayerView.h

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

@interface NJPreviewPlayerView : UIView

- (void)setPlayer:(AVPlayer *)player;

@end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

NJPreviewPlayerView.m

#import "NJPreviewPlayerView.h"
#import "FFMpegPlayer.h"

@interface NJPreviewPlayerView()

@property (nonatomic) AVPlayer *player;

@end

@implementation NJPreviewPlayerView

+ (Class)layerClass {
    return [AVPlayerLayer class];
}

- (AVPlayer*)player {
    return [(AVPlayerLayer *)[self layer] player];
}

- (void)setPlayer:(AVPlayer *)player {
    [(AVPlayerLayer *)[self layer] setVideoGravity:AVLayerVideoGravityResize];
    [(AVPlayerLayer *)[self layer] setPlayer:player];
}

@end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

1.2 配置与控制播放器

设置属性 AVPlayer,AVPlayerItem。如果是本地视频还有一个 AVAssets。
基本流程:配置 AVPlayerItem,配置 AVPlayer,监听 AVPlayerItem 状态,然后进行播放。
主要代码在 configurationPlayer 以及 observeValueForKeyPath 中。

NJPreviewPlayerView.h

#import <UIKit/UIKit.h>
#import "NJPreviewPlayerView.h"

@interface NJPreviewViewController : UIViewController

@end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

NJPreviewPlayerView.m

#import "NJPreviewViewController.h"

@interface NJPreviewViewController ()

@property (weak, nonatomic) IBOutlet NJPreviewPlayerView *preview;

@property (nonatomic) AVPlayer * player;
@property (nonatomic) AVPlayerItem * playerItem;

@end

@implementation NJPreviewViewController

#pragma mark - Lift cycle

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self configurationPlayer];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    [self removeObservers];
}

#pragma mark - Preview

- (void)configurationPlayer {
    NSURL * url = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"];

    self.playerItem = [AVPlayerItem playerItemWithURL:url];
    self.player = [AVPlayer playerWithPlayerItem:self.playerItem];

    [self setObservers];

    [self.preview setPlayer:self.player];
}

#pragma mark - KVO

- (void)setObservers {
    [self.playerItem addObserver:self forKeyPath:@"status" options:0 context:nil];
}

- (void)removeObservers {
    [self.playerItem removeObserver:self forKeyPath:@"status"];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
    if ([keyPath isEqualToString:@"status"]) {
        NSLog(@"%@", self.playerItem.error);

        switch (self.playerItem.status) {
            case AVPlayerItemStatusReadyToPlay:
                NSLog(@"AVPlayerItemStatusReadyToPlay");
                [self.player play];
                break;
            case AVPlayerItemStatusUnknown:
                NSLog(@"AVPlayerItemStatusUnknown");
                break;
            case AVPlayerItemStatusFailed:
                NSLog(@"AVPlayerItemStatusFailed");
                break;
        }
    }
}

@end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

2. 参考资料

我用到的就是这么简单的,所以没有写复杂,但是其实 AVFoundation 家族非常强大,录音,录像也可以用它来做。
具体参考官方文档,讲得非常详细。

Apple: AVFoundation Programming Guide

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号