AVPlayer 简易媒体播放器
最近工作需要用到媒体播放器,所以开始在看这方面的资料。
先是做了一个使用 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 简易媒体播放器相关推荐
- AVPlayer v1.4 - 超强媒体播放器 中文版
AVPlayer v1.4 - 超强媒体播放器 中文版 一款功能非常强大的视频播放器,支持多种格式视频文件流畅播放.支持 XVID/DIVX,AVI,WMV,RMVB,ASF,H264,MKV 等格式 ...
- 第8章系统服务(简易音频播放器的实现)
开发一个简易音乐播放器,要求实现: 综合使用Service,BroadCast,ContentProvider等组件实现后台播放. 播放和暂停.上一首.下一首.停止: 后台播放功能, 按下返回键退出应 ...
- java 媒体播放器_Java多媒体播放器(三)
No.3 vlcj 一.简介 The vlcj project first gives you Java bindings to just about all of the native functi ...
- 【翻译】HTML5基于浏览器的媒体播放器:可以离线播放你的mp3文件
原文地址:http://www.omgubuntu.co.uk/2011/03/html5-browser-based-media-player-plays-your-mp3s-works-offli ...
- Plyr – 简单,灵活的 HTML5 媒体播放器
Plyr 是一个简单的 HTML5 媒体播放器,包含自定义的控制选项和 WebVTT 字幕.它是只支持现代浏览器,轻量,方便和可定制的媒体播放器.还有的标题和屏幕阅读器的全面支持. 在线演示 ...
- QT实现Media Player(媒体播放器)
QT实现Media Player 项目简介 项目技术 项目展示 主要源码片段解析 获取完整项目源码传送门 项目简介 Media Player示例使用Microsoft Media Player Act ...
- linux 桌面显示视频播放器,Ubuntu 13.10开启媒体播放器VLC桌面通知的步骤
VLC是一款多功能的媒体播放器,支持众多音频及视频格式,能够适用于Ubuntu等系统,而VLC播放器有桌面通知功能,需要手动开启,下面小编就以Ubuntu 13.10为例,给大家详细介绍下Ubuntu ...
- 我的Android进阶之旅------Android MediaPlayer播放mp3的实例--简易mp3播放器
大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer. Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上 ...
- 媒体播放器三大底层架构
2019独角兽企业重金招聘Python工程师标准>>> 媒体播放工具,这里主要指视频播放,因为要面临庞大的兼容性和纷繁复杂的算法,从架构上看,能脱颖而出的体系屈指可数.大体来说业界主 ...
最新文章
- excel函数去重_Java 嵌入 SPL 轻松实现 Excel 文件合并
- python第三方库安装-多种方式
- 正则至少一个数字_好程序员web前端培训分享JavaScript学习笔记之正则
- 第一个PowerShell脚本——PowerShell三分钟(九)
- 第十五节:深入理解async和await的作用及各种适用场景和用法
- 国嵌c语言深度,国嵌C语言深度剖析班(第一期)-国嵌
- 修改pip安装源加快python模块安装
- 谷歌语音识别功能Live Transcribe,让AI帮助语言障碍者“说话”
- Win8仿Win10无边框效果的实现
- 中国裁判文书下载:selenium路线
- 硅谷天才CEO被罢免10天后绝地反击,重夺控制权
- 幸福是阳光的味道(转)
- 虚拟化介绍及Docker与传统虚拟化有什么区别
- Echarts仪表盘的大小调整
- C++后台开发学习路线(已多人拿下腾讯后台开发)
- 【上位机与下位机通信】使用WIFI模块ESP8266连接单片机与上位机通信
- GBase 8a语法格式
- 大学毕业小总结以及感想
- MultiCD: 构建多重引导 CD 映像
- 搭建gloo网关(基于envoy)的wasm实验环境(阿里云、本机)
热门文章
- 【LOSOL】周志02:雄心壮志
- 记载_扩展欧几里得求模逆
- 【语音编码】基于matlab ADPCM编解码(Matlab代码实现)
- MySQL数据库优劣简介
- echarts雷达图 echart雷达图 雷达图
- 计算机主机光驱弹不出来怎么办,光驱弹不出来怎么办?电脑光驱弹不出来如何解决?...
- 植物大战僵尸年度版下载 (官方中文去广告版,可玩性提升!)
- iOS 5不完美越狱教程(含视频)
- Linux公网通信(一)神器autossh(树莓派跨局域网远程监控和远程登录)
- 5月20日---疯狂猜成语-----四周第二次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜...