7.视频投屏

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();

Last updated