本页目录

IpcPlayer

版本要求:
@ray-js/ray≥0.6.9

描述

实时视频播放组件。基于异层渲染的原生组件,请注意原生组件使用限制。

属性

属性类型必填默认值说明最低版本
deviceIdstring是""设备 id,组件的唯一标识符,必须设置-
autoplayboolean否false自动播放-
mutedboolean否-是否静音-
clarity"ss" | "normal" | "hd" | "ud" | "ssp" | "auto" | "audio"否normal清晰度:ss 省流量、normal 标清、hd 高清、ud 超清、ssp 超超清、auto 自动、audio 音频模式-
soundMode"speaker" | "ear"否speaker声音输出方式:speaker 扬声器、ear 听筒-
orientation"vertical" | "horizontal"否vertical画面方向:vertical 竖直、horizontal 水平-
objectFit"contain" | "fillCrop"否contain填充模式:contain 长边填满,fillCrop 铺满裁剪-
autoPauseIfNavigateboolean否true跳转本小程序其他页面时是否自动暂停实时音视频-
autoPauseIfOpenNativeboolean否true跳转 App 其他原生页面时是否自动暂停实时音视频-
rotateZnumber否0摄像头旋转角度,0~360-
scalableboolean否true当前是否可缩放-
scaleMultiplenumber否0缩放比例,仅在 scalable 为 true 时生效-
ptzControllableboolean否true是否开启视频区域云平台控制-
borderWidthnumber | string否0边框宽度,单位 px-
borderStyle"solid" | "dashed"否solid边框样式:solid、dashed-
borderColorstring否#ffffff边框颜色,十六进制-
borderRadiusnumber | string否0边框圆角,单位 px-
backgroundColorstring否#ffffff背景颜色,十六进制-
否-额外属性配置@ray-js/ray 1.7.79
否-当连接状态发生变化时触发,请使用 onConnectChange-
否-当预览状态发生变化时触发,请使用 onPreviewChange-
否-当设备在线状态变化时触发,请使用 onOnlineChange-
否-初始化完成时触发,请使用 onInitDone-
否-视频缩放比例变化时触发,请使用 onZoomChange-
否-点击视频时触发,请使用 onVideoTap-
否-当连接状态发生变化时触发,state 为 0 表示连接成功-
否-当预览状态发生变化时触发,state 为 1 表示开始预览成功,0 表示结束预览成功-
否-当 IPC 设备在线状态变化时触发-
否-初始化完成时触发-
否-视频缩放比例及当前倍数变化时触发-
否-点击视频时触发-
否-状态异常时触发-
否-断开连接(⚠️ Android 端未下发,断开连接通过 onConnectChange state < 0 体现)-
否-预览失败(P2P sessionStatus < 0 时触发,普通预览与多目共用)IPCKit 6.1.4
否-弱网通知IPCKit 6.1.4
否-异层组件创建成功时触发IPCKit 6.2.3
否-选中视频索引时触发IPCKit 7.3.3
否-布局状态改变时触发IPCKit 7.3.3
否-定位器定位时触发IPCKit 7.3.3
否-滑动播放器手势上报、需要转动云台时触发IPCKit 7.3.3
updateLayoutunknown否-用来异层组件通知容器层样式更新-

引用对象

interfaceIpcPlayerSessionDidDisconnectedEvent
export interface IpcPlayerSessionDidDisconnectedEvent extends BaseEvent {
  /** 事件类型 */
  type: 'sessionDidDisconnected';
}
interfaceIpcPlayerCreateViewSuccessEvent
export interface IpcPlayerCreateViewSuccessEvent extends BaseEvent {
  /** 事件类型 */
  type: 'createViewSuccess';
}
interfaceBaseEvent
属性类型必填描述
typestring是事件类型
timeStampnumber是页面打开到触发事件所经过的毫秒数
是触发事件的源组件
是当前组件的一些属性值集合
markany否事件标记数据
interfaceTarget
属性类型必填描述
idstring是事件源组件的id
是事件源组件上的 `dataset` 自定义属性组成的集合

合法值

clarity
值说明最低版本
ss省流量画质-
normal标清画质-
hd高清画质-
ud超清画质-
ssp超超清画质-
auto自动选择清晰度-
audio音频模式-
soundMode
值说明最低版本
speaker使用扬声器输出声音-
ear使用听筒输出声音-
orientation
值说明最低版本
vertical竖直方向-
horizontal水平方向-
objectFit
值说明最低版本
contain保持宽高比,按长边适配以完整显示画面-
fillCrop保持宽高比并铺满容器,超出部分裁剪-
borderStyle
值说明最低版本
solid实线边框-
dashed虚线边框-

示例代码

基础用法

import React from 'react';
import { IpcPlayer, View, Text } from '@ray-js/ray';

export default function () {
  return (
    <View style={{ padding: '20px' }}>
      <Text style={{ marginBottom: '10px' }}>IPC 实时视频</Text>
      <IpcPlayer
        deviceId="your-device-id"
        autoplay
        style={{ width: '100%', height: '300px' }}
        onInitDone={(e) => {
          console.log('初始化完成,最大缩放倍数:', e.detail.maxScaleMultiple);
        }}
        onError={(e) => {
          console.log('错误:', e.detail);
        }}
      />
    </View>
  );
}

IPC 播放控制

import React, { useState } from 'react';
import { IpcPlayer, View, Text, Button, createIpcPlayerContext } from '@ray-js/ray';

export default function () {
  const [isOnline, setIsOnline] = useState(false);
  const [connectState, setConnectState] = useState(-1);
  const [previewState, setPreviewState] = useState(-1);
  const playerId = 'myIpcPlayer';

  const handleStartPreview = () => {
    const ctx = createIpcPlayerContext(playerId);
    ctx.startPreview();
  };

  const handleStopPreview = () => {
    const ctx = createIpcPlayerContext(playerId);
    ctx.stopPreview();
  };

  return (
    <View style={{ padding: '20px' }}>
      <IpcPlayer
        id={playerId}
        deviceId="your-device-id"
        autoplay={false}
        muted={false}
        clarity="hd"
        soundMode="speaker"
        orientation="vertical"
        objectFit="contain"
        scalable
        ptzControllable
        borderRadius={8}
        style={{ width: '100%', height: '300px' }}
        onConnectChange={(e) => {
          console.log('连接状态变化:', e.detail.state);
          setConnectState(e.detail.state);
        }}
        onPreviewChange={(e) => {
          console.log('预览状态变化:', e.detail.state);
          setPreviewState(e.detail.state);
        }}
        onOnlineChange={(e) => {
          console.log('在线状态变化:', e.detail.online);
          setIsOnline(e.detail.online);
        }}
        onZoomChange={(e) => {
          if ('zoomLevel' in e.detail) {
            console.log('缩放变化:', e.detail.zoomLevel);
          }
        }}
        onVideoTap={() => {
          console.log('点击视频');
        }}
        onError={(e) => {
          console.log('错误:', e.detail);
        }}
      />
      <View style={{ marginTop: '10px' }}>
        <Text>设备在线: {isOnline ? '是' : '否'}</Text>
        <Text>连接状态: {connectState === 0 ? '已连接' : '未连接'}</Text>
        <Text>预览状态: {previewState === 1 ? '预览中' : '未预览'}</Text>
      </View>
      <View style={{ marginTop: '10px', display: 'flex', flexDirection: 'row', gap: '8px' }}>
        <Button size="mini" onClick={handleStartPreview}>开始预览</Button>
        <Button size="mini" onClick={handleStopPreview}>停止预览</Button>
      </View>
    </View>
  );
}

错误码

值说明
-1000其他未知异常
-1001connect 失败
-1002开启预览失败
-1003结束预览失败
-1004设置静音失败
-1005设置清晰度失败
-1006截图失败
-1007属性不合法
-1008设置参数不合法
-1009disconnect 失败
-1010网络状态不可用
-1011设备离线
-1012设备被移除
-1013startTalk fail
-1014StopTalk fail
-1015StartRecord fail
-1016StopRecord fail
-1017IsTalkBacking fail
-1018SetAvailableRockerDirections fail
-1019IsPTZControllable fail
-1020SetTrackingStatus fail
-1021GetVideoInfo fail

相关链接

相关 API:createIpcPlayerContext。这是基于异层渲染的原生组件, 请注意 原生组件使用限制。

常见问题

  1. ipc-player 默认宽度 300px、高度 225px,可通过 tyss 设置宽高。
  2. Tuya MiniApp IDE 上暂不支持。
  3. 相关原理请参考 基于异层渲染的原生组件。
  4. 请注意 原生组件使用限制。