4.1 播放前准备
4.1.1 部署播放器
点播 SDK 中的播放器类为 PLVVodPlayerViewController
,而开源组件中提供的带有默认皮肤的播放器类 PLVVodSkinPlayerController
是 PLVVodPlayerViewController
的子类,这里以 SDK 中的基类为例。想要进行视频播放,首先,在页面上创建一个 PLVVodPlayerViewController
对象,以及放置播放器的 UIView
对象。代码示例如下:
Copy #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:
Copy 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如下:
Copy /// 请求自定义keyToken。
/// 播放加密视频时,若设置此block将优先使用block获取的值来解密视频;没有设置此block则sdk自动处理解密;
/// 请在调用setVideo:方法前设置此block
/// sdk在处理播放加密视频、切换清晰度、切换线路、播放错误内部重试机制 过程的时候,将会通过此block向外界获取keyToken
@ property (nonatomic , copy) NSString * ( ^ requestCustomKeyTokenBlock)( NSString * vid);
在初始化播放器后,设置requestCustomKeyTokenBlock;后续每当SDK需要keytoken的时候,将会通过执行该block进行获取,示例如下:
Copy - ( 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
对象之前进行。
Copy // video 模型 @property (nonatomic, strong) PLVVodVideo *video;
直接设置 video 属性时,会使用后台设置的“默认清晰度”。播放视频的示例代码如下:
Copy self.player.video = video; // video 为 PLVVodVideo 对象
[self.player play ]; // 开始播放
[self.player pause ]; // 暂停播放
其中,self.player
为 4.1 代码示例提到的播放器 PLVVodPlayerViewController
。
4.2.1 设置清晰度
若希望设置自定义的清晰度,则需使用 -setVideo:quality:
方法。通过只读属性 quality
可获得当前视频的播放清晰度。
Copy // 清晰度
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
属性获取可用的清晰度。
Copy /**
切换码率,若码率不符合则自动切换到附近的清晰度
@param quality 清晰度
*/
- ( void )switchQuality:(PLVVodQuality)quality;
4.2.2 切换线路
切换线路指切换视频所访问的 CDN 服务商,保利威为加密的点播的视频提供了多种线路切换,设置该属性即可完成线路的切换。线路来源可从 PLVVodVideo
对象的 availableRouteLines
选取。
Copy // 路由线路,仅对加密视频有效,传入 POVVodVideo 对象中 availableRouteLines 数组的元素
@ property (nonatomic , copy) NSString * routeLine;
4.2.3 设置播放速度
播放器支持倍速播放,正常播放速度为 1.0。开发者可以通过修改该值改变播放器的播放速度,也可以通过该值获取播放器当前的播放速度。
Copy // 播放速度
@ property (nonatomic , assign) double playbackRate;
4.2.4 设置播放音量
播放器的播放音量通过属性 playbackVolume
设置。该音量区别于系统音量,值为 0~系统当前音量。开发者可以通过该值获取播放器当前的播放音量。
Copy // 播放音量
@ property (nonatomic , assign) double playbackVolume;
4.2.5 播放进度跳转
播放器通过设置 currentPlaybackTime
属性来进行 seek 操作。同样,开发者可以通过该值获取当前播放时间。
Copy // 当前播放时间
@ property (nonatomic , assign) NSTimeInterval currentPlaybackTime;
通过对 currentPlaybackTime
与 duration
(媒体时长)进行计算,可得出当前的播放进度。
4.2.6 全屏与半屏切换
全屏分为竖向全屏和横向全屏,用户可调用播放器提供的方法 -setPlayerFullScreen:
设置播放器是否全屏。枚举值属性 fullScreenOrientation
用于设置全屏的方向,可根据视频宽高比自动选择横竖屏,也可固定一个方向,默认为根据视频宽高比自动选择横/竖屏。
Copy typedef NS_ENUM ( NSInteger , PLVVodFullScreenOrientation) {
// 根据视频宽高比自动判断,当宽高比 >=1 时,横向全屏;当宽高比 <1 时,竖向全屏
PLVVodFullScreenOrientationAuto = 0 ,
// 竖向全屏
PLVVodFullScreenOrientationPortrait ,
// 横向全屏
PLVVodFullScreenOrientationLandscape ,
};
// 设置全屏方向
@ property (nonatomic , assign) PLVVodFullScreenOrientation fullScreenOrientation;
// 设置播放器是否处于全屏模式
- ( void )setPlayerFullScreen:( BOOL )full;
以下只读属性 fullscreen
可用于获取播放器当前的全屏状态,以及对应的全屏状态变更回调。
Copy // 当前是否全屏
@ property (nonatomic , assign , readonly) BOOL fullscreen;
// 全屏状态变化回调
@ property (nonatomic , copy) void ( ^ didFullScreenSwitch)( BOOL fullScreen);
以上方法的使用示例可参考 PLVVodPlayerSkin
。建议直接使用我们提供的带播放器皮肤 PLVVodPlayerSkin
的播放器 PLVVodSkinPlayerController
去集成。
4.2.7 设置视频画面拉伸模式
视频画面拉伸模式与 UIView
的 contentMode
定义类似,可参照其定义。
Copy // 拉伸模式
typedef NS_ENUM ( NSInteger , PLVVodMovieScalingMode) {
PLVVodMovieScalingModeNone ,
PLVVodMovieScalingModeAspectFit ,
PLVVodMovieScalingModeAspectFill ,
PLVVodMovieScalingModeFill
};
// 拉伸模式
@ property (nonatomic , assign) PLVVodMovieScalingMode scalingMode;
4.3 播放状态
4.3.1 用户播放/停留时间
只读属性 viewerWatchDuration
为 App 使用者播放当前视频的时间,该时长仅当用户播放中的时候才会统计,暂停时停留的时间并不会计算。
只读属性 viewerStayDuration
为 App 使用者打开播放器,在该视频停留的时间。
注意,切换视频时上面两个属性值都归零。
Copy // 用户播放时间
@ property (nonatomic , assign , readonly) NSTimeInterval viewerWatchDuration;
// 用户停留时间
@ property (nonatomic , assign , readonly) NSTimeInterval viewerStayDuration;
4.3.2 媒体时长与缓冲进度
通过只读属性 duration
可获取当前视频的媒体时长,只读属性 playableDuration
为已缓存(可播放)视频时长。将 playableDuration
除以 duration
可得出当前缓存进度。
Copy // 媒体时长
@ property (nonatomic , assign , readonly) NSTimeInterval duration;
// 可播放时长
@ property (nonatomic , assign , readonly) NSTimeInterval playableDuration;
4.3.3 获取当前时刻截图
播放器可通过 -snapshot
方法获得当前时刻的视频截图。方法声明如下:
Copy // 当前时刻的视频截图
- (UIImage * )snapshot;
4.3.4 手势类型与回调
播放器支持识别多种手势,并把识别的手势类型与响应事件回调开放出来。开发者可根据实际需求实现手势事件。具体使用方式,可参考 PLVVodSkinPlayerController
。若不希望某些视图响应播放器的手势,可设置 doNotReceiveGestureViews
数组,添加忽略手势事件响应的视图。
Copy // 手势识别类型
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。
Copy // 是否屏蔽长按倍速快进手势,默认为 NO
@ property (nonatomic , assign) BOOL disableLongPressGesture;
// 长按快进时的倍速,默认为 2.0
@ property (nonatomic , assign) double longPressPlaybackRate;
4.3.5 播放状态与回调
以下所列的只读属性可用于获取播放器当前的播放状态,包括视频是否就绪可以播放、当前播放状态、当前视频加载状态、播放是否结束。每一个属性值都有各自的变更回调,开发者可实现不同播放状态的变更回调。
Copy // 是否就绪播放
@ 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);
播放状态、播放模式、加载状态这三个枚举值的定义如下:
Copy // 播放状态
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 其他回调
为了简化开发者的工作,播放器还提供了以下几个回调。
Copy // 是否正在载入回调
@ 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
协议,创建皮肤,并设置到 PLVVodPlayerViewController
的 playerControl
属性。自定义皮肤的具体设置可参考 demo 中的 PLVVodPlayerSkin
类。
4.4.1 对播放器的弱引用
播放器皮肤对播放器有弱引用,皮肤可通过该弱引用获取播放器的属性,以及方法调用。譬如获取播放器的播放模式、当前播放时长、获取播放器当前播放截图等。
Copy // 播放控制
@ property (nonatomic , strong) IBOutlet id <PLVVodPlayerSkinProtocol> playerControl;
4.4.2 根据播放属性设置皮肤
PLVVodPlayerSkinProtocol
协议还规定了播放器皮肤必须包含以下属性,播放器皮肤可根据这些属性、属性改变回调来设置皮肤、改变皮肤样式。
Copy // 清晰度个数
@ 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
方法,达到设置播放器状态栏的目的。
Copy // 指导页面隐藏导航栏
@ property (nonatomic , assign) BOOL shouldHideNavigationBar;
// 指导页面状态栏隐藏
@ property (nonatomic , assign) BOOL shouldHideStatusBar;
// 指导页面状态栏样式
@ property (nonatomic , assign) UIStatusBarStyle statusBarStyle;
4.4.4 设置播放器控件
播放器皮肤还必须包含以下控件:
Copy // 播放/暂停按钮
@ 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 日志发送,该日志为用户播放信息。除了播放器记录的维度,开发者还可自定义部分参数。具体参数含义与用法,还需联系保利威技术支持获得帮助。
Copy /// 其他 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
属性判断当前播放的到底是在线视频还是离线视频。
Copy // 本地视频优先播放,默认 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”。如下图所示:
其次,播放器中有一个设置是否开启后台播放功能的属性,属性值默认为 YES,属性声明如下:
Copy // 是否允许后台播放,默认 YES
@ property (nonatomic , assign) BOOL enableBackgroundPlayback;
4.5.4 开启|关闭循环播放
如果希望打开循环播放,可以将播放器的 enablePlayRecycle
属性设为 YES,默认为 NO。注意,该功能不支持 hls 视频。
Copy // 是否需要循环播放, 默认 NO
@ property (nonatomic , assign) BOOL enablePlayRecycle;
4.5.5 开启|关闭播放片头
开启"播放片头"后,将根据播放器逻辑应用点播后台设置的视频、图片片头,播放完片头后会自动播放正片。注意,此时不会应用自动播放(autoplay)的设置。
播放片头设置默认为 NO。开发者可根据播放器的 teaserState
属性获取片头的播放状态。
Copy // 资源状态
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
为只读属性。
Copy // 是否开启广告,默认 NO
@ property (nonatomic , assign) BOOL enableAd;
// 广告播放器
@ property (nonatomic , strong , readonly) PLVVodAdPlayerViewController * adPlayer;
4.5.7 开启|关闭记忆播放位置
记忆播放位置,顾名思义启用后会记录该视频上一次最后的播放位置。这里的“上一次”指上一次销毁播放器或切换视频的时机。仅当该属性为 YES 时,才会记录并更新上一次播放位置。
注意,视频播放完成后,会清除该视频记录的播放位置。
Copy // 是否开启记忆播放位置,默认 NO
@ property (nonatomic , assign) BOOL rememberLastPosition;
4.5.8 设置跑马灯
使用跑马灯功能需要 CocoaPods 引入 PLVMarquee 项目,并创建 PLVMarquee
跑马灯模型对象,并传入播放器的属性 marquee
中。
Copy // 跑马灯
@ property (nonatomic , strong) PLVMarquee * marquee;
PLVMarquee
具体接口参照其头文件代码注释。使用示例:
Copy PLVMarquee * marquee = [[PLVMarquee alloc ] init ];
marquee.type = PLVMarqueeTypeRollFade;
marquee.maxFadeInterval = 5 ;
player.marquee = marquee;
注意,跑马灯功能目前并无与点播后台跑马灯接口接入,因此所有数据都是本地数据。
4.5.9 开启|关闭防录屏功能
开启防录屏功能后,一旦捕捉到录屏行为,会立即停止播放,并出现提示“停止录屏或投屏操作才能继续播放视频”的弹窗。防录屏功能默认关闭。
Copy // 防录屏功能,默认 NO(关闭)
@ property (nonatomic , assign) BOOL videoCaptureProtect;
注意,播放过程中不能关闭防录屏功能。
4.5.10 开启|关闭自动播放
开启该属性,则视频载入后会立即播放。否则,需要开发者调用 -play
方法,播放器才会播放视频。
Copy // 自动播放,默认 YES
@ property (nonatomic , assign) BOOL autoplay;
4.5.11 设置开始播放时间
开发者设置了开始播放时间 startPlaybackTime
后,播放器开始播放时会跳转到该时间。播放器中的“记忆播放位置”功能也是通过设置该属性来实现。
Copy // 开始播放时间
@ property (nonatomic , assign) NSTimeInterval startPlaybackTime;