简介
应用场景
高级画中画是在原 基础画中画 上进行的升级,主要支持加密视频画中画、离线播放画中画、从前台无缝切换到画中画的场景,优化了实现方式和逻辑,无需长时间等待,实现真正意义的“秒切”效果。 高级画中画优势:
加密视频画中画:现有播放器的加密播放紧密结合,能够顺畅实现基于加密模板的视频画中画播放,全程无需更换播放器类型。
离线播放画中画:支持本地视频画中画播放,包含普通视频、加密视频等。
“秒切”效果:无需点击切换画中画按钮,退后台即可立马启动画中画,实现真正意义的“秒切”。
环境要求
系统版本:iOS ≥ 14.0、iPad ≥ 9.0。
硬件设备:iPhone 8及以上的设备。
SDK 版本:11.4版本及以上。
集成步骤
升级版本及配置资源
1. 升级 SDK 版本
高级画中画需要 SDK 配合使用,在使用高级画中画版本功能前需要将 SDK 的版本升级到11.3及以上的高级版本 或 11.4及以上的基础版本,否则无法使用。同时,基础画中画 版本和高级画中画版本两者可以兼容性的存在,不会存在功能性冲突。若想升级 SDK 版本,请参见 SDK 集成指引。 2. 引入 bundle 资源
因为 SDK 内需要使用 TXVodPlayer.bundle 里的资源,需在编译之前将 bundle 文件 下载 引入到项目中,切勿更改 bundle 及其内部使用的资源名称,否则会导致无缝切换画中画失败。 3. 开通播放器高级版 Licence
获取到 License 信息后,在调用 SDK 的相关接口前,通过下面的接口初始化 License,建议在 - [AppDelegate application:didFinishLaunchingWithOptions:]
中进行如下设置:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString * const licenceURL = @"<获取到的 licenseUrl>";
NSString * const licenceKey = @"<获取到的 key>";
[TXLiveBase setLicenceURL:licenceURL key:licenceKey];
NSLog(@"SDK Version = %@", [TXLiveBase getSDKVersionStr]);
}
画中画功能快速接入
1. 权限开通
画中画(PictureInPicture)在 iOS 9 就已经推出了,不过之前都只能在 iPad 上使用,iPhone 要使用画中画需更新到 iOS 14 才能使用。 目前腾讯云播放器可以支持应用内和应用外画中画能力,极大的满足用户的诉求。使用前需要开通后台模式,步骤为:XCode 选择对应的 Target > Signing & Capabilities > Background Modes,勾选 “Audio, AirPlay, and Picture in Picture”。
2. 设置配置选项
为了使用自动画中画功能,需要在设置中打开自动开启画中画按钮。具体路径为 iPhone 或 iPad上选择:设置 > 通用 > 画中画 > 自动开启画中画,选择打开即可。
3. 设置代理
为了便于监听画中画的状态,需要设置 vodDelegate,实现 TXVodPlayListener 中的画中画相关回调。可以根据回调里的各种状态和错误信息,进行相关的业务操作,例如:继续播放、暂停或退出画中画等。
- (void)onPlayer:(TXVodPlayer *)player pictureInPictureStateDidChange:(TX_VOD_PLAYER_PIP_STATE)pipState withParam:(NSDictionary *)param;
- (void)onPlayer:(TXVodPlayer *)player pictureInPictureErrorDidOccur:(TX_VOD_PLAYER_PIP_ERROR_TYPE)errorType withParam:(NSDictionary *)param;
4. 使用画中画能力代码示例
注意:
使用自动画中画功能一定要确保播放器处于播放状态,若播放器是暂停或停止状态时,无法使用自动画中画功能。
isSupportSeamlessPictureInPicture 这个接口,需要在应用程序加载高级版 License 以后才能使用。同时,此接口只能判断设备本身是否支持自动切换画中画,因系统限制,无法判断用户对于自动画中画的设置权限,需自行引导。
播放之前先设置是否允许“自动切换画中画功能”
[TXVodPlayer setPictureInPictureSeamlessEnabled:YES];
if (![TXVodPlayer isSupportPictureInPicture]) {
return;
}
[_vodPlayer enterPictureInPicture];
if ([self.vodplayer isSupportSeamlessPictureInPicture]) {
} else {
[self.vodplayer pause];
}
[_vodPlayer exitPictureInPicture];
本页内容是否解决了您的问题?