A simple video player for iOS, based on AVPlayer. Support the vertical, horizontal screen(lock screen direction). Support adjust volume, brigtness and video progress.
中文说明 ZFPlayer剖析 哪些app使用ZFPlayer
Features
- Support for horizontal and vertical play mode, in horizontal mode can also lock the screen direction
- Support play with online URL and local file
- Support in TableviewCell playing video
- Adjust brightness by slide vertical at left side of screen
- Adjust volume by slide vertical at right side of screen
- Slide horizontal to fast forward and rewind
- Full screen mode to drag the slider control progress, display video preview
- Download
- Toggle video resolution
Requirements
- iOS 7+
- Xcode 8+
New test version
Test VersionThis is a test version,has some bugs.
Component
- Breakpoint Download: ZFDownload
- ZFNavigationController: ZFNavigationController
- Layout: Masonry
Installation
CocoaPods
pod 'ZFPlayer'
Then, run the following command:
$ pod install
Usage (Support IB and code)
Set status bar color
Please add the "View controller-based status bar appearance" field in info.plist and change it to NO
IB usage
Drag IB to UIView,the View class ZFPlayerView
instead
// 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;
Code implementation (Masonry) usage
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 for the video
// 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;
Is there a breakpoint download function
// Default is to close the breakpoint download function, such as the need for this feature set here
self.playerView.hasDownload = YES;
Play video from XX seconds
// Play video from XX seconds
playerModel.seekTime = 15;
Automatically play the video,not automatically play by default
// Automatically play the video
[self.playerView autoPlayTheVideo];
Set the video placeholderImage
// 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;
Custom control layer
self.playerView.controlView = your customView;
custom view you need to implement the following method in .m
, you can referenceZFPlayerControlView.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;
Picture demonstration
Reference link:
- 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:
See the BMPlayer please, thanks the BMPlayer author's open source.
Contact me
- Weibo: @任子丰
- Email: zifeng1300@gmail.com
- QQ:459643690
- QQ Group: 213376937(full) 213375947(add this)
License
ZFPlayer is available under the MIT license. See the LICENSE file for more info.