7 影片投放
影片投放功能用於將點播影片投放至大螢幕裝置播放。舊版點播 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 的搜尋、播放控制與狀態回呼邏輯。
