基于AVPlayer,支持竖屏、横屏(横屏可锁定屏幕方向),上下滑动调节音量、屏幕亮度,左右滑动调节播放进度
- 支持横、竖屏切换,在横屏模式下可以锁定屏幕方向
- 支持本地视频、网络视频播放
- 支持在TableviewCell播放视频
- 左侧1/2位置上下滑动调节屏幕亮度(模拟器调不了亮度,请在真机调试)
- 右侧1/2位置上下滑动调节音量(模拟器调不了音量,请在真机调试)
- 左右滑动调节播放进度
- 全屏状态下拖动slider控制进度,显示视频的预览图
- 断点下载功能
- 切换视频分辨率
- iOS 7+
- Xcode 8+
哪些APP使用ZFPlayer,并上架AppStore,请告诉我,帮助我统计。
- 断点下载: ZFDownload
- 布局: Masonry
pod 'ZFPlayer'
Then, run the following command:
$ pod install
请在info.plist中增加"View controller-based status bar appearance"字段,并改为NO
直接拖UIView到IB上,View类改为ZFPlayerView
// 初始化控制层view(可自定义)
ZFPlayerControlView *controlView = [[ZFPlayerControlView alloc] init];
// 初始化播放模型
ZFPlayerModel *playerModel = [[ZFPlayerModel alloc] init];
// playerView的父视图
playerModel.fatherView = ...;
playerModel.videoURL = ...
playerModel.title = ...
[self.playerView playerControlView:controlView playerModel:playerModel];
// 设置代理
self.playerView.delegate = self;
// 自动播放
[self.playerView autoPlayTheVideo];
ZFPlayerDelegate
/** 返回按钮事件 */
- (void)zf_playerBackAction;
/** 下载视频 */
- (void)zf_playerDownload:(NSString *)url;
self.playerView = [[ZFPlayerView alloc] init];
[self.view addSubview:self.playerView];
[self.playerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view).offset(20);
make.left.right.equalTo(self.view);
// 这里宽高比16:9,可以自定义视频宽高比
make.height.equalTo(self.playerView.mas_width).multipliedBy(9.0f/16.0f);
}];
// 初始化控制层view(可自定义)
ZFPlayerControlView *controlView = [[ZFPlayerControlView alloc] init];
// 初始化播放模型
ZFPlayerModel *playerModel = [[ZFPlayerModel alloc]init];
playerModel.videoURL = ...
playerModel.title = ...
[self.playerView playerControlView:controlView playerModel:playerModel];
// 设置代理
self.playerView.delegate = self;
// 自动播放
[self.playerView autoPlayTheVideo];
// 设置视频的填充模式,内部设置默认(ZFPlayerLayerGravityResizeAspect:等比例填充,直到一个维度到达区域边界)
self.playerView.playerLayerGravity = ZFPlayerLayerGravityResizeAspect;
// 下载功能,如需要此功能设置这里
self.playerView.hasDownload = YES;
// 从xx秒开始播放视频
playerModel.seekTime = 15;
// 是否自动播放,默认不自动播放
[self.playerView autoPlayTheVideo];
// 设置播放前视频占位图
// 如果网络图片和本地图片同时设置,则忽略本地图片,显示网络图片
ZFPlayerModel *playerModel = [[ZFPlayerModel alloc]init];
// 本地图片
playerModel.placeholderImage = [UIImage imageNamed: @"..."];
// 网络图片
playerModel.placeholderImageURLString = @"https://xxx.jpg";
self.playerView.playerModel = playerModel;
self.playerView.controlView = 自定义的View;
自定义view你需要实现以下方法,直接在.m
中实现即可,可参考ZFPlayerControlView.m
/**
* 设置播放模型
*/
- (void)zf_playerModel:(ZFPlayerModel *)playerModel;
/**
* 显示控制层
*/
- (void)zf_playerShowControlView;
/**
* 隐藏控制层
*/
- (void)zf_playerHideControlView;
/**
* 重置ControlView
*/
- (void)zf_playerResetControlView;
/**
* 切换分辨率时重置ControlView
*/
- (void)zf_playerResetControlViewForResolution;
/**
* 取消自动隐藏控制层view
*/
- (void)zf_playerCancelAutoFadeOutControlView;
/**
* 开始播放(用来隐藏placeholderImageView)
*/
- (void)zf_playerItemPlaying;
/**
* 播放完了
*/
- (void)zf_playerPlayEnd;
/**
* 是否有下载功能
*/
- (void)zf_playerHasDownloadFunction:(BOOL)sender;
/**
* 是否有切换分辨率功能
@param resolutionArray 分辨率名称的数组
*/
- (void)zf_playerResolutionArray:(NSArray *)resolutionArray;
/**
* 播放按钮状态 (播放、暂停状态)
*/
- (void)zf_playerPlayBtnState:(BOOL)state;
/**
* 锁定屏幕方向按钮状态
*/
- (void)zf_playerLockBtnState:(BOOL)state;
/**
* 下载按钮状态
*/
- (void)zf_playerDownloadBtnState:(BOOL)state;
/**
* 加载的菊花
*/
- (void)zf_playerActivity:(BOOL)animated;
/**
* 设置预览图
* @param draggedTime 拖拽的时长
* @param image 预览图
*/
- (void)zf_playerDraggedTime:(NSInteger)draggedTime sliderImage:(UIImage *)image;
/**
拖拽快进 快退
* @param draggedTime 拖拽的时长
* @param totalTime 视频总时长
* @param forawrd 是否是快进
* @param preview 是否有预览图
*/
- (void)zf_playerDraggedTime:(NSInteger)draggedTime totalTime:(NSInteger)totalTime isForward:(BOOL)forawrd hasPreview:(BOOL)preview;
/**
* 滑动调整进度结束结束
*/
- (void)zf_playerDraggedEnd;
/**
* 正常播放
* @param currentTime 当前播放时长
* @param totalTime 视频总时长
* @param value slider的value(0.0~1.0)
*/
- (void)zf_playerCurrentTime:(NSInteger)currentTime totalTime:(NSInteger)totalTime sliderValue:(CGFloat)value;
/**
* progress显示缓冲进度
*/
- (void)zf_playerSetProgress:(CGFloat)progress;
/**
* 视频加载失败
*/
- (void)zf_playerItemStatusFailed:(NSError *)error;
/**
* 小屏播放
*/
- (void)zf_playerBottomShrinkPlay;
/**
* 在cell播放
*/
- (void)zf_playerCellPlay;
- https://segmentfault.com/a/1190000004054258
- http://sky-weihao.github.io/2015/10/06/Video-streaming-and-caching-in-iOS/
- https://developer.apple.com/library/prerelease/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/02_Playback.html#//apple_ref/doc/uid/TP40010188-CH3-SW8
请移步 BMPlayer,感谢 BMPlayer 作者的开源。
- 微博: @任子丰
- 邮箱: [email protected]
- QQ群:213376937
ZFPlayer is available under the MIT license. See the LICENSE file for more info.