更新记录

1.0.2(2026-06-03)

  • 修复 Harmony 真机 ArkTS 编译失败:规避 arkts-no-structural-typing,不再把具体 options 或对象字面量结构化传给公共接口。
  • 修复 Harmony implements 类型限制:CastEvent / CastCallbacks / CastCapabilities / CastSessionState 调整为真正的 interface,避免 arkts-implements-only-iface
  • 修复 Harmony 回调适配器可选字段类型:success / fail / complete 保持 optional/undefined 语义,不再把 null 赋给 CastCallbacks 可选回调。
  • 同步发布版本口径:package.json、README、运行诊断版本、商业 readiness、结构守卫、商业守卫、readiness 报告和证据包版本统一到 1.0.2

1.0.1(2026-06-03)

  • 修复平台标记检查:兼容当前 package.json 的 uni-app / uni-app x 嵌套平台声明,同时保留 Harmony、Web/H5、小程序、快应用只提供降级入口的说明。
  • 修复 readiness 版本口径:交付状态文件和 readiness 报告脚本同步到 1.0.1,避免状态报告仍检查旧版本。
  • 修复 iOS UTS 类型导入:补充 CastCallbacks 导入,并保持 iOS 回调 helper 集中收口,已通过 iOS LSP lint。

1.0.0(2026-06-02)

  • 首发版本:lizhao-cast-screen 定位为暗黑科技风媒体投屏 UTS 插件,面向 uni-app / uni-app x 提供 Android DLNA/UPnP 与 iOS AirPlay 的跨端投屏能力。
  • Android 真实实现 DLNA/UPnP 媒体投屏:支持 SSDP 多网卡搜索、设备去重、连接、播放远程 http/https 媒体 URL、暂停、恢复、seek、音量、停止和断开。
  • iOS 真实接入系统 AirPlay 路由入口:内置面板承载 AVRoutePickerView,使用 AVPlayer 外部播放能力承接远程媒体 URL,不做私有 AirPlay 反射。
  • 内置暗黑科技风投屏面板:底部近全屏、深色基底、高对比青绿色交互、科技玻璃卡片、横向媒体胶囊和环形发光控制盘;同时支持 dark / light / auto 主题。
  • 连接设备后自动切换为投屏控制台:支持选集、上一集、下一集、清晰度、进度、时长、音量、投屏当前媒体、暂停/恢复、快退 15 秒、快进 15 秒、停止投屏和断开设备。
  • 暴露完整业务事件:支持 onCastEvent/offCastEventshowCastPanel({ useBuiltinUI:false })customAction,业务可完全自定义投屏界面。
  • 新增诊断与售后能力:getCastDiagnosticsexportCastSupportBundleinspectCastMediaSource 可输出能力矩阵、会话状态、设备列表、媒体源风险和建议动作。
  • 明确商业边界:首版只支持电视/盒子可访问的远程媒体 URL;本地文件、DRM、需登录鉴权的私有视频、屏幕镜像和录屏推流不伪造成功。
  • 降级端保持统一 API:Harmony/Web/微信小程序/支付宝小程序返回明确不支持或 supported:false,只保留业务自定义入口,不声明真实投屏成功。
  • 配套发布资料:README、错误码、权限说明、自定义基座说明、Android/iOS 验收脚本、插件市场封面和示例图已同步首发版本。
查看更多

平台兼容性

uni-app(5.07)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟

uni-app x(5.07)

Chrome Safari Android iOS 鸿蒙 微信小程序

lizhao-cast-screen

lizhao-cast-screen 是一个面向 uni-app / uni-app x 的商业级 UTS 媒体投屏插件。插件最大特色是内置暗黑科技风投屏面板:底部近全屏呈现、深浅色主题、设备扫描、选集、清晰度、进度、音量、快进快退和断开控制都在插件内部完成;业务也可以通过事件完全自定义界面。

当前版本:1.0.2

功能特色

  • Android 使用 DLNA/UPnP 实现媒体投屏:支持 SSDP 搜索、设备去重、连接、播放普通 http MP4 / https 远程媒体 URL、暂停、恢复、seek、音量、停止和断开。
  • iOS 接入系统 AirPlay 路由入口:内置底部近全屏面板承载 AVRoutePickerView,通过 AVPlayer.currentTime 同步会话进度快照,不做私有 AirPlay 反射。
  • 内置面板状态覆盖搜索中、设备列表、连接中、已连接、投屏中、已暂停、无设备、失败可重试,面板只展示真实状态,不伪造设备发现、连接或投屏成功。
  • 连接设备后自动切换为紧凑产品级控制台和暗黑科技风微光媒体控制台,提供选集、清晰度、顶部单图标主题按钮、快退 15 秒、快进 15 秒、音量加减、投屏当前媒体和原地刷新。
  • 标题右侧扫描设备入口默认可用,不再展示“使用业务自定义界面”按钮;业务自定义入口请使用 showCastPanel({ useBuiltinUI: false }) 与事件回调。
  • 支持 dark / light / auto 主题。auto 跟随系统,dark 适合影音投屏场景,light 适合浅色业务页面。
  • 提供 getCastDiagnosticsexportCastSupportBundleinspectCastMediaSource,方便线上诊断设备、媒体源和投屏状态。

支持平台

平台 是否支持 说明
App Android 支持 真实 DLNA DMR 媒体投屏,需要自定义基座;Android 9/API 28+ 已配置 cleartext 边界。
App iOS 支持 真实 AirPlay 路由入口与 AVPlayer 外部播放,需要自定义基座。
Harmony 降级 返回 supported:false,保留业务自定义入口,不伪造投屏成功。
Web/H5 降级 返回 supported:false,不伪造设备发现。
微信小程序 降级 返回 supported:false,可展示业务入口事件。
支付宝小程序 降级 返回 supported:false,可展示业务入口事件。

插件市场平台标记说明

插件市场平台标记会按 uni-app / uni-app x 跨端可安装和可调用能力展示;真实投屏能力仍按“真实投屏能力”标记和说明:App Android / App iOS 支持原生 DLNA/AirPlay,Harmony、Web/H5、小程序和快应用只提供统一 API 与降级入口。源码中保留 app-harmonywebmp-weixinmp-alipay 平台目录,是为了让业务可以获得 supported:false 能力矩阵和 useBuiltinUI:false 自定义入口,不代表这些端可以真实发现设备或投屏成功。

安装说明

  1. 将插件放入项目的 uni_modules/lizhao-cast-screen 目录。
  2. 页面中只从插件根目录导入,不要导入 utssdk 子路径。
  3. App Android / App iOS 使用真实原生能力时,需要重新制作并安装自定义基座。
  4. H5、小程序、Harmony 可以调用同名 API 获取降级能力,但不要在 UI 中声明真实投屏成功。
import * as CastScreen from '@/uni_modules/lizhao-cast-screen'

如只需要类型,也可以从根入口使用公开类型;插件内部 utssdk/api.uts 是 API 汇总实现文件,业务页面仍应从插件根目录导入。

示例代码位置

插件内部已内置完整演示页面:

uni_modules/lizhao-cast-screen/example/castScreen.vue

使用方式:

  1. uni_modules/lizhao-cast-screen/example/castScreen.vue 复制到项目页面目录,例如 pages/castScreen/castScreen.vue
  2. pages.json 中增加页面路由。
  3. App 端重新运行到自定义基座;如果本轮只复制页面、不改插件原生代码,可以直接运行页面验证 UI 与 API 调用。
{
  "pages": [
    {
      "path": "pages/castScreen/castScreen",
      "style": {
        "navigationBarTitleText": "投屏控制演示"
      }
    }
  ]
}

示例页包含:内置面板、业务自定义面板、扫描设备、连接设备、开始投屏、暂停/恢复、seek、音量、停止、诊断包和媒体源预检。它是项目中 pages/castScreen/castScreen.vue 的插件内置副本,便于用户安装插件后直接参考。

快速开始

import * as CastScreen from '@/uni_modules/lizhao-cast-screen'

CastScreen.initCast({
  debug: true,
  autoStartDiscovery: false,
  success() {
    console.log('投屏插件初始化完成')
  },
  fail(err) {
    console.log('投屏插件初始化失败', err)
  }
})

const capabilities = CastScreen.getCastCapabilities()
console.log('投屏能力', capabilities)

展示内置投屏面板

CastScreen.showCastPanel({
  title: '投屏到电视',
  subtitle: '请选择同一 Wi-Fi 下的设备',
  theme: 'auto',
  media: {
    url: 'http://media.w3.org/2010/05/sintel/trailer.mp4',
    title: 'Sintel Trailer',
    mimeType: 'video/mp4'
  },
  episodes: [
    {
      id: 'ep-1',
      title: '第 1 集 Sintel 预告',
      url: 'http://media.w3.org/2010/05/sintel/trailer.mp4',
      mimeType: 'video/mp4',
      episodeIndex: 1
    },
    {
      id: 'ep-2',
      title: '第 2 集 Big Buck Bunny',
      url: 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
      mimeType: 'video/mp4',
      episodeIndex: 2
    }
  ],
  qualities: [
    { id: 'auto', label: '自动', selected: true },
    { id: '720p', label: '720P', url: 'http://media.w3.org/2010/05/sintel/trailer.mp4', mimeType: 'video/mp4' },
    { id: '1080p', label: '1080P' }
  ],
  showThemeToggle: true,
  success() {
    console.log('内置投屏面板已展示')
  }
})

浅色主题示例:

CastScreen.showCastPanel({
  theme: 'light',
  title: '投屏到会议屏',
  subtitle: '浅色业务页面推荐使用 light 主题'
})

选集或清晰度项带 url 时,用户点击对应项会触发真实 startCast 流程;如果不带 url,插件只派发 customAction 给业务层,不会伪造投屏成功。

业务自定义界面示例

CastScreen.onCastEvent('*', (event) => {
  if (event.name == 'customAction') {
    console.log('业务自定义事件', event.payload)
  }
  if (event.name == 'deviceListChange') {
    console.log('设备列表变化', event.payload)
  }
})

CastScreen.showCastPanel({
  useBuiltinUI: false,
  title: '业务自定义入口',
  showCustomAction: true,
  customActionText: '打开业务投屏弹窗'
})

useBuiltinUI:false 在降级端也可以触发业务入口;但如果能力矩阵返回 supported:false,请在业务 UI 中提示“当前平台暂不支持真实投屏”,不要伪造设备发现或投屏成功。 iOS 真机建议业务自定义入口同时传入 showCustomAction:truecustomActionText,避免可选布尔字段在桥接默认值中与内置面板调用混淆。

API 列表

API 说明
initCast 初始化投屏运行时。
getCastCapabilities 获取平台能力矩阵。
startDiscovery 开始搜索设备。
stopDiscovery 停止搜索设备。
getDiscoveredDevices 获取当前缓存设备列表。
showCastPanel 展示内置底部近全屏面板或业务自定义入口。
hideCastPanel 隐藏内置面板。
connectDevice 连接指定投屏设备。
disconnectDevice 断开当前设备。
startCast 开始投屏媒体 URL。
pauseCast 暂停远端播放。
resumeCast 恢复远端播放。
seekCast 跳转远端播放进度。
setCastVolume 设置远端音量。
stopCast 停止远端播放。
getCastSessionState 获取会话状态。
getCastDiagnostics 获取运行诊断快照。
exportCastSupportBundle 导出售后诊断包。
inspectCastMediaSource 预检媒体源是否适合投屏。
onCastEvent 监听投屏事件。
offCastEvent 移除投屏事件监听。

完整 API 行为速查

API 支持平台 返回/回调 失败或降级说明
initCast(options) 全平台 回调 不支持平台返回 9030001。
getCastCapabilities(options?) 全平台 CastCapabilities 降级端返回 supported:false
startDiscovery(options) Android/iOS 回调 Android 搜索 DLNA DMR;iOS 进入系统路由发现态;降级端失败。
stopDiscovery(options?) 全平台 回调 降级端安全收口。
getDiscoveredDevices(options?) 全平台 Array<CastDevice> 无设备返回空数组,不伪造设备。
showCastPanel(options?) Android/iOS 回调 原生面板失败返回 9030010;useBuiltinUI:false 可走业务入口。
hideCastPanel(options?) 全平台 回调 面板不存在时安全收口。
connectDevice(options) Android/iOS 回调 设备不存在或平台不支持返回失败。
disconnectDevice(options?) Android/iOS 回调 可选 stopRemote 停止远端播放。
startCast(options) Android/iOS 回调 只支持电视可访问的远程媒体 URL。
pauseCast(options?) Android/iOS 回调 当前无会话或平台不支持返回失败。
resumeCast(options?) Android/iOS 回调 当前无会话或平台不支持返回失败。
seekCast(options) Android/iOS 回调 position 小于 0 返回参数错误。
setCastVolume(options) Android/iOS 回调 volume 范围为 0-1。
stopCast(options?) Android/iOS 回调 当前无会话时安全收口或返回控制失败。
getCastSessionState(options?) 全平台 CastSessionState 降级端返回空会话状态。
getCastDiagnostics(options?) 全平台 CastDiagnostics 不伪造 runtimeVerified
exportCastSupportBundle(options?) 全平台 CastSupportBundle 只导出运行态信息和建议动作。
inspectCastMediaSource(options) 全平台 CastMediaInspection 不联网探测,只做静态风险判断。
onCastEvent(eventName, callback) 全平台 持续监听 eventName 为字符串,推荐传入 CastEventName*
offCastEvent(eventName, callback?) 全平台 callback 为空时移除该事件名下全部监听。

事件说明

事件回调签名为 (event: CastEvent) => voideventName 为字符串。推荐传入 CastEventName 中的事件名,或传入 * 监听全部事件。

事件 说明
ready 运行时初始化完成。
discoveryStart 开始搜索设备。
discoveryStop 停止搜索设备。
deviceFound 发现单个设备。
deviceLost 设备离线或被移除。
deviceListChange 设备列表变化。
panelShow 内置面板展示或业务入口触发。
panelHide 内置面板关闭。
connectStart 开始连接设备。
connected 设备连接成功。
disconnected 设备断开。
castStart 开始投屏媒体。
stateChange 会话状态变化。
progress 播放进度变化。
volumeChange 音量变化。
customAction 内置面板选集、清晰度、主题、业务按钮等操作事件。
error 投屏错误。

initCast(options)

说明 初始化投屏运行时,可选自动启动搜索。

参数

参数 类型 必填 说明 默认值 可选参数
options InitCastOptions 初始化参数。 debug / autoStartDiscovery / discoveryTimeoutMs / success / fail / complete
options.debug boolean 是否输出精简中文调试日志。 false true / false
options.autoStartDiscovery boolean 初始化后是否自动搜索设备。 false true / false
options.discoveryTimeoutMs number 搜索超时时间,单位毫秒。 8000

startDiscovery(options)

说明 开始搜索投屏设备。Android 会搜索 DLNA DMR;模拟器、企业网络或组播受限时,可传 manualDeviceDescriptionUrl 指向已知 device.xml

参数

参数 类型 必填 说明 默认值 可选参数
options StartDiscoveryOptions 搜索参数。 timeoutMs / clearBeforeStart / manualDeviceDescriptionUrl / success / fail / complete
options.timeoutMs number 搜索超时时间,单位毫秒。 8000
options.clearBeforeStart boolean 是否清空旧设备再搜索。 true true / false
options.manualDeviceDescriptionUrl string 手动指定 DLNA DMR 设备描述地址;例如模拟器访问电脑服务时可用 dmrDeviceUrl10.0.2.2 场景。

showCastPanel(options)

说明 展示插件内置投屏面板。Android/iOS 是原生底部近全屏面板;降级端建议用 useBuiltinUI:false 触发业务自定义入口。

参数

参数 类型 必填 说明 默认值 可选参数
options CastPanelOptions 面板配置。 {}
options.useBuiltinUI boolean 是否使用插件内置 UI。 true true / false
options.theme string 内置面板主题。 Android 默认 dark,iOS 默认 auto dark / light / auto
options.title string 面板标题。 投屏到电视
options.subtitle string 面板副标题。 请选择同一 Wi-Fi 下的设备
options.media CastMediaSource 连接后控制台默认媒体,带 URL 时可直接投屏。
options.mediaTitle string 控制台媒体标题。 当前媒体标题
options.mediaSubtitle string 控制台媒体副标题。
options.currentEpisodeIndex number 当前选集下标,从 0 开始。 0
options.episodes Array 内置面板选集列表。 []
options.currentQuality string 当前清晰度 ID 或文案。
options.qualities Array 内置面板清晰度列表。 []
options.showThemeToggle boolean 是否显示顶部单图标主题按钮。 true true / false
options.showEpisodeControls boolean 是否显示选集和上一集/下一集。 true true / false
options.showQualityControls boolean 是否显示清晰度切换。 true true / false
options.showRefresh boolean 是否显示扫描设备入口。 true true / false
options.showCustomAction boolean 是否显示业务自定义入口。 false true / false
options.customActionText string 业务入口文案。 使用业务自定义界面

startCast(options)

说明 开始投屏远程媒体 URL。首版仅支持电视/盒子可访问的 http/https 媒体地址。

参数

参数 类型 必填 说明 默认值 可选参数
options StartCastOptions 开始投屏参数。 deviceId / media / autoConnect / success / fail / complete
options.deviceId string 目标设备 ID,未传时使用当前连接设备。 当前设备
options.media CastMediaSource 媒体资源。
options.autoConnect boolean 是否自动连接目标设备。 true true / false
options.media.url string 媒体 URL。 http / https
options.media.title string 媒体标题。
options.media.mimeType string MIME 类型,例如 video/mp4
options.media.startPosition number 起播位置,单位秒。 0

seekCast(options)

参数 类型 必填 说明 默认值 可选参数
options SeekCastOptions 跳转参数。 position / success / fail / complete
options.position number 目标位置,单位秒。 大于等于 0

setCastVolume(options)

参数 类型 必填 说明 默认值 可选参数
options SetCastVolumeOptions 音量参数。 volume / success / fail / complete
options.volume number 音量,范围 0-1。 0-1

getCastDiagnostics(options?)

参数 类型 必填 说明 默认值 可选参数
options GetCastDiagnosticsOptions 诊断参数。 { includeDevices:false }
options.includeDevices boolean 是否带上设备列表。 false true / false

exportCastSupportBundle(options?)

参数 类型 必填 说明 默认值 可选参数
options ExportCastSupportBundleOptions 售后诊断包参数。 { includeDevices:true, includeRecentEvents:true, maxEvents:20 }
options.includeDevices boolean 是否包含设备列表。 true true / false
options.includeRecentEvents boolean 是否包含最近事件。 true true / false
options.maxEvents number 最近事件最大数量。 20 1-80

inspectCastMediaSource(options)

参数 类型 必填 说明 默认值 可选参数
options InspectCastMediaSourceOptions 媒体源预检参数。 media / success / fail / complete
options.media CastMediaSource 待检查媒体源。

返回值说明

CastCapabilities

字段 类型 说明
supported boolean 当前平台是否支持真实投屏。
platform string 平台名称。
adapter string 适配器,例如 dlna / airplay / fallback
discovery boolean 是否支持设备搜索。
builtinPanel boolean 是否支持内置面板。
mediaCast boolean 是否支持媒体 URL 投屏。
systemRoute boolean 是否接入系统路由。
pause boolean 是否支持暂停。
resume boolean 是否支持恢复。
seek boolean 是否支持进度跳转。
volume boolean 是否支持音量控制。
requiresCustomBase boolean 是否建议自定义基座。
reason string 不支持原因。

CastSessionState

字段 类型 说明
initialized boolean 是否已初始化。
discovering boolean 是否正在搜索设备。
state CastConnectionState 当前连接/播放状态。
currentDevice CastDevice | null 当前设备。
currentMedia CastMediaSource | null 当前媒体。
devices Array 设备列表。
currentTime number 当前播放进度,单位秒。
duration number 媒体总时长,单位秒。
volume number 音量,范围 0-1。
lastError CastFail | null 最近一次错误。

会话进度快照来源:Android 优先通过 DLNA GetPositionInfo 获取 RelTime / TrackDuration;iOS 通过 AVPlayer.currentTime 与媒体时长同步。

CastMediaInspection

字段 类型 说明
castable boolean 是否适合进入首版投屏流程。
httpUrl boolean 是否为 http/https。
localFile boolean 是否疑似本地文件。
drmSuspected boolean 是否疑似 DRM 或加密流。
authSuspected boolean 是否疑似私有鉴权。
likelyVideo boolean 是否疑似视频媒体。
riskFlags Array 风险标记,例如 https-dlna-risk
suggestions Array 中文建议。
message string 中文摘要。

错误码

错误码 含义 说明
9030001 unsupported 当前平台不支持真实投屏或未打入自定义基座。
9030002 invalid params 参数不合法,例如媒体 URL 为空。
9030003 context unavailable 运行时上下文不可用。
9030004 discovery failed 搜索投屏设备失败。
9030005 device not found 未找到可用设备。
9030006 connect failed 连接设备失败。
9030007 media unsupported 媒体地址不可投屏。
9030008 cast failed 投屏播放失败。
9030009 control failed 投屏控制命令失败。
9030010 panel failed 投屏内置界面展示失败。

权限说明

Android 需要以下权限,插件已在 AndroidManifest.xml 声明:

权限 说明
android.permission.INTERNET 访问 DLNA 设备描述、SOAP 控制地址和媒体 URL。
android.permission.ACCESS_NETWORK_STATE 判断网络状态。
android.permission.ACCESS_WIFI_STATE 获取 Wi-Fi 状态。
android.permission.CHANGE_WIFI_MULTICAST_STATE 使用 Wi-Fi multicast lock,提升 SSDP 搜索稳定性。

iOS 使用 AirPlay 系统路由与 AVPlayer 外部播放能力,不做私有扫描;本地网络和 ATS 例外见下方原生配置文件说明。

原生配置文件

平台 文件 说明
Android utssdk/app-android/AndroidManifest.xml 声明网络、Wi-Fi 和组播权限,并绑定 android:networkSecurityConfig
Android utssdk/app-android/res/xml/lizhao_cast_screen_network_security_config.xml 允许局域网 DLNA/UPnP 明文 HTTP,包含 cleartextTrafficPermitted="true"
Android utssdk/app-android/assets / libs / res 资源占位目录,便于后续扩展。
iOS utssdk/app-ios/Info.plist 包含 NSAllowsLocalNetworkingNSAllowsArbitraryLoads 与 App Transport Security 本地网络例外。
iOS utssdk/app-ios/UTS.entitlements iOS 能力声明占位。
iOS utssdk/app-ios/PrivacyInfo.xcprivacy 隐私清单。
iOS utssdk/app-ios/Frameworks / Libs / Resources 资源与原生依赖占位目录。

Android 9/API 28+ 默认限制明文 HTTP,而许多 DLNA DMR 设备描述和控制地址仍是局域网 HTTP,所以插件配置了 lizhao_cast_screen_network_security_config。这只用于 DLNA/UPnP 局域网能力,不建议业务把所有公网请求都放开为 cleartext。

iOS 的 App Transport Security 只针对 AirPlay/本地网络接入做边界说明,包含 NSAllowsLocalNetworking 与局部 NSAllowsArbitraryLoads 配置,不建议在业务中无差别放开所有网络访问。

自定义基座说明

App Android / App iOS 使用真实原生投屏能力时必须重新制作自定义基座。未打自定义基座时的表现通常是:

表现 原因 处理方式
supported:false 当前端为降级实现或原生插件未进入基座。 重新制作并安装包含 lizhao-cast-screen 的自定义基座。
uts插件[lizhao-cast-screen]编译失败 基座未包含当前 UTS 插件或旧 runtime 未刷新。 重新打包基座并确认手机端外部 UTS runtime 已清理。
parameter options 或 options 为空 Android 旧代理或旧 dex 仍在运行。 重新安装最新基座,必要时清理手机端外部 UTS runtime,并确认 base.apk 中包含 UTSSDKModulesLizhaoCastScreenInitCastOptionsJSONObjectCastScreenNative
AUTO_DMR_INIT_THROW 自动演示入口初始化失败,通常与基座或运行时不一致有关。 先确认已运行最新自定义基座,再检查日志中的错误码。

如果 Android 系统通知栏的“屏幕投射”可以看到设备,但插件搜索不到设备,要先区分协议:系统入口通常是 Miracast 或系统投屏路由,插件首版搜索的是 DLNA DMR 媒体投屏设备。请确认电视/盒子开启了 DLNA 或媒体投屏接收能力。

如果投屏时出现 UPnP 716 Resource not found,说明电视端无法访问传入媒体地址。常见处理方式:

  • 使用电视可直接访问的普通 http MP4 做验证。
  • 避免登录态、Cookie、Authorization、临时签名过短或 DRM 资源。
  • 对 HTTPS 地址留意 https-dlna-risk,部分老电视不支持 HTTPS 媒体播放。
  • 手机能播放不代表电视能访问,电视端必须能直接请求该 URL。

iOS 路由事件说明

iOS 使用系统 AirPlay 路由,不做私有 AirPlay 反射,也不会在初始化且未选择路由时伪造一次断开事件。只有系统路由变化、外部播放状态变化或用户操作导致状态变化时,才会通过 stateChange / connected / disconnected / error 等事件回传。

uni-app 调用示例

<script>
import * as CastScreen from '@/uni_modules/lizhao-cast-screen'

export default {
  data() {
    return {
      devices: []
    }
  },
  onLoad() {
    CastScreen.initCast({ debug: true })
    CastScreen.onCastEvent('*', this.handleCastEvent)
  },
  onUnload() {
    CastScreen.offCastEvent('*', this.handleCastEvent)
  },
  methods: {
    handleCastEvent(event) {
      console.log('投屏事件', event)
    },
    openPanel() {
      CastScreen.showCastPanel({ theme: 'auto' })
    },
    startSearch() {
      CastScreen.startDiscovery({
        timeoutMs: 8000,
        success: () => {
          this.devices = CastScreen.getDiscoveredDevices()
        }
      })
    }
  }
}
</script>

uni-app x 调用示例

import * as CastScreen from '@/uni_modules/lizhao-cast-screen'

CastScreen.initCast({
  debug: true,
  success: () => {
    console.log('投屏运行时已初始化')
  }
})

const caps = CastScreen.getCastCapabilities(null)
if (caps.supported) {
  CastScreen.showCastPanel({
    theme: 'dark',
    title: '投屏到电视',
    subtitle: '请选择同一 Wi-Fi 下的设备'
  })
}

注意事项

  • 首版定位为“远程媒体 URL 投屏”,不是屏幕镜像、录屏推流或 DRM 破解插件;本地文件、DRM、需登录鉴权的私有视频需要先转换为电视可访问的远程媒体 URL。
  • Android 搜索不到设备时,先确认电视支持 DLNA DMR,而不只是支持 Miracast。
  • iOS 必须通过系统 AirPlay 路由选择,不绕过系统能力。
  • 降级端允许展示业务自定义入口,但不得伪造设备发现、连接或投屏成功。
  • 媒体投屏失败时,先用 inspectCastMediaSource 检查 URL,再用 exportCastSupportBundle 导出诊断信息给售后或开发排查。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android 网络访问、Wi-Fi 状态、Wi-Fi 组播权限;iOS AirPlay 系统路由能力

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

投屏设备信息、媒体 URL、播放状态、用户操作事件

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。