保利威文档中心

帮助中心

7 视频投屏

更新时间:2026-05-21 18:34:06

视频投屏功能用于将点播视频投放到大屏设备播放。旧点播 Android SDK 的投屏能力由 Demo 层提供,开发者可参考 Demo 中的投屏模块源码集成到自己的项目中。

7.1 适用版本与限制

  • 点播 Android SDK 自 2.15.0 起,投屏 SDK 转移到 Demo 层,开发者需要自行引入 Demo 中的投屏模块源码。
  • Demo 自 2.24.2 起,投屏功能服务替换为自研投屏服务。
  • 本文示例以非加密视频投屏为主,旧版投屏文档中的加密视频投屏能力不在本文示例范围内。
  • 开启防录屏能力后,投屏功能不可用。
  • 投屏发送端和接收端需处于可互通的网络环境,接收端需支持对应的投屏能力。

7.2 集成投屏依赖

在项目的 build.gradle 中加入投屏依赖:

// 投屏 SDK
implementation "net.polyv.android:media-cast-adapter-rx:1.0.5"

7.3 引入 Demo 投屏源码

将 Demo 中 com/easefun/polyvsdk/cast 目录下的投屏相关源码引入项目。

// com/easefun/polyvsdk/cast
├── IPLVScreencastListener.java // 投屏播放状态监听器
├── PolyvAllCast.java // 自研投屏能力封装类
├── PolyvIUIUpdateListener.java // UI 状态回调监听器
├── PolyvScreencastManager.java // 投屏功能管理类
└── widget
    ├── PolyvScreencastSearchLayout.java // 搜索投屏设备的视图
    └── PolyvScreencastStatusLayout.java // 投屏状态管理视图

其中,PolyvScreencastManager 是业务侧主要使用的投屏管理类,封装了设备搜索、投屏播放、播放控制和状态回调。

7.4 初始化投屏管理器

在播放页面中获取 PolyvScreencastManager 实例,并设置状态回调。

private PolyvScreencastManager screencastManager;

private void initScreencastManager() {
    screencastManager = PolyvScreencastManager.getInstance(this);
    screencastManager.setUIUpdateListener(new PolyvIUIUpdateListener() {
        @Override
        public void onUpdateState(int state, Object object) {
            // 根据 state 更新设备搜索、播放状态、播放进度或错误提示
        }

        @Override
        public void onUpdateText(String msg) {
            // 展示投屏提示文案或错误信息
        }
    });

    screencastManager.initService();
}

7.5 搜索投屏设备

调用 browse() 开始搜索设备。搜索结束后,可通过 getInfos() 获取当前扫描到的设备列表。

// 开始搜索设备
screencastManager.browse();

// 获取搜索到的设备列表
List<PLVMediaCastDevice> devices = screencastManager.getInfos();

搜索结果会通过 PolyvIUIUpdateListener#onUpdateState 回调返回。常用状态包括:

状态 说明
STATE_SEARCH_SUCCESS 设备搜索成功
STATE_SEARCH_ERROR 设备搜索失败
STATE_SEARCH_NO_RESULT 未搜索到可用设备

7.6 发起投屏播放

从搜索结果中选择目标设备后,调用 playNetMedia(device, resource, startSeconds) 发起投屏播放。

// device:从 getInfos() 获取的投屏设备
// mediaResource:投屏播放资源,请按 Demo 中当前视频信息构建
// startSeconds:起播位置,单位为秒
screencastManager.playNetMedia(device, mediaResource, startSeconds);

发起投屏后,可通过 getConnectInfos() 获取当前连接中的投屏设备。

PLVMediaCastDevice currentDevice = screencastManager.getConnectInfos();

7.7 播放控制

投屏播放开始后,可在发送端控制接收端播放状态。

// 暂停
screencastManager.pause();

// 恢复播放
screencastManager.resume();

// 跳转到指定进度,单位为秒
screencastManager.seekTo(progress);

// 设置音量,范围 0~100
screencastManager.setVolume(percent);

// 增加音量
screencastManager.volumeUp();

// 减少音量
screencastManager.volumeDown();

// 停止投屏播放
screencastManager.stopPlay();

7.8 监听播放状态

投屏播放状态、播放进度和异常信息会通过 PolyvIUIUpdateListener#onUpdateState 返回。常用状态包括:

状态 说明
STATE_PLAY 投屏播放中
STATE_PAUSE 投屏已暂停
STATE_STOP 投屏已停止
STATE_COMPLETION 投屏播放完成
STATE_POSITION_UPDATE 投屏播放进度更新,object 为当前进度
STATE_PLAY_ERROR 投屏播放异常,object 为错误信息
STATE_LOADING 投屏加载中

7.9 释放投屏资源

播放页面退出或不再使用投屏功能时,调用 release() 释放投屏资源。

@Override
protected void onDestroy() {
    if (screencastManager != null) {
        screencastManager.release();
    }
    super.onDestroy();
}

7.10 常见问题

开启防录屏后为什么不能投屏?

防录屏能力与投屏能力存在冲突。开启防录屏后,投屏功能不可用。

搜索不到投屏设备怎么办?

请确认发送端和接收端处于可互通的网络环境,并确认接收端支持对应投屏能力。若仍无法搜索到设备,可参考 Demo 中 PolyvScreencastSearchLayout 的设备搜索逻辑排查。

是否必须使用 Demo 的投屏 UI?

不是。Demo 提供了搜索设备视图和投屏状态视图,开发者可以直接复用,也可以根据业务 UI 自行实现。若自行实现 UI,建议保留 PolyvScreencastManager 的搜索、播放控制和状态回调逻辑。

联系客服,在线咨询