BBASMVideoAdapterProtocol.h 6.57 KB
//
//  BBASMVideoAdapterProtocol.h
//  BBAMNP
//
//  Created by baidu on 2019/3/5.
//  Copyright © 2019年 Baidu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "BBASMVideoHandleDelegate.h"

@protocol BBASMVideoAdapterProtocol <NSObject>

/**
 * @brief 创建播放器实例
 * @param delegate BBASMVideoHandleDelegate
 * @return 播放器实例(如果播放器实例类型是UIView或者UIView的子类,则需要加到ViewController上)
 */
- (UIViewController *)createVideoInstanceWithDelegate:(id<BBASMVideoHandleDelegate>)delegate;

/**
 * @brief 设置视频播放信息
 * @param videoInfo 视频信息
 */
- (void)setPlayerVideoInfo:(NSDictionary *)videoInfo;

/**
 * @brief 开始播放
 */
- (void)startPlay;

/**
 * @brief 暂停播放
 */
- (void)pause;

/**
 * @brief 继续播放
 */
- (void)resume;

/**
 * @brief 停止播放器,内核释放 (destroy) - 默认不向外部发送停止声音事件
 */
- (void)stop;

/**
 * @brief 停止播放器,内核释放 (destroy)
 * @param isReport 是否向外部app发送停止声音事件
 */
- (void)stopPlayerReportDeactiveAudioSession:(BOOL)isReport;

/**
 * @brief 重新播放,比如点击重新播放按钮
 */
- (void)replay;

/**
 * @brief 播放器seek到位置,默认不精确seek
 * @param seconds 时间位置
 */
- (void)seek:(double)seconds;

/**
 * @brief 播放器seek到位置
 * @param seconds 时间位置
 * @param accurate 是否精准(精准的话会影响性能,比如启播慢)
 */
- (void)seek:(double)seconds accurate:(BOOL)accurate;

/**
 * @brief 播放器seek到位置,默认不精确seek
 * @param seconds 时间位置
 * @param completionHandler block回调
 */
- (void)seek:(double)seconds completionHandler:(void (^)(BOOL finished))completionHandler;

/**
 * @brief 播放器seek到位置
 * @param seconds 时间位置
 * @param accurate 是否精准(精准的话会影响性能,比如启播慢)
 * @param completionHandler block回调
 */
- (void)seek:(double)seconds accurate:(BOOL)accurate completionHandler:(void (^)(BOOL finished))completionHandler;

/**
 * @brief 播放器进入全屏
 * @param direction 全屏转屏角度
 */
- (void)enterFullScreenWithDirection:(BBASMPlayerFullScreenDirection)direction;

/**
 * @brief 播放器进入全屏
 * @param animated 动画
 * @param completion block回调
 */
- (void)enterFullScreenAnimated:(BOOL)animated completionHandler:(void(^)(void))completion;

/**
 * @brief 播放器退出全屏
 */
- (void)exitFullScreen;

/**
 * @brief 播放器退出全屏
 * @param animated 动画
 * @param completion block回调
 */
- (void)exitFullScreenAnimated:(BOOL)animated completionHandler:(void(^)(void))completion;

/**
 * @brief 播放器代理
 */
- (id)delegate;

/**
 * @brief 播放器视图类型,全屏视图、小窗视图、自定义视图、没有视图
 */
- (NSUInteger)currentPlayerMode;

/**
 * @brief 发送弹幕信息
 */
- (void)sendDanmu:(NSDictionary *)barrage;

/**
 * @brief 更新弹幕信息
 */
- (void)updateBarrageMeta:(NSDictionary *)barrageMeta;

/**
 * @brief 更新弹幕列表信息
 */
- (void)updateBarrageList:(NSArray *)barrageList;

/**
 * @brief 更新播放器的数据
 */
- (void)updateVideoInfo:(NSDictionary *)videoInfo;

/**
 * @brief 当前播放状态
 */
- (int)currentPlayerStatus;

/**
 * @brief 是否正在播放
 */
- (BOOL)currentIsPlaying;

/**
 * @brief 是否全屏模式
 */
- (BOOL)currentIsFullMode;

/**
 * @brief 是否是活跃状态
 *
 * @return YES 是
 */
- (BOOL)currentIsActive;

/**
 * @brief 更新播放器frame
 */
- (void)updatePlayerFrame:(CGRect)frame ;

/**
 * @brief player视图
 * @return 视图
 */
- (UIView *)replayView;

/**
 * @brief 亮度 音量,进度手势开关
 * @param enable YES 开启
 */
- (void)setBrightnessVolumeAndProgressGestureEnabled:(BOOL)enable;

/**
 * @brief 获取当前播放视频的进度
 * @return 当前视频播放进度
 */
- (CGFloat)currentPlayerTime;

/**
 * @brief 当前正在播放URL
 */
- (NSURL *)currentPlayingURL;

/**
 * @brief 播放器的弹幕开关、弹幕信息、发送视图显示状态
 * @param showSwitch YES 显示弹幕开关按钮
 * @param showDisplayer YES 显示弹幕信息视图
 * @param showPublisher YES 显示弹幕发送视图
 */
- (void)updateBarrageStateShowSwitch:(BOOL)showSwitch  showDisplayer:(BOOL)showDisplayer showPublisher:(BOOL)showPublisher;

/**
 * @brief 更新状态栏显示状态
 * @param showStatusBar YES 显示状态栏,仅全屏下有效;NO 隐藏状态栏,仅全屏下有效
 */
- (void)updateModelWithStatusBarShow:(BOOL)showStatusBar;

/**
* @brief 根据屏幕样式更新控制层显示状态
* @param mode 屏幕样式
   未定义:BBASMPlayerModeNone = 0;全屏:BBASMPlayerModeFull = 1;小窗:BBASMPlayerModeMini = 2;自定义大小:BBASMPlayerModeCustom = 3
*/
- (void)updatePlayerControlWithMode:(BBASMPlayerMode)mode;

/**
 * @brief 更新全屏转屏角度
 *
 * @param direction 转屏角度
 */
- (void)updateFullScreenDirection:(BBASMPlayerFullScreenDirection)direction;


/**
 * @brief 更新是否忽略系统转屏
 *
 * @param ignoreOrientation 忽略系统转屏
 */
- (void)updateVideoIgnoreOrientation:(BOOL)ignoreOrientation;

/**
 添加视图组件
 
 @param component 视图组件
 @param level 视图组件所处的层级
 */
- (void)addComponent:(UIView *)component atLevel:(NSUInteger)level;

/**
 * @brief 控制静音
 *
 * @param isMuted 是否静音
 */
- (void)changeVideoPlayerMutedAndUtilMuted:(BOOL)isMuted;

/**
 * @brief  设置倍速
 *
 *  @param rate 速率
*/
- (void)playbackRate:(float)rate;

/**
 * @brief  重载弹幕组件
 *
*/
- (void)reloadBarrage;

#pragma mark - prefetch

@optional

/// @brief 视频预取接口
/// @param prefetchVideos 预取视频
/// @param appID appID
/// @return YES or NO, 代表任务启动成功(不代表真正预取成功)
+ (BOOL)startPrefetch:(NSArray<NSDictionary *> *)prefetchVideos appID:(NSString *)appID;

/// @brief 视频是否已经完成预取
/// @param videoUrl 视频地址
/// @return YES or NO
+ (BOOL)isPrefetchedWithVideoUrl:(NSString *)videoUrl;

/// @brief 设置 videoUrl 对应的视频资源是否命中了预取(即已有缓存)
/// @param isHit 是否命中了缓存(预取)
/// @param videoUrl 视频 src
- (void)setPrefetchHit:(BOOL)isHit withVideoUrl:(NSString *)videoUrl;

@optional

/**
 * @brief 创建VR播放器实例,如果是VR视频,则初始化会调用此接口
 * @param delegate BBASMVideoHandleDelegate
 * @return 播放器实例(如果播放器实例类型是UIView或者UIView的子类,则需要加到ViewController上)
 */
- (UIViewController *)createVRVideoInstanceWithDelegate:(id<BBASMVideoHandleDelegate>)delegate;


@end