最近工作需要用到媒体播放器,所以开始在看这方面的资料。
先是做了一个使用 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

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 配置与控制播放器

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

NJPreviewPlayerView.h

#import <UIKit/UIKit.h>
#import "NJPreviewPlayerView.h"@interface NJPreviewViewController : UIViewController@end

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

2. 参考资料

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

Apple: AVFoundation Programming Guide

AVPlayer 简易媒体播放器相关推荐

  1. AVPlayer v1.4 - 超强媒体播放器 中文版

    AVPlayer v1.4 - 超强媒体播放器 中文版 一款功能非常强大的视频播放器,支持多种格式视频文件流畅播放.支持 XVID/DIVX,AVI,WMV,RMVB,ASF,H264,MKV 等格式 ...

  2. 第8章系统服务(简易音频播放器的实现)

    开发一个简易音乐播放器,要求实现: 综合使用Service,BroadCast,ContentProvider等组件实现后台播放. 播放和暂停.上一首.下一首.停止: 后台播放功能, 按下返回键退出应 ...

  3. java 媒体播放器_Java多媒体播放器(三)

    No.3 vlcj 一.简介 The vlcj project first gives you Java bindings to just about all of the native functi ...

  4. 【翻译】HTML5基于浏览器的媒体播放器:可以离线播放你的mp3文件

    原文地址:http://www.omgubuntu.co.uk/2011/03/html5-browser-based-media-player-plays-your-mp3s-works-offli ...

  5. Plyr – 简单,灵活的 HTML5 媒体播放器

    Plyr 是一个简单的 HTML5 媒体播放器,包含自定义的控制选项和 WebVTT 字幕.它是只支持现代浏览器,轻量,方便和可定制的媒体播放器.还有的标题和屏幕阅读器的全面支持. 在线演示      ...

  6. QT实现Media Player(媒体播放器)

    QT实现Media Player 项目简介 项目技术 项目展示 主要源码片段解析 获取完整项目源码传送门 项目简介 Media Player示例使用Microsoft Media Player Act ...

  7. linux 桌面显示视频播放器,Ubuntu 13.10开启媒体播放器VLC桌面通知的步骤

    VLC是一款多功能的媒体播放器,支持众多音频及视频格式,能够适用于Ubuntu等系统,而VLC播放器有桌面通知功能,需要手动开启,下面小编就以Ubuntu 13.10为例,给大家详细介绍下Ubuntu ...

  8. 我的Android进阶之旅------Android MediaPlayer播放mp3的实例--简易mp3播放器

    大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer. Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上 ...

  9. 媒体播放器三大底层架构

    2019独角兽企业重金招聘Python工程师标准>>> 媒体播放工具,这里主要指视频播放,因为要面临庞大的兼容性和纷繁复杂的算法,从架构上看,能脱颖而出的体系屈指可数.大体来说业界主 ...

最新文章

  1. excel函数去重_Java 嵌入 SPL 轻松实现 Excel 文件合并
  2. python第三方库安装-多种方式
  3. 正则至少一个数字_好程序员web前端培训分享JavaScript学习笔记之正则
  4. 第一个PowerShell脚本——PowerShell三分钟(九)
  5. 第十五节:深入理解async和await的作用及各种适用场景和用法
  6. 国嵌c语言深度,国嵌C语言深度剖析班(第一期)-国嵌
  7. 修改pip安装源加快python模块安装
  8. 谷歌语音识别功能Live Transcribe,让AI帮助语言障碍者“说话”
  9. Win8仿Win10无边框效果的实现
  10. 中国裁判文书下载:selenium路线
  11. 硅谷天才CEO被罢免10天后绝地反击,重夺控制权
  12. 幸福是阳光的味道(转)
  13. 虚拟化介绍及Docker与传统虚拟化有什么区别
  14. Echarts仪表盘的大小调整
  15. C++后台开发学习路线(已多人拿下腾讯后台开发)
  16. 【上位机与下位机通信】使用WIFI模块ESP8266连接单片机与上位机通信
  17. GBase 8a语法格式
  18. 大学毕业小总结以及感想
  19. MultiCD: 构建多重引导 CD 映像
  20. 搭建gloo网关(基于envoy)的wasm实验环境(阿里云、本机)

热门文章

  1. 【LOSOL】周志02:雄心壮志
  2. 记载_扩展欧几里得求模逆
  3. 【语音编码】基于matlab ADPCM编解码(Matlab代码实现)
  4. MySQL数据库优劣简介
  5. echarts雷达图 echart雷达图 雷达图
  6. 计算机主机光驱弹不出来怎么办,光驱弹不出来怎么办?电脑光驱弹不出来如何解决?...
  7. 植物大战僵尸年度版下载 (官方中文去广告版,可玩性提升!)
  8. iOS 5不完美越狱教程(含视频)
  9. Linux公网通信(一)神器autossh(树莓派跨局域网远程监控和远程登录)
  10. 5月20日---疯狂猜成语-----四周第二次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜...