4 视频播放

4.1 播放前准备

4.1.1 部署播放器

点播 SDK 中的播放器类为 PLVVodPlayerViewController,而开源组件中提供的带有默认皮肤的播放器类 PLVVodSkinPlayerControllerPLVVodPlayerViewController 的子类,这里以 SDK 中的基类为例。想要进行视频播放,首先,在页面上创建一个 PLVVodPlayerViewController 对象,以及放置播放器的 UIView 对象。代码示例如下:

#import “PLVVodPlayerViewController.h”

@interface UIViewController ()
@property (nonatomic, strong) PLVVodPlayerViewController *player;
@property (nonatomic, weak) UIView *playerPlaceholder;
@end

@implementation UIViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  PLVVodPlayerViewController *player = [[PLVVodPlayerViewController alloc] init];
  [player addPlayerOnPlaceholderView:self.playerPlaceholder rootViewController:self];
  self.player = player;
}

@end

播放器 player 可自动在 playerPlaceholder 中实现自动布局,以及半屏/全屏的切换。

4.1.2 外部传入播放凭证

自iOS点播2.17.0版本开始,支持通过外部传入播放凭证的方式进行加密视频的播放,以避免非法盗版者利用漏洞创建无身份信息的播放凭证。

  • Token是用于解密播放保利威平台加密视频的,本地传入Token将更好地提升视频安全性。

  • 客户在使用此功能的时候,务必要保证传入的Token在自家api传输中的安全性,如接口加密。

播放加密视频实践全流程可参考 播放加密视频最佳实践

首先,您需要集成iOS点播SDK在2.17.0以上版本

修改podfile文件,引入点播sdk:

source 'https://github.com/CocoaPods/Specs.git'
source 'https://gitee.com/polyv_ef/plvspecs.git'

project 'PolyvVodSDKDemo.xcodeproj'
platform :ios, '8.0'
inhibit_all_warnings!

target 'PolyvVodSDKDemo' do
    # ......
    # PLVVodSDK
    pod 'PolyvVodSDK', '~>2.17.0'
end

其次,使用本地传入Token的API,在点播头文件PLVVodPlayerViewController.h中查看api如下:

/// 请求自定义keyToken。
/// 播放加密视频时,若设置此block将优先使用block获取的值来解密视频;没有设置此block则sdk自动处理解密;
/// 请在调用setVideo:方法前设置此block
/// sdk在处理播放加密视频、切换清晰度、切换线路、播放错误内部重试机制 过程的时候,将会通过此block向外界获取keyToken
@property (nonatomic, copy) NSString *(^requestCustomKeyTokenBlock)(NSString *vid);

在初始化播放器后,设置requestCustomKeyTokenBlock;后续每当SDK需要keytoken的时候,将会通过执行该block进行获取,示例如下:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    PLVVodSkinPlayerController *player = [[PLVVodSkinPlayerController alloc] initWithNibName:nil bundle:nil];
    [player addPlayerOnPlaceholderView:self.playerPlaceholder rootViewController:self];
    self.player = player;
    
    // 当需要使用自定义keytoken的时候解开以下注释,每当sdk需要使用keytoken的时候,将会通过此block来向开发者获取
    [self.player setRequestCustomKeyTokenBlock:^NSString *(NSString *vid) {
        __block NSString *token = nil;
        dispatch_semaphore_t signal = dispatch_semaphore_create(0);
        // 调用自定义接口获取凭证Token,服务端接口定义可参考本文档最下方注意事项
        [[[NSURLSession sharedSession] dataTaskWithRequest:request
                                         completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            if (!error) {
                token = @"解析返回数据中的token字段";
                dispatch_semaphore_signal(signal);
            } else { 
                dispatch_semaphore_signal(signal);
            }
        }] resume];
        dispatch_semaphore_wait(signal, DISPATCH_TIME_FOREVER);
        return token;
    }];
}

4.2 视频播放

点播 SDK 将视频数据封装类 PLVVodVideo 中,通过 PLVVodVideo 对象将视频数据传递给播放器。PLVVodVideo 包含视频ID、视频标题、视频时长等数据。

注意,为播放器设置 video 属性后,会马上应用播放器的属性值,因此播放器的属性配置应在赋值 PLVVodVideo 对象之前进行。

// video 模型 @property (nonatomic, strong) PLVVodVideo *video;

直接设置 video 属性时,会使用后台设置的“默认清晰度”。播放视频的示例代码如下:

self.player.video = video; // video 为 PLVVodVideo 对象 
[self.player play]; // 开始播放 
[self.player pause]; // 暂停播放

其中,self.player 为 4.1 代码示例提到的播放器 PLVVodPlayerViewController

4.2.1 设置清晰度

若希望设置自定义的清晰度,则需使用 -setVideo:quality: 方法。通过只读属性 quality 可获得当前视频的播放清晰度。

// 清晰度
typedef NS_ENUM(NSInteger, PLVVodQuality) {
PLVVodQualityAuto, // 自动
PLVVodQualityStandard = 1, // 流畅
PLVVodQualityHigh, // 高清
PLVVodQualityUltra // 超清
};

// 当前清晰度
@property (nonatomic, assign, readonly) PLVVodQuality quality;

/**
指定/切换 PLVVodVideo 对象,及其清晰度
@param video PLVVodVideo 对象
@param quality 清晰度
*/
- (void)setVideo:(PLVVodVideo *)video quality:(PLVVodQuality)quality;

播放过程中也支持切换来自点播后台所提供的清晰度。切换清晰度,只需调用 -switchQuality: 方法。若需要知道视频支持哪些清晰度,可读取 PLVVodVideo 对象的 qualityCount 属性获取可用的清晰度。

/**
切换码率,若码率不符合则自动切换到附近的清晰度
@param quality 清晰度
*/
- (void)switchQuality:(PLVVodQuality)quality;

4.2.2 切换线路

切换线路指切换视频所访问的 CDN 服务商,保利威为加密的点播的视频提供了多种线路切换,设置该属性即可完成线路的切换。线路来源可从 PLVVodVideo 对象的 availableRouteLines 选取。

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

4.2.3 设置播放速度

播放器支持倍速播放,正常播放速度为 1.0。开发者可以通过修改该值改变播放器的播放速度,也可以通过该值获取播放器当前的播放速度。

// 播放速度 
@property (nonatomic, assign) double playbackRate;

4.2.4 设置播放音量

播放器的播放音量通过属性 playbackVolume 设置。该音量区别于系统音量,值为 0~系统当前音量。开发者可以通过该值获取播放器当前的播放音量。

// 播放音量 
@property (nonatomic, assign) double playbackVolume;

4.2.5 播放进度跳转

播放器通过设置 currentPlaybackTime 属性来进行 seek 操作。同样,开发者可以通过该值获取当前播放时间。

// 当前播放时间 
@property (nonatomic, assign) NSTimeInterval currentPlaybackTime;

通过对 currentPlaybackTimeduration (媒体时长)进行计算,可得出当前的播放进度。

4.2.6 全屏与半屏切换

全屏分为竖向全屏和横向全屏,用户可调用播放器提供的方法 -setPlayerFullScreen: 设置播放器是否全屏。枚举值属性 fullScreenOrientation 用于设置全屏的方向,可根据视频宽高比自动选择横竖屏,也可固定一个方向,默认为根据视频宽高比自动选择横/竖屏。

typedef NS_ENUM(NSInteger, PLVVodFullScreenOrientation) {
    // 根据视频宽高比自动判断,当宽高比 >=1 时,横向全屏;当宽高比 <1 时,竖向全屏
    PLVVodFullScreenOrientationAuto = 0, 
    // 竖向全屏
    PLVVodFullScreenOrientationPortrait, 
    // 横向全屏
    PLVVodFullScreenOrientationLandscape, 
};

// 设置全屏方向
@property (nonatomic, assign) PLVVodFullScreenOrientation fullScreenOrientation;

// 设置播放器是否处于全屏模式
- (void)setPlayerFullScreen:(BOOL)full;

以下只读属性 fullscreen 可用于获取播放器当前的全屏状态,以及对应的全屏状态变更回调。

// 当前是否全屏 
@property (nonatomic, assign, readonly) BOOL fullscreen;  
// 全屏状态变化回调
@property (nonatomic, copy) void (^didFullScreenSwitch)(BOOL fullScreen);

以上方法的使用示例可参考 PLVVodPlayerSkin。建议直接使用我们提供的带播放器皮肤 PLVVodPlayerSkin 的播放器 PLVVodSkinPlayerController 去集成。

4.2.7 设置视频画面拉伸模式

视频画面拉伸模式与 UIViewcontentMode 定义类似,可参照其定义。

// 拉伸模式 
typedef NS_ENUM(NSInteger, PLVVodMovieScalingMode) { 	
  PLVVodMovieScalingModeNone, 	
  PLVVodMovieScalingModeAspectFit, 	
  PLVVodMovieScalingModeAspectFill, 	
  PLVVodMovieScalingModeFill 
};   

// 拉伸模式 
@property (nonatomic, assign) PLVVodMovieScalingMode scalingMode;

4.3 播放状态

4.3.1 用户播放/停留时间

只读属性 viewerWatchDuration 为 App 使用者播放当前视频的时间,该时长仅当用户播放中的时候才会统计,暂停时停留的时间并不会计算。

只读属性 viewerStayDuration 为 App 使用者打开播放器,在该视频停留的时间。

注意,切换视频时上面两个属性值都归零。

// 用户播放时间 
@property (nonatomic, assign, readonly) NSTimeInterval viewerWatchDuration;   

// 用户停留时间 
@property (nonatomic, assign, readonly) NSTimeInterval viewerStayDuration;

4.3.2 媒体时长与缓冲进度

通过只读属性 duration 可获取当前视频的媒体时长,只读属性 playableDuration 为已缓存(可播放)视频时长。将 playableDuration 除以 duration 可得出当前缓存进度。

// 媒体时长 
@property (nonatomic, assign, readonly) NSTimeInterval duration;  

// 可播放时长 
@property (nonatomic, assign, readonly) NSTimeInterval playableDuration;

4.3.3 获取当前时刻截图

播放器可通过 -snapshot 方法获得当前时刻的视频截图。方法声明如下:

// 当前时刻的视频截图 
- (UIImage *)snapshot;

4.3.4 手势类型与回调

播放器支持识别多种手势,并把识别的手势类型与响应事件回调开放出来。开发者可根据实际需求实现手势事件。具体使用方式,可参考 PLVVodSkinPlayerController。若不希望某些视图响应播放器的手势,可设置 doNotReceiveGestureViews 数组,添加忽略手势事件响应的视图。

// 手势识别类型
typedef NS_ENUM(NSInteger, PLVVodGestureType) {
    PLVVodGestureTypeUnknown,      // 未知
    PLVVodGestureTypeTap,          // 点击
    PLVVodGestureTypeDoubleTap,    // 双击
    PLVVodGestureTypeLeftPan,      // 左滑
    PLVVodGestureTypeRightPan,     // 右滑
    PLVVodGestureTypeLeftSideUpPan,   // 左侧上滑
    PLVVodGestureTypeLeftSideDownPan, // 左侧下滑
    PLVVodGestureTypeRightSideUpPan,  // 右侧上滑
    PLVVodGestureTypeRightSideDownPan,// 右侧下滑
    PLVVodGestureTypeLongPress, 	 // 长按
    PLVVodGestureTypeLongPressEnd  // 长按取消
};
 
// 识别手势类型
@property (nonatomic, assign, readonly) PLVVodGestureType gestureType;
 
// 手势识别回调
@property (nonatomic, copy) void (^gestureCallback)(PLVVodPlayerViewController *player, UIGestureRecognizer *recognizer, PLVVodGestureType gestureType);
 
// 手势识别时忽略的视图
@property (nonatomic, strong) NSArray *doNotReceiveGestureViews;

播放器 PLVVodSkinPlayerController 实现了以上所有手势的响应事件:

  • 单击:显示播放器皮肤

  • 双击:播放或暂停

  • 左滑/右滑:拖动播放进度

  • 左侧上滑/下滑:调节亮度

  • 右侧上滑/下滑:调节音量

  • 长按/取消:快进/取消快进

如果想屏蔽长按手势,可将属性 disableLongPressGesture 设置为 YES,长按时快进的倍速可通过属性 longPressPlaybackRate 修改,默认为 2.0。

// 是否屏蔽长按倍速快进手势,默认为 NO
@property (nonatomic, assign) BOOL disableLongPressGesture;

// 长按快进时的倍速,默认为 2.0
@property (nonatomic, assign) double longPressPlaybackRate;

4.3.5 播放状态与回调

以下所列的只读属性可用于获取播放器当前的播放状态,包括视频是否就绪可以播放、当前播放状态、当前视频加载状态、播放是否结束。每一个属性值都有各自的变更回调,开发者可实现不同播放状态的变更回调。

// 是否就绪播放
@property (nonatomic, assign, readonly) BOOL preparedToPlay;
// 就绪播放回调
@property (nonatomic, copy) void (^preparedToPlayHandler)(PLVVodPlayerViewController *player);
 
// 当前播放状态
@property (nonatomic, assign, readonly) PLVVodPlaybackState playbackState;
// 播放状态回调
@property (nonatomic, copy) void (^playbackStateHandler)(PLVVodPlayerViewController *player);
 
// 播放模式
@property (nonatomic, assign) PLVVodPlaybackMode playbackMode;
// 播放模式回调
@property (nonatomic, copy) void (^playbackModeHandler)(PLVVodPlayerViewController *player);
 
// 加载状态
@property (nonatomic, assign, readonly) PLVVodLoadState loadState;
// 加载状态回调
@property (nonatomic, copy) void (^loadStateHandler)(PLVVodPlayerViewController *player);
 
// 是否播放结束
@property (nonatomic, assign, readonly) BOOL reachEnd;
// 是否成功播放结束
@property (nonatomic, readonly) BOOL reachEndSuccess;
// 播放结束回调
@property (nonatomic, copy) void (^reachEndHandler)(PLVVodPlayerViewController *player);
// 播放异常结束,手动恢复播放回调。播放异常结束后,该 block 每 5s 回调一次,在该 block 中可实现恢复播放逻辑
@property (nonatomic, copy) void (^playbackRecoveryHandle)(PLVVodPlayerViewController *player);

播放状态、播放模式、加载状态这三个枚举值的定义如下:

// 播放状态
typedef NS_ENUM(NSInteger, PLVVodPlaybackState) {
    PLVVodPlaybackStateStopped,
    PLVVodPlaybackStatePlaying,
    PLVVodPlaybackStatePaused,
    PLVVodPlaybackStateInterrupted,
    PLVVodPlaybackStateSeekingForward,
    PLVVodPlaybackStateSeekingBackward
};
 
// 加载状态
typedef NS_OPTIONS(NSUInteger, PLVVodLoadState) {
    PLVVodLoadStateUnknown        = 0,
    PLVVodLoadStatePlayable       = 1 << 0,
    PLVVodLoadStatePlaythroughOK  = 1 << 1, // Playback will be automatically started in this state when shouldAutoplay is YES
    PLVVodLoadStateStalled        = 1 << 2, // Playback will be automatically paused in this state, if started
};
 
// 播放模式
typedef NS_ENUM(NSInteger, PLVVodPlaybackMode) {
    PLVVodPlaybackModeDefault,
    PLVVodPlaybackModeVideo,
    PLVVodPlaybackModeAudio
};

4.3.6 其他回调

为了简化开发者的工作,播放器还提供了以下几个回调。

// 是否正在载入回调
@property (nonatomic, copy) void (^loadingHandler)(BOOL isLoading);
 
// 播放器错误回调
@property (nonatomic, copy) void (^playerErrorHandler)(PLVVodPlayerViewController *player, NSError *error);

回调 loadingHandler 的回调参数 isLoading 表示播放器当时是否在载入中,开发者可直接在该回调中,进行 UI 的变更。

playerErrorHandler 回调了播放器在播放过程中所有错误,并以标准的 NSError 回调错误信息。开发者可以在该回调中做错误处理和错误信息的展示。

注意,若是按照 PLVVodPlayerSkinProtocol 实现皮肤或使用带有默认皮肤设置的播放器 PLVVodSkinPlayerController,则不需要实现这两个回调,其实现已在播放器内部实现。

4.4 自定义皮肤

PLVVodPlayerViewController 是播放器基类,不带任何播放控件,用户需要带皮肤控件的播放器,可直接使用 PLVVodSkinPlayerController。若需要自定义皮肤,可实现 PLVVodPlayerSkinProtocol 协议,创建皮肤,并设置到 PLVVodPlayerViewControllerplayerControl 属性。自定义皮肤的具体设置可参考 demo 中的 PLVVodPlayerSkin 类。

4.4.1 对播放器的弱引用

播放器皮肤对播放器有弱引用,皮肤可通过该弱引用获取播放器的属性,以及方法调用。譬如获取播放器的播放模式、当前播放时长、获取播放器当前播放截图等。

// 播放控制
@property (nonatomic, strong) IBOutlet id<PLVVodPlayerSkinProtocol> playerControl;

4.4.2 根据播放属性设置皮肤

PLVVodPlayerSkinProtocol 协议还规定了播放器皮肤必须包含以下属性,播放器皮肤可根据这些属性、属性改变回调来设置皮肤、改变皮肤样式。

// 清晰度个数
@property (nonatomic, assign) int qualityCount;
// 当前清晰度
@property (nonatomic, assign) PLVVodQuality quality;
// 清晰度修改回调
@property (nonatomic, copy) void (^qualityDidChangeBlock)(PLVVodQuality quality);
 
// 当前是否播放本地视频
@property (nonatomic, assign) BOOL localPlayback;
 
// 当前播放速率
@property (nonatomic, assign) double playbackRate;
// 播放速率改变回调
@property (nonatomic, copy) void (^selectedPlaybackRateDidChangeBlock)(double playbackRate);
 
// 当前视频拉伸方式
@property (nonatomic, assign) NSInteger scalingMode;
// 视频拉伸方式改变回调
@property (nonatomic, copy) void (^scalingModeDidChangeBlock)(NSInteger scalingMode);
 
// 字幕名称
@property (nonatomic, strong) NSArray<NSString *> *subtitleKeys;
// 选中的字幕名称
@property (nonatomic, copy) NSString *selectedSubtitleKey;
// 字幕改变回调
@property (nonatomic, copy) void (^selectedSubtitleKeyDidChangeBlock)(NSString *selectedSubtitleKey);

4.4.3 自定义导航栏/状态栏

实现属性 shouldHideNavigationBar,播放器会根据其值隐藏或显示播放器所在控制器的导航栏。实现属性 shouldHideStatusBar,播放器所在页面可根据该值实现 -prefersStatusBarHidden-preferredStatusBarStyle 方法,达到设置播放器状态栏的目的。

// 指导页面隐藏导航栏
@property (nonatomic, assign) BOOL shouldHideNavigationBar;
 
// 指导页面状态栏隐藏
@property (nonatomic, assign) BOOL shouldHideStatusBar;
 
// 指导页面状态栏样式
@property (nonatomic, assign) UIStatusBarStyle statusBarStyle;

4.4.4 设置播放器控件

播放器皮肤还必须包含以下控件:

// 播放/暂停按钮
@property (nonatomic, weak) IBOutlet UIButton *playPauseButton;
 
// 时间标签
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
 
// 缓冲进度
@property (weak, nonatomic) IBOutlet UIProgressView *bufferProgressView;
 
// 播放进度滑杆
@property (weak, nonatomic) IBOutlet UISlider *playbackSlider;
 
// 全屏/半屏按钮
@property (nonatomic, weak) IBOutlet UIButton *fullShrinkscreenButton;
 
// 亮度滑杆
@property (nonatomic, weak) IBOutlet UISlider *brightnessSlider;
 
// 音量滑杆
@property (nonatomic, weak) IBOutlet UISlider *volumeSlider;

4.5 播放器配置

在使用播放器播放视频之前,我们需要先对播放器的属性进行配置。

4.5.1 设置自定义 viewlog 参数

播放器在播放过程中,会按照其管理的心跳机制进行 viewlog 日志发送,该日志为用户播放信息。除了播放器记录的维度,开发者还可自定义部分参数。具体参数含义与用法,还需联系保利威技术支持获得帮助。

/// 其他 viewlog 参数,param1~param5 和 key1~key3 参数值需要 UrlSafeBase64 编码
@property (nonatomic, strong) NSDictionary<NSString *, id> *viewlogExtraParams

4.5.2 开启|关闭本地视频优先播放

PLVVodLocalVideo 是继承于 PLVVodVideo 的子类,表示本地的视频数据模型。PLVVodVideo 对象下载之后,也可以转化为 PLVVodLocalVideo 对象,即在线视频转为离线视频。播放器支持传入 PLVVodVideo 对象,也支持 PLVVodLocalVideo 对象。

当把一个 PLVVodVideo 对象传入播放器时,如果该视频已下载,播放器会根据属性 localPrior 的值来决定是否播放本地视频。

当该属性为 YES,播放器会自动检索对应的 PLVVodVideo 对象的离线视频,存在则播放离线视频,不存在则播放在线视频;当该属性为 NO,则根据传入 video 属性的对象播放视频,若传入 PLVVodVideo 对象则播放在线视频,若传入 PLVVodLocalVideo 对象则播本地离线视频,找不到资源则播放失败。

开发者可以根据播放器的 localPlayback 属性判断当前播放的到底是在线视频还是离线视频。

// 本地视频优先播放,默认 YES
@property (nonatomic, assign) BOOL localPrior;
 
// 是否为本地播放
@property (nonatomic, assign) BOOL localPlayback;

4.5.3 开启|关闭后台播放

后台播放指允许 App 返回到桌面或锁屏后,播放器依然能够播放音频。要实现后台播放,首先,需在 App 所在项目 “Capability” 中开启 “Background Modes” 中的 “Audio, AirPlay, and Picture in Picture”。如下图所示:

视频播放_图1

其次,播放器中有一个设置是否开启后台播放功能的属性,属性值默认为 YES,属性声明如下:

// 是否允许后台播放,默认 YES 
@property (nonatomic, assign) BOOL enableBackgroundPlayback;

4.5.4 开启|关闭循环播放

如果希望打开循环播放,可以将播放器的 enablePlayRecycle 属性设为 YES,默认为 NO。注意,该功能不支持 hls 视频。

// 是否需要循环播放, 默认 NO 
@property (nonatomic, assign) BOOL enablePlayRecycle;

4.5.5 开启|关闭播放片头

开启"播放片头"后,将根据播放器逻辑应用点播后台设置的视频、图片片头,播放完片头后会自动播放正片。注意,此时不会应用自动播放(autoplay)的设置。

播放片头设置默认为 NO。开发者可根据播放器的 teaserState 属性获取片头的播放状态。

// 资源状态
typedef NS_ENUM(NSInteger, PLVVodAssetState) {
    PLVVodAssetStateUnknown = 0, // 未知
    PLVVodAssetStateLoading, // 加载中
    PLVVodAssetStatePlaying, // 播放中
    PLVVodAssetStateFinished // 播放结束
};
// 是否播放片头,默认 NO
@property (nonatomic, assign) BOOL enableTeaser;
 
// 片头播放状态
@property (nonatomic, assign, readonly) PLVVodAssetState teaserState;

4.5.6 开启|关闭广告

开启广告后,将根据播放逻辑应用点播后台设置的视频、图片广告。在片头播放之前播放片头广告,暂停播放暂停广告,播放结束播放片尾广告。

注意,广告播放完成后,自动播放片头,若没有片头,或关闭了片头,则自动播放正片。此时不会应用自动播放(autoplay)的设置。

开启广告属性为 enableAd,默认为 NO。广告播放器 adPlayer 为只读属性。

// 是否开启广告,默认 NO
@property (nonatomic, assign) BOOL enableAd;
 
// 广告播放器
@property (nonatomic, strong, readonly) PLVVodAdPlayerViewController *adPlayer;

4.5.7 开启|关闭记忆播放位置

记忆播放位置,顾名思义启用后会记录该视频上一次最后的播放位置。这里的“上一次”指上一次销毁播放器或切换视频的时机。仅当该属性为 YES 时,才会记录并更新上一次播放位置。

注意,视频播放完成后,会清除该视频记录的播放位置。

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

4.5.8 设置跑马灯

使用跑马灯功能需要 CocoaPods 引入 PLVMarquee 项目,并创建 PLVMarquee 跑马灯模型对象,并传入播放器的属性 marquee 中。

// 跑马灯 
@property (nonatomic, strong) PLVMarquee *marquee;

PLVMarquee 具体接口参照其头文件代码注释。使用示例:

PLVMarquee *marquee = [[PLVMarquee alloc] init];
marquee.type = PLVMarqueeTypeRollFade;
marquee.maxFadeInterval = 5;
player.marquee = marquee;

注意,跑马灯功能目前并无与点播后台跑马灯接口接入,因此所有数据都是本地数据。

4.5.9 开启|关闭防录屏功能

开启防录屏功能后,一旦捕捉到录屏行为,会立即停止播放,并出现提示“停止录屏或投屏操作才能继续播放视频”的弹窗。防录屏功能默认关闭。

// 防录屏功能,默认 NO(关闭)
@property (nonatomic, assign) BOOL videoCaptureProtect;

注意,播放过程中不能关闭防录屏功能。

4.5.10 开启|关闭自动播放

开启该属性,则视频载入后会立即播放。否则,需要开发者调用 -play 方法,播放器才会播放视频。

// 自动播放,默认 YES 
@property (nonatomic, assign) BOOL autoplay;

4.5.11 设置开始播放时间

开发者设置了开始播放时间 startPlaybackTime 后,播放器开始播放时会跳转到该时间。播放器中的“记忆播放位置”功能也是通过设置该属性来实现。

// 开始播放时间 
@property (nonatomic, assign) NSTimeInterval startPlaybackTime;

Last updated