保利威文档中心

幫助中心

3-视频播放

更新時間:2024-06-04 17:16:31

1.播放器

播放器的對外核心介面為 PLVMediaPlayerCore,該介面對外的實作類別為 PLVVodMediaPlayer,差異如下:

  • PLVMediaPlayerCore:播放器核心類別,提供純播放器的完整功能,但不包含其他保利威的業務能力
  • PLVVodMediaPlayer:是 PLVMediaPlayerCore 的子類別,實現了畫中畫、記憶播放、廣告等具有保利威業務能力

注意:2.1.x 版本以下播放器對外核心介面為 PLVPlayerCore,請以實際版本情況呼叫。

以下內容將提供 PLVVodMediaPlayer 的介紹,

2.初始化

首先,在頁面上建立一個 PLVVodMediaPlayer 物件。程式碼範例如下:

#import <PolyvMediaPlayerSDK/PolyvMediaPlayerSDK.h>

@interface UIViewController ()
@property (nonatomic, strong) PLVVodMediaPlayer *player;
@end

@implementation UIViewController()<
PLVMediaPlayerCoreDelegate,
PLVVodMediaPlayerDelegate
>

- (void)viewDidLoad {
  [super viewDidLoad];

  PLVVodMediaPlayer *player = [[PLVVodMediaPlayer alloc] init];
  [player setupDisplaySuperview:self.view];
  self.player = player;
}

@end

另外,您也可以透過以下方式初始化並設定 URL,預設會自動開始播放設定的 URL:

/// 播放器初始化
- (instancetype)initWithContentURL:(NSURL *)contentURL;

3.設定資料來源

透過呼叫介面 setVideo: 設定資料來源

- (void)setVideo:(PLVVodMediaVideo *)video 

在呼叫該介面後,預設會自動開始播放,您也可以透過播放參數設定來控制不自動起播

另外,您也可以透過以下方式播放對應的 URL:

/// 设置URL 播放
- (void)setPlayerURL:(NSURL *)playerURL;

4.播放參數設定

提供了各種屬性控制播放模式:

/// 播放模式 视频模式、音频模式
@property (nonatomic, assign) PLVVodMediaPlaybackMode playbackMode;

/// 路由线路,仅对加密视频有效,传入 POVVodVideo 对象中 availableRouteLines 数组的元素
@property (nonatomic, copy) NSString *routeLine;

/// 是否开启记忆播放位置,默认 NO, 开启后从前一播放位置续播
@property (nonatomic, assign) BOOL rememberLastPosition;

/// seek 播放定位类型设置。0 默认,1 精确模式
@property (nonatomic, assign) PLVVodMediaPlaySeekType seekType;

/// 音频播放 seek定位类型设置。0 默认,1 快速模式
@property (nonatomic, assign) PLVVodMediaPlayAudioSeekType audioSeekType;

/// 是否播放片头,默认 NO
@property (nonatomic, assign) BOOL enableTeaser;

PLVMediaPlayerCore 父類別中提供了一些常用的播放參數,例如自動播放:

@property (nonatomic, assign) BOOL autoPlay;

5.播放控制

播放器提供了一系列的播放控制介面,例如:

/// 暂停 主播放器 播放
- (void)pause;

/// 静音 主播放器
- (void)mute;

/// 取消静音 主播放器
- (void)cancelMute;

/// 开始 主播放器 播放
- (void)play;

/// 切换清晰度
- (void)setPlayQuality:(PLVVodQuality )quality;

/// seek 播放控制, 跳到具体时间点开始播放
- (void)seekToTime:(NSTimeInterval)toTime;

更多控制操作可以參考 SDK 的 PLVVodMediaPlayer 以及它的父類別 PLVMediaPlayerCore

6.回呼

使用 PLVVodMediaPlayer 播放器需要設定以下兩種代理:

  • PLVVodMediaPlayerDelegate:點播播放器特有回呼代理
  • PLVMediaPlayerCoreDelegate:基礎播放器回呼
- (PLVVodMediaPlayer *)player{
    if (!_player){
        _player = [[PLVVodMediaPlayer alloc] init];
        _player.coreDelegate = self;
        _player.delegateVodMediaPlayer = self;
        _player.autoPlay = YES;
        _player.rememberLastPosition = YES;
        _player.enablePIPInBackground = YES;
    }
    return _player;
}

以下為回呼提供的能力,可透過代理方法實現對應的產品邏輯:

@protocol PLVMediaPlayerCoreDelegate <NSObject>

@optional
/// 播放器加载前,回调options配置对象
///
/// @note 播放器在加载前,将触发此回调,并附带 PLVOptions,有自定义配置需求时,可对此对象进行参数设置。
///       当集成的是 PLVIJKPlayer 时,请按 PLVIJKFFOptions 来处理 options;
///       当集成的是 IJKMediaFramework 时,请按 IJKFFOptions 来处理 options;
///
/// @param player 播放器对象
/// @param options 播放配置对象
- (PLVOptions *)plvMediaPlayerCore:(PLVMediaPlayerCore *)player playerWillLoadWithOptions:(PLVOptions *)options;

/// 播放器 已准备好播放
///
/// @param player 播放器对象
- (void)plvMediaPlayerCore:(PLVMediaPlayerCore *)player playerIsPreparedToPlay:(BOOL)prepared;

/// 播放器 ’加载状态‘ 发生改变
///
/// @param player 播放器对象
/// @param loadState 播放器加载状态
- (void)plvMediaPlayerCore:(PLVMediaPlayerCore *)player playerLoadStateDidChange:(PLVPlayerLoadState)loadState;

/// 播放器 ’播放状态‘ 发生改变
///
/// @param player 播放器对象
/// @param playbackState 播放器播放状态
- (void)plvMediaPlayerCore:(PLVMediaPlayerCore *)player playerPlaybackStateDidChange:(PLVPlaybackState)playbackState;

/// 播放器 播放结束
///
/// @param player 播放器对象
/// @param finishReson 播放结束原因
- (void)plvMediaPlayerCore:(PLVMediaPlayerCore *)player playerPlaybackDidFinish:(PLVPlayerFinishReason)finishReson;

/// 播放器 已销毁
///
/// @param player 播放器对象
/// @param destroy 播放器销毁
- (void)plvMediaPlayerCore:(PLVMediaPlayerCore *)player playerDidDestroyed:(BOOL)destroy;

/// 主播放器 ‘SEI信息’ 发生改变
///
/// @param player 播放器对象
/// @param timeStamp 附带的时间戳信息
- (void)plvMediaPlayerCore:(PLVMediaPlayerCore *)player playerSeiDidChanged:(long)timeStamp;

/// 首帧渲染回调
- (void)plvMediaPlayerCore:(PLVMediaPlayerCore *)player firstFrameRendered:(BOOL)rendered;


@end



@protocol PLVVodMediaPlayerDelegate <NSObject>

@optional
/// 点播播放器 发生错误
///
/// @param vodMediaPlayer 点播播放器
/// @param error 错误信息对象 (可能为nil;error.code 可详见 PLVFPlayErrorCodeGenerator.h)
- (void)plvVodMediaPlayer:(PLVVodMediaPlayer *)vodMediaPlayer loadMainPlayerFailureWithError:(NSError * _Nullable)error;

/// 点播播放器 定时返回当前播放进度
///
/// @param vodMediaPlayer 点播播放器
/// @param playedProgress 已播放进度 (0.0 ~ 1.0)
/// @param playedTimeString 当前播放时间点字符串 (示例 "01:23")
/// @param durationTimeString 总时长字符串 (示例 "01:23")
- (void)plvVodMediaPlayer:(PLVVodMediaPlayer *)vodMediaPlayer
               playedProgress:(CGFloat)playedProgress
             playedTimeString:(NSString *)playedTimeString
           durationTimeString:(NSString *)durationTimeString;


/// 画中画状态回调
/// @param vodMediaPlayer  点播播放器
/// @param pipState 画中画状态
- (void)plvVodMediaPlayer:(PLVVodMediaPlayer *)vodMediaPlayer pictureInPictureChangeState:(PLVPictureInPictureState )pipState;

/// 画中画开启失败
/// @param vodMediaPlayer  点播播放器
/// @param error 错误信息
- (void)plvVodMediaPlayer:(PLVVodMediaPlayer *)vodMediaPlayer startPictureInPictureWithError:(NSError *)error;

/// 当前网络状态不佳 回调状态
/// @param poorState 网络不佳指示状态
- (void)plvVodMediaPlayer:(PLVVodMediaPlayer *)vodMediaPlayer poorNetworkState:(BOOL)poorState;

7.銷毀

播放結束後不再使用播放器時,應銷毀播放器:

[self.player clearPlayer];
联系客服,在线咨询