2.17.0及以后
2.17.0 版本开始,投屏功能改为使用幕享投屏实现,整体代码结构与使用方式与 2.16.6 版本相近,Demo 层投屏目录结构如下所示
//com/easefun/polyvsdk/cast
├── PolyvAllCast.java // 幕享投屏二次封装类
├── PolyvIUIUpdateListener.java // 封装的投屏状态回调监听器
├── PolyvScreencastManager.java // 投屏封装工具类,操作投屏功能使用
└── widget
├── PolyvScreencastSearchLayout.java // 搜索投屏Layout
└── PolyvScreencastStatusLayout.java // 投屏状态管理Layout
幕享投屏 SDK 依赖包放置在 demo 项目 app 模块的 libs 目录下面,SDK 的依赖引入声明如下
// 投屏sdk
implementation files("libs/wx-commonlib-1.0.1.aar")
implementation files("libs/wx-dlnasdk-1.0.1.aar")
implementation files("libs/wx-dlnasender-1.0.1.aar")
implementation files("libs/wx-jettylib-1.0.1.aar")
1.初始化
public void initScreencast() {
// TODO appId和appSecret需与包名绑定,获取方式请咨询Polyv技术支持
PolyvScreencastManager.init(this, <appId>, <appSecret>, new WxDlnaSenderInitCallback() {
@Override
public void onSuccess() {
PolyvCommonLog.i(TAG, "initScreencast success");
// 初始化单例
PolyvScreencastManager.getInstance(PolyvApplication.this);
}
@Override
public void onFail(int code, String msg) {
PolyvCommonLog.i(TAG, "initScreencast fail, code = " + code + ", msg = " + msg);
}
});
}
上述方法的用例在PolyvApplication
类的initScreencast()
方法中使用到。
2. 监听器
监听器可以监听搜索设备的状态,连接的设备的状态,接收端的播放器状态,播放进度等。
// 设置搜索设备状态、接收端播放器状态监听器
screencastManager.setUIUpdateListener(iUIUpdateListener);
// 设置连接设备状态监听器
screencastManager.setActivityConnectListener(iConnectListener);
3. 搜索设备相关方法
// 开始搜索
screencastManager.browse();
搜索设备的成功、失败等状态可以在screencastManager.setUIUpdateListener(iUIUpdateListener)
的onUpdateState
回调中获取。
4. 获取搜索的设备信息
搜索设备成功后,可以调用以下的方法获取设备信息:
// 获取搜索的设备信息
screencastManager.getInfos();
5. 连接设备相关方法
搜索设备成功后,可以调用以下的方法连接设备:
// 连接设备
screencastManager.connect(info);
// 获取当前已连接的设备
screencastManager.getConnectInfos();
连接设备的成功、失败等状态可以在screencastManager.setActivityConnectListener(iConnectListener)
的onConnect
回调中获取。
6. 断开连接的设备
使用以下的方法断开当前连接的设备:
screencastManager.stopPlay();
screencastManager.disConnect(selectInfo);
连接其他的设备之前,需要先断开当前连接的设备。
7. 投放视频的方法
连接设备成功后,就可以进行视频投放,视频投放的方法如下:
// 投放非加密视频
screencastManager.playNetMedia(playerInfo);
// 投放加密视频
PolyvScreencastHelper.getInstance().transformPlayObject(mediaInfo, video, bitrate, playPath, new PolyvScreencastHelper.PolyvCastTransformCallback() {
@Override
public void onSucceed(Object object, String newPlayPath) {
play((MediaInfo) object, newPlayPath, bitrate, videoPosition);
}
@Override
public void onFailed(Throwable e) {
}
});
public void play(MediaInfo playerInfo, String playPath, int bitrate, int seconds) {
playerInfo.setMediaId(Base64.encodeToString(playPath.getBytes(), Base64.NO_WRAP));
playerInfo.setUri(playPath);
playerInfo.setMediaType(MediaInfo.TYPE_VIDEO);
screencastManager.playNetMedia(playerInfo);
}
加密视频的播放,需要通过PolyvScreencastHelper.getInstance().transformPlayObject
将一系列参数进行转换得到新的playerInfo
和播放链接newPlayPath
, 把他们使用在投屏播放的相关接口即可支持加密视频播放, 上面仅是其中示例,更多可参考幕享投屏 SDK。
视频的播放状态、播放进度可以在screencastManager.setUIUpdateListener(iUIUpdateListener)
的onUpdateState
回调中获取。
8. 播放控制方法
视频开始播放后,可以在投屏发送端对接收端进行播放控制,播放控制有以下的方法:
// 暂停
screencastManager.pause();
// 恢复
screencastManager.resume();
// 快进/退
screencastManager.seekTo(progress);
// 音量调节
screencastManager.volumeUp();
screencastManager.volumeDown();
2.15.0(含)- 2.16.6
点播 SDK 自 2.15.0 起,投屏 sdk 正式转移到 Demo 层。开发者可自行参考Demo,集成乐播投屏SDK,实现投屏功能。此外关于加密视频的投屏播放,需要使用接口转换,详细见下方关于《2.15.0(含)- 2.16.6# 7.播放视频的方法》的集成描述。
关于旧版的点播投屏仍旧可以使用,但投屏sdk不再维护更新。
//不再维护,点播2.15.0起 sdk 功能实现已经转移到Demo层
implementation 'com.easefun.polyv:polyvScreencast:0.3.1'
注意事项:请勿同时使用点播 SDK 2.15.0+ 和旧版投屏SDK,否则会有冲突
2.15.0中Demo集成乐播投屏4.00.13,为兼容Android 10,需将投屏SDK所在service设置为前台服务,故乐播投屏在4.0+开始要求开发者设置compileSdkVersion 29
,一般情况要求targetSdkVersion
总是小于或等于compileSdkVersion
如果是旧版投屏 SDK 升级的,可以移除投屏依赖,直接复制 Demo 层代码和 lib 中的投屏 aar。PolyvScreencastManager 等同于旧版的 PolyvScreencastHelper,可以参考使用,投屏播放url请参考本小节中《7.播放视频的方法》,查看变更内容。
新集成的开发者可以忽略,直接移植相关Demo代码,或者自行集成乐播SDK,进行投屏播放。播放加密视频需要参考本小节中《7.播放视频的方法》。
Demo层投屏目录结构如下所示
//com/easefun/polyvsdk/cast
├── PolyvAllCast.java //乐播投屏二次封装类
├── PolyvIUIUpdateListener.java // 封装的投屏状态回调监听器
├── PolyvScreencastManager.java //投屏封装工具类,操作投屏功能使用。等同于旧版的PolyvScreencastHelper
└── widget
├── PolyvScreencastSearchLayout.java //搜索投屏Layout
└── PolyvScreencastStatusLayout.java //投屏状态管理Layout
1.初始化
//appId和appSecret需与包名绑定,获取方式请到乐播官网注册获取
PolyvScreencastManager.init(<AppId>, <AppSecret>);
//初始化单例
PolyvScreencastManager.getInstance(this);
上述方法的用例在PolyvApplication
类的initScreencast()
方法中使用到。
2. 监听器
监听器可以监听搜索设备的状态,连接的设备的状态,接收端的播放器状态,播放进度等。
//设置搜索设备状态、接收端播放器状态监听器
screencastManager.setUIUpdateListener(iUIUpdateListener);
//设置连接设备状态监听器
screencastManager.setActivityConenctListener(iConnectListener);
3. 搜索设备相关方法
//开始搜索
screencastManager.browse();
//停止搜索
screencastManager.stopBrowse();
搜索设备的成功、失败等状态可以在screencastManager.setUIUpdateListener(iUIUpdateListener)
的onUpdateState
回调中获取。
4. 获取搜索的设备信息
搜索设备成功后,可以调用以下的方法获取设备信息:
//获取搜索的设备信息
screencastManager.getInfos();
5. 连接设备相关方法
搜索设备成功后,可以调用以下的方法连接设备:
//连接设备
screencastManager.connect(info);
//获取当前已连接的设备
screencastManager.getConnectInfos();
连接设备的成功、失败等状态可以在screencastManager.setActivityConenctListener(iConnectListener)
的onConnect
回调中获取。
6. 断开连接的设备
使用以下的方法断开当前连接的设备:
screencastManager.stopPlay();
screencastManager.disConnect(selectInfo);
连接其他的设备之前,需要先断开当前连接的设备。
7. 投放视频的方法
连接设备成功后,就可以进行视频投放,视频投放的方法如下:
//投放非加密视频
screencastManager.playNetMedia(playPath, PolyvAllCast.MEDIA_TYPE_VIDEO, "");
screencastManager.playNetMediaWithPosition(playPath, PolyvAllCast.MEDIA_TYPE_VIDEO, seconds);
...
//投放加密视频
PolyvScreencastHelper.getInstance().transformPlayObject(lelinkPlayerInfo, video, bitrate, playPath, new PolyvScreencastHelper.PolyvCastTransformCallback() {
@Override
public void onSucceed(Object object, String newPlayPath) {
screencastManager.playNetMedia((LelinkPlayerInfo) object, playPath, PolyvAllCast.MEDIA_TYPE_VIDEO, "", seconds);
}
@Override
public void onFailed(Throwable e) {
}
});
目前连接设备成功后,需要延迟3秒才能进行视频投放,否则投放加密视频可能会失败。
加密视频的播放,需要通过PolyvScreencastHelper.getInstance().transformPlayObject
将一系列参数进行转换得到新的lelinkPlayerInfo
和播放链接newPlayPath
,把他们使用在投屏播放的相关接口即可支持加密视频播放,上面仅是其中示例,更多可参考乐播投屏SDK。注意这里进行转换的是点播SDK里面的PolyvScreencastHelper
,请勿同时集成旧版投屏SDK。
视频的播放状态、播放进度可以在screencastManager.setUIUpdateListener(iUIUpdateListener)
的onUpdateState
回调中获取。
8. 播放控制方法
视频开始播放后,可以在投屏发送端对接收端进行播放控制,播放控制有以下的方法:
//暂停
screencastManager.pause();
//恢复
screencastManager.resume();
//快进/退
screencastManager.seekTo(progress);
//音量调节
screencastManager.voulumeUp();
screencastManager.voulumeDown();
2.15.0以前
1. 初始化
//appId和appSecret需与包名绑定,获取方式请到乐播官网注册获取
PolyvScreencastHelper.init(<appKey>, <appSecret>);
//初始化单例
PolyvScreencastHelper.getInstance(this);
上述方法的用例在PolyvApplication
类的initScreencast()
方法中使用到。
2. 监听器
监听器可以监听搜索设备的状态,连接的设备的状态,接收端的播放器状态,播放进度等。
//设置搜索设备状态、接收端播放器状态监听器
screencastHelper.setUIUpdateListener(iUIUpdateListener);
//设置连接设备状态监听器
screencastHelper.setActivityConenctListener(iConnectListener);
3. 搜索设备相关方法
//开始搜索
screencastHelper.browse(type);
//停止搜索
screencastHelper.stopBrowse();
搜索设备的成功、失败等状态可以在screencastHelper.setUIUpdateListener(iUIUpdateListener)
的onUpdateState
回调中获取。
4. 获取搜索的设备信息
搜索设备成功后,可以调用以下的方法获取设备信息:
//获取搜索的设备信息
screencastHelper.getInfos();
5. 连接设备相关方法
搜索设备成功后,可以调用以下的方法连接设备:
//连接设备
screencastHelper.connect(info);
//获取当前已连接的设备
screencastHelper.getConnectInfos();
连接设备的成功、失败等状态可以在screencastHelper.setActivityConenctListener(iConnectListener)
的onConnect
回调中获取。
6. 断开连接的设备
使用以下的方法断开当前连接的设备:
screencastHelper.stop();
screencastHelper.disConnect(selectInfo);
连接其他的设备之前,需要先断开当前连接的设备。
7. 投放视频的方法
连接设备成功后,就可以进行视频投放,视频投放的方法如下:
//投放非加密视频
screencastHelper.playNetMedia(playPath, PolyvAllCast.MEDIA_TYPE_VIDEO, "");
//投放加密视频
screencastHelper.playNetMedia(playPath, videoVO.getVid(), bitrate, videoVO.getSeedConst(), PolyvAllCast.MEDIA_TYPE_VIDEO, "");
目前连接设备成功后,需要延迟3秒才能进行视频投放,否则投放加密视频可能会失败。
视频的播放状态、播放进度可以在screencastHelper.setUIUpdateListener(iUIUpdateListener)
的onUpdateState
回调中获取。
8. 播放控制方法
视频开始播放后,可以在投屏发送端对接收端进行播放控制,播放控制有以下的方法:
//暂停
screencastHelper.pause();
//恢复
screencastHelper.resume();
//快进/退
screencastHelper.seekTo(progress);
//音量调节
screencastHelper.voulumeUp();
screencastHelper.voulumeDown();