//
|
// ZFMediaPlayback.h
|
// ZFPlayer
|
//
|
// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng )
|
//
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// of this software and associated documentation files (the "Software"), to deal
|
// in the Software without restriction, including without limitation the rights
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
// copies of the Software, and to permit persons to whom the Software is
|
// furnished to do so, subject to the following conditions:
|
//
|
// The above copyright notice and this permission notice shall be included in
|
// all copies or substantial portions of the Software.
|
//
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
// THE SOFTWARE.
|
|
#import <Foundation/Foundation.h>
|
#import "ZFPlayerView.h"
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
typedef NS_ENUM(NSUInteger, ZFPlayerPlaybackState) {
|
ZFPlayerPlayStateUnknown = 0,
|
ZFPlayerPlayStatePlaying,
|
ZFPlayerPlayStatePaused,
|
ZFPlayerPlayStatePlayFailed,
|
ZFPlayerPlayStatePlayStopped
|
};
|
|
typedef NS_OPTIONS(NSUInteger, ZFPlayerLoadState) {
|
ZFPlayerLoadStateUnknown = 0,
|
ZFPlayerLoadStatePrepare = 1 << 0,
|
ZFPlayerLoadStatePlayable = 1 << 1,
|
ZFPlayerLoadStatePlaythroughOK = 1 << 2, // Playback will be automatically started.
|
ZFPlayerLoadStateStalled = 1 << 3, // Playback will be automatically paused in this state, if started.
|
};
|
|
typedef NS_ENUM(NSInteger, ZFPlayerScalingMode) {
|
ZFPlayerScalingModeNone, // No scaling.
|
ZFPlayerScalingModeAspectFit, // Uniform scale until one dimension fits.
|
ZFPlayerScalingModeAspectFill, // Uniform scale until the movie fills the visible bounds. One dimension may have clipped contents.
|
ZFPlayerScalingModeFill // Non-uniform scale. Both render dimensions will exactly match the visible bounds.
|
};
|
|
@protocol ZFPlayerMediaPlayback <NSObject>
|
|
@required
|
/// The view must inherited `ZFPlayerView`,this view deals with some gesture conflicts.
|
@property (nonatomic) ZFPlayerView *view;
|
|
@optional
|
/// The player volume, 0...1.0
|
/// Only affects audio volume for the player instance and not for the device.
|
/// You can change device volume or player volume as needed,change the player volume you can folllow the `ZFPlayerMediaPlayback` protocol.
|
@property (nonatomic) float volume;
|
|
/// The player muted
|
/// indicates whether or not audio output of the player is muted. Only affects audio muting for the player instance and not for the device.
|
/// You can change device volume or player muted as needed,change the player muted you can folllow the `ZFPlayerMediaPlayback` protocol.
|
@property (nonatomic, getter=isMuted) BOOL muted;
|
|
/// Playback speed,0.5...2
|
@property (nonatomic) float rate;
|
|
/// The player current play time.
|
@property (nonatomic, readonly) NSTimeInterval currentTime;
|
|
/// The player total time.
|
@property (nonatomic, readonly) NSTimeInterval totalTime;
|
|
/// The player buffer time.
|
@property (nonatomic, readonly) NSTimeInterval bufferTime;
|
|
/// The player seek time.
|
@property (nonatomic) NSTimeInterval seekTime;
|
|
/// The player play state,playing or not playing.
|
@property (nonatomic, readonly) BOOL isPlaying;
|
|
/// Determines how the content scales to fit the view. Defaults to ZFPlayerScalingModeNone.
|
@property (nonatomic) ZFPlayerScalingMode scalingMode;
|
|
/**
|
@abstract Check whether video preparation is complete.
|
@discussion isPreparedToPlay processing logic
|
|
* If isPreparedToPlay is TRUE, you can call [ZFPlayerMediaPlayback play] API start playing;
|
* If isPreparedToPlay to FALSE, direct call [ZFPlayerMediaPlayback play], in the play the internal automatic call [ZFPlayerMediaPlayback prepareToPlay] API.
|
* Returns YES if prepared for playback.
|
*/
|
@property (nonatomic, readonly) BOOL isPreparedToPlay;
|
|
/// The play asset URL.
|
@property (nonatomic) NSURL *assetURL;
|
|
/// The video size.
|
@property (nonatomic, readonly) CGSize presentationSize;
|
|
/// The playback state.
|
@property (nonatomic, readonly) ZFPlayerPlaybackState playState;
|
|
/// The player load state.
|
@property (nonatomic, readonly) ZFPlayerLoadState loadState;
|
|
/// The block invoked when the player is Ready to play.
|
@property (nonatomic, copy, nullable) void(^playerPrepareToPlay)(id<ZFPlayerMediaPlayback> asset, NSURL *assetURL);
|
|
/// The block invoked when the player play progress changed.
|
@property (nonatomic, copy, nullable) void(^playerPlayTimeChanged)(id<ZFPlayerMediaPlayback> asset, NSTimeInterval currentTime, NSTimeInterval duration);
|
|
/// The block invoked when the player play buffer changed.
|
@property (nonatomic, copy, nullable) void(^playerBufferTimeChanged)(id<ZFPlayerMediaPlayback> asset, NSTimeInterval bufferTime);
|
|
/// The block invoked when the player playback state changed.
|
@property (nonatomic, copy, nullable) void(^playerPlayStatChanged)(id<ZFPlayerMediaPlayback> asset, ZFPlayerPlaybackState playState);
|
|
/// The block invoked when the player load state changed.
|
@property (nonatomic, copy, nullable) void(^playerLoadStatChanged)(id<ZFPlayerMediaPlayback> asset, ZFPlayerLoadState loadState);
|
|
/// The block invoked when the player play end.
|
@property (nonatomic, copy, nullable) void(^playerDidToEnd)(id<ZFPlayerMediaPlayback> asset);
|
|
/// Prepares the current queue for playback, interrupting any active (non-mixible) audio sessions.
|
- (void)prepareToPlay;
|
|
/// Reload player.
|
- (void)reloadPlayer;
|
|
/// Play playback.
|
- (void)play;
|
|
/// Pauses playback.
|
- (void)pause;
|
|
/// Replay playback.
|
- (void)replay;
|
|
/// Stop playback.
|
- (void)stop;
|
|
/// Video UIImage at the current time.
|
- (UIImage *)thumbnailImageAtCurrentTime;
|
|
/// Replace the current playback URL.
|
- (void)replaceCurrentAssetURL:(NSURL *)assetURL;
|
|
/// Use this method to seek to a specified time for the current player and to be notified when the seek operation is complete.
|
- (void)seekToTime:(NSTimeInterval)time completionHandler:(void (^ __nullable)(BOOL finished))completionHandler;
|
|
@end
|
|
NS_ASSUME_NONNULL_END
|