BBASMLiveAdapterProtocol.h 7.55 KB
//
//  BBASMLiveAdapterProtocol.h
//  SWAN
//
//  Created by baidu on 2018/9/12.
//  Copyright © 2018年 baidu. All rights reserved.
//

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


extern NSString *const kBBASMLivePluginInfoVideoBitrate; // 当前视频编/码器输出的比特率,单位 kbps
extern NSString *const kBBASMLivePluginInfoAudioBitrate; // 当前音频编/码器输出的比特率,单位 kbps
extern NSString *const kBBASMLivePluginInfoVideoFPS; // 当前视频帧率
extern NSString *const kBBASMLivePluginInfoVideoGOP; // 当前视频 GOP,也就是每两个关键帧(I帧)间隔时长,单位 s
extern NSString *const kBBASMLivePluginInfoNetSpeed; // 当前的发送/接收速度
extern NSString *const kBBASMLivePluginInfoNetJitter; // 网络抖动情况,抖动越大,网络越不稳定
extern NSString *const kBBASMLivePluginInfoVideoWidth; // 视频画面的宽度
extern NSString *const kBBASMLivePluginInfoVideoHeight; // 视频画面的高度
extern NSString *const kBBASMLivePluginSchemeOptionStateChange; // 播放状态变化事件,detail = {code}
extern NSString *const kBBASMLivePluginSchemeOptionNetChange; // 网络状态通知,detail = {info}

/// 画面填充方式
typedef NS_ENUM(NSInteger, BBASMLivePlayerScalingMode){
    ///不缩放
    BBASMLivePlayerScalingModeNone,
    ///在保持长宽比的前提下,缩放,使得在容器内完整显示出来(等比缩放,可能会产生黑边。)
    BBASMLivePlayerScalingModeAspectFit,
    ///在保持长宽比的前提下,缩放,使充满容器。(等比填充,可能有部分画面被裁减。)
    BBASMLivePlayerScalingModeAspectFill,
    ///缩放,使充满容器。未必保持长宽比例协调,有可能会拉伸至变形(等比填充,可能有部分画面被裁减。)
    BBASMLivePlayerScalingModeFill
};

/**
 播放器状态。
 
 - BBASMLivePlayerPlaybackStateStopped:          停止。
 - BBASMLivePlayerPlaybackStatePlaying:          播放。
 - BBASMLivePlayerPlaybackStatePaused:           暂停。
 - BBASMLivePlayerPlaybackStateInterrupted:      中断。
 - BBASMLivePlayerPlaybackStateSeekingForward:   快进。
 - BBASMLivePlayerPlaybackStateSeekingBackward:  快退。
 */
typedef NS_ENUM(NSInteger, BBASMLivePlayerPlaybackState) {
    BBASMLivePlayerPlaybackStateStopped,
    BBASMLivePlayerPlaybackStatePlaying,
    BBASMLivePlayerPlaybackStatePaused,
    BBASMLivePlayerPlaybackStateInterrupted,
    BBASMLivePlayerPlaybackStateSeekingForward,
    BBASMLivePlayerPlaybackStateSeekingBackward
};

typedef NS_ENUM(NSInteger, BBASMLivePlayerFullScreenDirection) {
    BBASMLivePlayerFullScreenDirectionPortrait = 0,      // 屏幕竖屏
    BBASMLivePlayerFullScreenDirectionLeftLandscape = 90, // 屏幕逆时针90度
    BBASMLivePlayerFullScreenDirectionRightLandscape = -90 // 屏幕顺时针90度
};

typedef void(^BBASMLivePlayerStatusCallback)(NSDictionary *response, NSString *liveId);

@protocol BBASMLiveAdapterProtocol <NSObject>

@property (nonatomic, strong) NSString                         *playURL;               // 播放url
@property (nonatomic, strong) NSString                         *liveId;                // liveid,用于上层保存id
@property (nonatomic, assign) BOOL                             isMuted;                // 是否静音
@property (nonatomic, assign) BOOL                             backgroundMute;         // 是否开启后台静音
@property (nonatomic, assign) BOOL                             needToggleFrameChasing; // 是否开启追帧
@property (nonatomic, assign) CGRect                           frame;                  // 布局

/*!
 *    @brief    播放状态回调
 *              {
 *                "sid" = code // 播放器状态码
 *              }
 *             code    说明
 *             2001    已经连接服务器
 *             2002    已经连接服务器,开始拉流
 *             2003    网络接收到首个视频数据包(IDR)
 *             2004    视频播放开始
 *             2005    视频播放进度
 *             2006    视频播放结束
 *             2007    视频播放Loading
 *             2008    解码器启动
 *             2009    视频分辨率改变
 *             -2301    网络断连,且经多次重连抢救无效,更多重试请自行重启播放
 *             -2302    获取加速拉流地址失败
 *             2101    当前视频帧解码失败
 *             2102    当前音频帧解码失败
 *             2103    网络断连, 已启动自动重连
 *             2104    网络来包不稳:可能是下行带宽不足,或由于主播端出流不均匀
 *             2105    当前视频播放出现卡顿
 *             2106    硬解启动失败,采用软解
 *             2107    当前视频帧不连续,可能丢帧
 *             2108    当前流硬解第一个I帧失败,SDK自动切软解
 *             3001    RTMP -DNS解析失败
 *             3002    RTMP服务器连接失败
 *             3003    RTMP服务器握手失败
 *             3005    RTMP 读/写失败
 */
@property (nonatomic, copy) BBASMLivePlayerStatusCallback playerStatusCallback;

/*!
 *    @brief 网络状态回调
 *           {
 *            "videoBitrate" =当前视频编/码器输出的比特率,单位 kbps
 *            "audioBitrate" = 当前音频编/码器输出的比特率,单位 kbps
 *            "videoFPS" = 当前视频帧率
 *            "videoGOP" = 当前视频 GOP,也就是每两个关键帧(I帧)间隔时长,单位 s
 *            "netSpeed" = 当前的发送/接收速度
 *            "netStatus" = 网络状态:-1为未知;0为网络不可用;
 *                          1为无线广域网连接;2为WiFi连接
 *            "videoWidth" = 视频画面的宽度
 *            "videoHeight" = 视频画面的高度
 *            }
 */
@property (nonatomic, copy)   BBASMLivePlayerStatusCallback   networkStatusCallback;
@property (nonatomic, assign) BBASMLivePlayerScalingMode      scalingMode;            // 缩放方式  
@property (nonatomic, strong) UIView                           *playerView;            // 直播视图

@property (nonatomic, assign, readonly) BBASMLivePlayerPlaybackState playbackState; //播放器状态

/**
 * 播放接口:会全新初始化playerVC
 *
 * @param playURL 播放地址
 * @param shouldAutoplay 设置是否自动播放(必须提前设置,播放后不能设置)
 * @param referer 请求referer
 * @return 播放内核的view
 */
- (UIView *)playWithPlayURL:(NSString*)playURL shouldAutoplay:(BOOL)shouldAutoplay referer:(NSString *)referer;


/**
 * 清除占位图中的播放器以外的视图 (主要是cover view)
 */
- (void)cleanOtherSubiews;


/**
 * 停止播放
 */
- (void)stop;


/**
 * 播放接口:开始上次player的播放
 */
- (void)play;


/**
 * 暂停
 */
- (void)pause;


/**
 * 设置静音:
 *
 * @param isMuted 是否静音
 */
- (void)setMuted:(BOOL)isMuted;


/**
 * 设置缩放模式
 *
 * @param scalingMode 缩放方式
 */
- (void)setScalingMode:(BBASMLivePlayerScalingMode)scalingMode;


/**
 * 设置最小缓存区
 *
 * @param minCache 最小缓存:单位s
 */
- (void)setMinCache:(NSTimeInterval)minCache;


/**
 * 设置最大缓存区
 *
 * @param maxCache 最大缓存:单位s
 */
- (void)setMaxCache:(NSTimeInterval)maxCache;


/**
 * 设置frame
 *
 * @param frame 布局
 */
- (void)setFrame:(CGRect)frame;


/**
 * 设置是否开启追帧播放
 *
 * @param needToggleFrameChasing 是否开启追帧
 */
- (void)setNeedToggleFrameChasing:(BOOL)needToggleFrameChasing;


/**
 * 设置是否隐藏
 * @param hidden 是否隐藏
 */
- (void)setPlayerViewHidden:(BOOL)hidden;




@end