7 视频投屏

7.1 概述

点播投屏功能,支持使用 乐播SDK慕享SDK 将视频(加密/非加密),投至大屏设备中进行观看(大屏设备需支持安卓系统,且需下载 “乐播投屏”App 或 慕享SDK配套的“傲软投屏接收端”App)。

其中,加密视频只能通过保利威的投屏模块进行投屏,不支持其他投屏模块(如iPhone自带的AirPlay)进行投屏

目前暂时不支持AirPlay投屏。

保利威点播已封装好投屏UI、交互及功能,且代码开源。本篇目将介绍投屏模块如何使用。

注:乐播投屏自2022年5月31日起开始收费,幕享投屏自2022年11月24日开始收费

7.2 集成

7.2.1 源码引入

使用点播投屏,需将投屏模块的开源代码文件拖入工程。

开源代码在 Github iOS点播DemoGitee iOS点播Demo已包含,可下载 Demo。文件路径为/PolyvVodSDKDemo/Classes/Cast,其中PLVCastManager类在2.17.0版本之前封装的是乐播SDK,而在2.17.0版本之后封装的是慕享投屏SDK,可根据项目情况自由选择。

投屏部分UI代码(横竖屏投屏按钮),位于 PolyvVodSDKDemo/PolyvOpenSourceModule 该目录下。若本身已使用保利威点播播放器皮肤 PLVVodSkinPlayerController,则无需再次引入。若本身 UI 是自定义,未使用PLVVodSkinPlayerController,则可参照其中的投屏相关代码,自行创建横竖屏投屏按钮。

7.2.2 Pod 投屏 SDK

投屏模块依赖投屏 SDK,可以使用 Cocoapods 进行快速集成。

# 集成乐播投屏SDK
pod 'LBLelinkKit', '~> 30201'
# 或者
# 集成慕享投屏SDK
pod 'PLVDLNASender', '~>1.4.0'

7.2.3 获取 AppId、AppSecret

集成投屏模块,需具备与自家项目 BundleID 匹配的 AppId、AppSecret,请咨询 Polyv 技术支持进行获取。

7.2.4 提交AppStore审核时勾选说明

乐播LBLelinkKit投屏库,默认采集IDFA标识。

对于应用本身没有获取IDFA的情况,建议将应用提交至AppStore时按如下方式配置:(以避免被苹果以“应用不含广告功能,但获取了广告标识符IDFA”的理由而拒绝其上架。)

慕享投屏SDK,没有采集IDFA标识,无需特殊配置。

7.3 快速使用

7.3.1 填写 AppId、AppSecret

PLVCastManager.h 中填写 AppIdAppSecre

// 乐播投屏SDK APPID 和 APPSECRET 需与包名绑定,获取方式请咨询Polyv技术支持
static NSString * const LBAPPID = @""; // APP id
static NSString * const LBSECRETKEY = @""; // 密钥

// 或者
// 慕享投屏SDK APPID 和 APPSECRET 需与包名绑定,获取方式请咨询Polyv技术支持
static NSString * const DLAPPID = @"";
static NSString * const DLSECRETKEY = @"";

7.3.2 在 AppDelegate 中获取授权

// 引用投屏类
#import "PLVCastBusinessManager.h"
 
// 请求投屏权限
[PLVCastBusinessManager getCastAuthorization];

7.3.3 在播放页面初始化

// 引用投屏类
#import "PLVCastBusinessManager.h"
 
// 投屏管理器
@property (nonatomic, strong) PLVCastBusinessManager * castBM; // 投屏功能管理器
 
// 初始化
    if ([PLVCastBusinessManager authorizationInfoIsLegal]) {
        self.castBM = [[PLVCastBusinessManager alloc] initCastBusinessWithListPlaceholderView:self.view player:self.player];
       [self.castBM setup];
   }

其中,self.view 是播放页面控制器的 view,self.player 是保利威点播播放器 PLVVodPlayerViewController

7.3.4 显示投屏按钮

该小节默认用户使用保利威点播播放器皮肤 PLVVodSkinPlayerController

在该控制器中搜索 “投屏”,并解开相关的注释代码即可。

PLVVodSkinPlayerController 中没有相关投屏代码,请下载最新 iOS 保利威点播 Demo,并进行源码更新。

7.3.5 销毁投屏模块

- (void)dealloc {
   [self.castBM quitAllFuntionc];
}

7.3.6 调试

(1)安装接收端

调试过程,一般需要找个接收端,来测试投屏功能是否正常。可以在安卓手机上下载、安装乐播接收端App 或者 慕享配套的傲软投屏接收端App

(2)切换 WIFI

接收端需要和发送端在同一WIFI网络下。

(3)确认 BundleID

若需安装到自己的真机,进行真机调试。

则需联系技术支持,提供自家的 BundleID,来获得投屏所需的 APPID、SECRETKEY。并填写在PLVCastManager.h 中。

(4)选择投屏设备

打开接收端 App后,接收端 App 会显示当前接收端名字,如“乐播投屏 N1”。

则在发送端 Demo 的播放页面,弹出的设备选择列表中,选中要投屏的设备,即可测试是否能正常投屏。

(5)打印调试

PLVCastManager.m 中,搜索

// 仅乐播sdk支持
[LBLelinkKit enableLog:NO];

并改写成 YES,即可打开投屏调试打印。

7.4 其他说明

上述三小节可帮助开发者快速集成及投入使用投屏模块。

具体 API 方法的说明,在源码中已有详细的注释,参考对应头文件即可了解。

若需自定义,或修改部分逻辑、交互,可参考此小节说明。

7.4.1 文件结构

Cast
 
├── PLVCastBusinessManager.h // 投屏业务管理器,主要封装对 PLVCastManager、PLVCastControllView、PLVCastServiceListView 的使用
├── PLVCastBusinessManager.m
├── PLVCastManager.h // 投屏管理器,主要封装投屏SDK的使用。2.17.0版本以前该文件封装的是乐播SDK,2.17.0版本之后该文件封装的是慕享投屏SDK
├── PLVCastManager.m
├── PLVCastControllView.h // 投屏控制视图,投屏开始后,显示在播放器上的控制界面
├── PLVCastControllView.m
├── PLVCastServiceListView.h // 投屏设备选择列表视图,在搜索设备过程,显示设备并供以用户选择
└── PLVCastServiceListView.m

7.4.2 开启投屏 SDK 打印

若需调试投屏 SDK,可在 getCastAuthorization 方法中,调用以下方法打开打印

// 仅乐播sdk支持
[LBLelinkKit enableLog:YES];

7.4.3 防录屏开关影响

当前默认逻辑,若播放器 PLVVodPlayerViewController 启用了防录屏 videoCaptureProtect=YES ,则投屏按钮默认不显示、初始化投屏无效。若希望不受防录屏开关影响,可调整以下两处:

(1)PLVVodSkinPlayerController.m 中,搜索并移除该判断条件:

self.videoCaptureProtect == NO

(2)PLVCastBusinessManager.msetup方法,注释以下判断:

if (self.player.videoCaptureProtect) {
     NSLog(@"PLVCastBusinessManager - 警告:播放器防录屏功能已开启,保利威投屏模块将不可用");
     return;
}

7.4.4 报错 “PLVVodPlayerSkin.h not found”

若没有使用保利威点播播放器皮肤 PLVVodSkinPlayerController(没拖入 Demo 源码中的 PolyvOpenSourceModule 文件夹)。则集成投屏模块时,可能会出现此报错。此时可将涉及 PLVVodPlayerSkin 的地方注释或移除,并参考 7.4.5 进行投屏按钮的自行创建及对接。

7.4.5 自定义投屏按钮

若没有使用保利威点播播放器皮肤 PLVVodSkinPlayerController,则使用投屏模块,需要自行创建投屏按钮。按钮的创建本小节不阐述,主要说明如何对接到投屏模块。

(1)PLVCastBusinessManager.h 新增方法

- (void)castButtonTouchHandler:(UIButton *)button;

(2)PLVCastBusinessManager.m 新增方法实现

- (void)castButtonTouchHandler:(UIButton *)button{
   [self.castListV show];
    if ([PLVCastManager wifiCanUse]) {
        self.castListV.showAirPlayOption = YES;
       [self.castListV refreshBtnClickToSelected:YES];
   }else{
       [self.castListV refreshBtnClickToSelected:NO];
   }
}

(3)移除原按钮逻辑

PLVVodPlayerSkin,并注释相应的类引用、对象的使用(castButtonTouchHandler 的实现、skin 的属性调用)

(4)对接自定义投屏按钮事件

  • PLVCastBusinessManager.m 中,搜 listViewShowOrHideEvent 实现。可在 isShowelse 判断结果处,将自定义按钮的 selected 状态改为 No。(此处代表设备选择列表已隐藏,投屏按钮不应处于选中状态)

  • 自定义按钮被触发时,使用 PLVCastBusinessManager 对象调用刚创建的 castButtonTouchHandler 方法

Last updated