投屏功能接入
更新时间:2026-02-11
接入准备
接入投屏功能,需要使用播放器SDK高级版,并申请高级版License。
功能介绍
在高级版SDK中,提供了DLNA投屏能力,可以将手机端的视频内容推送到大屏端进行播放,并且支持在手机端远程控制大屏端的媒体播放,该能力由ProjectionWrapper.har提供,使用前请确保该SDK已集成到你的项目中。
快速开始
1.引入投屏组件
Plain Text
1 import { ProjectionEngine,UPnPDeviceDiscoveryStatus, DeviceDescription,ProjectionType,PlayControlEvent } from "@baiduplayer/projectionwrapper"
2.初始化ProjectionEngine组件,传入LicenseID
Plain Text
1// 需要传入您申请的高级版证书LicenseID,ID可以在百度智能云控制台查看
2ProjectionEngine.getInstance().setLicenseID(this.appId);
3.事件监听及设备发现回调通知
Plain Text
1ProjectionEngine.getInstance().onEvent((type:ProjectionType,event:UPnPDeviceDiscoveryStatus|PlayControlEvent,info:ESObject)=>{
2 if(event == UPnPDeviceDiscoveryStatus.FoundDevice){
3 this.device = info;
4 this.context.eventHub.emit(Events.DEVICEUPNPADD,info as DeviceDescription) // 发现新设备
5 }
6})
ProjectionType:
Plain Text
1enum ProjectionType {
2 UPnPDeviceDiscoveryEvent = "UPnPDeviceDiscoveryEvent",
3 PlayControlEvent = "PlayControlEvent"
4}
- UPnPDeviceDiscoveryEvent:设备发现相关通知,具体为UPnPDeviceDiscoveryStatus
- PlayControlEvent:播放控制相关通知,具体为PlayControlEvent
UPnPDeviceDiscoveryStatus:
Plain Text
1enum UPnPDeviceDiscoveryStatus {
2 Start = "start", // 开始设备搜索
3 FoundDevice = "foundDevice", // 发现新设备
4 Error = "error", // 搜索失败
5 UDPSocketClose = "uDPSocketClose", // 连接关闭
6 Stop = "stop" // 搜索结束
7}
PlayControlEvent:
Plain Text
1enum PlayControlEvent {
2 OnSetAVTransportURI = 'onSetAVTransportURI', //设置播放url成功
3 OnPaused = 'onPaused', // 已暂停
4 OnPlay = 'onPlay', // 已播放
5 OnDuration = 'onDuration', // 播放时长返回
6 OnStoped = 'onStoped', // 已结束投屏
7 OnCurrent = 'onCurrentTime', // 当前播放时间返回,单位(s),1s返回一次。
8 OnVolume = 'onVolume', // 音量返回
9 OnMuted = 'onMuted', // 静音状态返回。
10 OnError = 'onError', // 触发错误
11 OnSeeked = 'onSeeked', // seek成功返回
12 OnCompleted = 'onCompleted' // 播放完成事件返回
13}
UPnPDeviceDiscoveryStatus为FoundDevice时,info为:DeviceDescription
Plain Text
1 interface DeviceDescription {
2 Location: string; // 设备ip
3 friendlyName?: string; // 设备名称
4 manufacturer?: string;
5 modelName?: string;
6 udn: string; // 包含设备id
7 serviceList?: ServiceInfo[]; // 设备服务类型。不需要关注。
8 deviceType?: string; // 设备类型
9}
4.搜索设备
开始搜索投屏设备,当找到设备时,会利用上面的回调进行通知
Plain Text
1await ProjectionEngine.getInstance().searchDeviceBegin();
5.选择设备并发起投屏
Plain Text
1// 选择设备,并设置播放url
2ProjectionEngine.getInstance().setAVTransportURL(device as DeviceDescription,this.iUrl);
3 // 开始播放
4ProjectionEngine.getInstance().play(device:DeviceDescription, speed:number);
-
device参数:从上述onEvent,event === UPnPDeviceDiscoveryStatus.FoundDevice对应的info信息返回,报错到相关列表中。
6.控制接收端的媒体播放
Plain Text1// 播放 2ProjectionEngine.getInstance().play(device as DeviceDescription, speed as number); 3// 暂停 4ProjectionEngine.getInstance().pause(device); 5// seek, 单位为秒 6ProjectionEngine.getInstance().seek(device, 30); 7// 停止 8ProjectionEngine.getInstance().stop(device); 9// 设置音量 10ProjectionEngine.getInstance().setVolume(device:DeviceDescription,volume:number,channel?:string); 11// 获取音量 12ProjectionEngine.getInstance().(device:DeviceDescription,channel?:string)7.停止搜索设备
Plain Text1ProjectionEngine.getInstance().searchDeviceEnd(); -
调用此方法后会收到UPnPDeviceDiscoveryStatus.stop 通知。
8.结束投屏
Plain Text1ProjectionEngine.getInstance().stop(device:DeviceDescription) - 调stop内部停止投屏,并释放渲染控制器
接口说明
ProjectionEngine类
| 接口名 | 描述 |
|---|---|
| ProjectionEngine.getInstance() | 获取投屏引擎单例 |
| setLicenseID(id) | 传入LicenseID |
| onEvent((type:ProjectionType,event:UPnPDeviceDiscoveryStatus|PlayControlEvent,info:ESObject)=>{}) | 设置设备发现/播放控制回调通知 |
| offEvent() | 取消所有事件监听 |
| await searchDeviceBegin() | 开始搜索设备,鉴权失败的情况下会抛出异常 |
| await searchDeviceEnd() | 停止搜索设备 |
| await setAVTransportURL(device:DeviceDescription, url:string) | 设置接收端播放的URL |
| await play(device:DeviceDescription, speed:number) | 开始接收端播放 |
| await pause(device:DeviceDescription) | 暂停接收端播放 |
| await stop(device:DeviceDescription) | 停止接收端播放 |
| await seek(device:DeviceDescription, realTime:number) | 控制接收端进度seek,单位为秒 |
| await setVolume(device:DeviceDescription,volume:number,channel?:string); | 设置音量 |
| await getVolume(device:DeviceDescription) | 获取音量,从onVolume事件返回 |
| getDuration(device:DeviceDescription):number | 获取媒体流时长 |
| getCurPos(device:DeviceDescription):number | 获取当前播放位置 |
| on(UPnPDeviceDiscoveryStatus|PlayControlEvent,(info)=>{}) | 可单独监听设备搜索/播放控制相关事件 |
| off(UPnPDeviceDiscoveryStatus|PlayControlEvent) | 取消单独的事件监听 |
