一个基于 AVPlayer 的简单 iOS 视频播放器。支持垂直和水平播放模式,在水平模式下也可以锁定屏幕方向。支持调整音量、亮度以及视频进度。
中文说明 ZFPlayer剖析 哪些 app 使用 ZFPlayer
特性
- 支持水平和垂直播放模式,在水平模式下也可以锁定屏幕方向
- 支持使用在线 URL 和本地文件播放
- 支持在 TableviewCell 中播放视频
- 通过屏幕左侧的垂直滑动调整亮度
- 通过屏幕右侧的垂直滑动调整音量
- 通过水平滑动前进或后退
- 全屏模式可以拖动进度条控制进度,并显示视频预览
- 下载
- 切换视频分辨率
要求
- iOS 7+
- Xcode 8+
新测试版本
测试版本这是一个测试版本,包含一些错误。
组件
- 断点下载: ZFDownload
- ZFNavigationController: ZFNavigationController
- 布局: Masonry
安装
CocoaPods
pod 'ZFPlayer'
然后,运行以下命令
$ pod install
使用(支持IB和代码)
设置状态栏颜色
请将“基于视图控制器状态的显示”字段添加到info.plist中,并将其更改为NO
IB使用
将IB拖动到UIView中,使用视图类ZFPlayerView
// view
ZFPlayerControlView *controlView = [[ZFPlayerControlView alloc] init];
// model
ZFPlayerModel *playerModel = [[ZFPlayerModel alloc] init];
playerModel.fatherView = ...
playerModel.videoURL = ...
playerModel.title = ...
[self.playerView playerControlView:controlView playerModel:playerModel];
// delegate
self.playerView.delegate = self;
// auto play the video
[self.playerView autoPlayTheVideo];
ZFPlayerDelegate
/** backBtn event */
- (void)zf_playerBackAction;
/** downloadBtn event */
- (void)zf_playerDownload:(NSString *)url;
代码实现(Masonry)使用
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);
// Here a 16:9 aspect ratio, can customize the video aspect ratio
make.height.equalTo(self.playerView.mas_width).multipliedBy(9.0f/16.0f);
}];
// control view(you can custom)
ZFPlayerControlView *controlView = [[ZFPlayerControlView alloc] init];
// model
ZFPlayerModel *playerModel = [[ZFPlayerModel alloc]init];
playerModel.fatherView = ...
playerModel.videoURL = ...
playerModel.title = ...
[self.playerView playerControlView:controlView playerModel:playerModel];
// delegate
self.playerView.delegate = self;
// auto play the video
[self.playerView autoPlayTheVideo];
设置视频填充模式
// Set the fill mode of the video, the default settings (ZFPlayerLayerGravityResizeAspect: wait for a proportional fill, until a dimension reaches the area boundary).
self.playerView.playerLayerGravity = ZFPlayerLayerGravityResizeAspect;
是否支持断点下载功能
// Default is to close the breakpoint download function, such as the need for this feature set here
self.playerView.hasDownload = YES;
从XX秒处播放视频
// Play video from XX seconds
playerModel.seekTime = 15;
自动播放视频,默认不自动播放
// Automatically play the video
[self.playerView autoPlayTheVideo];
设置视频的占位图
// The video placeholder image
// If network image and local image set at the same time, ignore the local image, display the network images
ZFPlayerModel *playerModel = [[ZFPlayerModel alloc]init];
// local image
playerModel.placeholderImage = [UIImage imageNamed: @"..."];
// network image
playerModel.placeholderImageURLString = @"https://xxx.jpg";
self.playerView.playerModel = playerModel;
自定义控制层
self.playerView.controlView = your customView;
在.m
文件中实现你需要实现以下方法,可以参考ZFPlayerControlView.m
/**
* Set playaer model
*/
- (void)zf_playerModel:(ZFPlayerModel *)playerModel;
/**
* Show controlView
*/
- (void)zf_playerShowControlView;
/**
* Hide controlView
*/
- (void)zf_playerHideControlView;
/**
* Reset controlView
*/
- (void)zf_playerResetControlView;
/**
* Reset controlView for resolution
*/
- (void)zf_playerResetControlViewForResolution;
/**
* Cancel auto fadeout controlView
*/
- (void)zf_playerCancelAutoFadeOutControlView;
/**
* Begin to play
*/
- (void)zf_playerItemPlaying;
/**
* Play end
*/
- (void)zf_playerPlayEnd;
/**
* Has download function
*/
- (void)zf_playerHasDownloadFunction:(BOOL)sender;
/**
* Resolution function
*/
- (void)zf_playerResolutionArray:(NSArray *)resolutionArray;
/**
* PlayBtn state (play or pause)
*/
- (void)zf_playerPlayBtnState:(BOOL)state;
/**
* LockBtn state
*/
- (void)zf_playerLockBtnState:(BOOL)state;
/**
* DownloadBtn state
*/
- (void)zf_playerDownloadBtnState:(BOOL)state;
/**
* Player activity
*/
- (void)zf_playerActivity:(BOOL)animated;
/**
* Set preview View
*/
- (void)zf_playerDraggedTime:(NSInteger)draggedTime sliderImage:(UIImage *)image;
/**
* Dragged to control video progress
* @param draggedTime Dragged time for video
* @param totalTime Total time for video
* @param forawrd Whether fast forward
* @param preview Is there a preview
*/
- (void)zf_playerDraggedTime:(NSInteger)draggedTime totalTime:(NSInteger)totalTime isForward:(BOOL)forawrd hasPreview:(BOOL)preview;
/**
* Dragged end
*/
- (void)zf_playerDraggedEnd;
/**
* Normal play
* @param currentTime Current time for video
* @param totalTime Total Time for video
* @param value Slider value(0.0~1.0)
*/
- (void)zf_playerCurrentTime:(NSInteger)currentTime totalTime:(NSInteger)totalTime sliderValue:(CGFloat)value;
/**
* Progress display buffer
*/
- (void)zf_playerSetProgress:(CGFloat)progress;
/**
* Video load failure
*/
- (void)zf_playerItemStatusFailed:(NSError *)error;
/**
* Bottom shrink play
*/
- (void)zf_playerBottomShrinkPlay;
/**
* play on 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
Swift Player
请查看BMPlayer,感谢BMPlayer作者的开源。
联系我
许可证
ZFPlayer可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。