更新时间:2025-12-16 07:16:15下载pdf
ThingIPCSdk(Internet Protocol Camera Software Development Kit)是涂鸦智能为鸿蒙开发者提供的智能摄像头开发工具包。它封装了与涂鸦智能摄像头设备交互的所有核心功能,让开发者可以轻松构建智能安防、家庭监控、智能家居等应用。
功能描述
初始化 ThinkIPCSdk,这是使用 SDK 所有功能前的必要步骤。初始化会配置 SDK 运行环境、注册必要的服务和组件。
函数签名
static init(context: Context);
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| context | Context | 鸿蒙应用的组件上下文,用于 SDK 内部调用系统 API |
IPC SDK 初始化可以尽量提前,在程序启动时执行。
示例
ThingIPCSdk.init();
功能描述
得到 ThinkCameraP2P 实例对象。
函数签名
static getCameraP2P(devId: string): IThingCameraP2P;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| devId | string | 设备 ID |
返回值
IThingCameraP2P 实例对象。
功能描述
得到 ThinkCloudCamera 实例对象。
函数签名
static getCloudCamera(devId: string): IThingCloudCamera;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| devId | string | 设备 ID |
返回值
IThingCloudCamera 实例对象。
功能描述
得到 IThingCameraSDCardManager 实例对象。
函数签名
static getSDCardManager(devId: string) : IThingCameraSDCardManager;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| devId | string | 设备 ID |
返回值
IThingCameraSDCardManager 实例对象。
功能描述
初始化 P2P 连接服务。P2P 初始化依赖于用户登录和 MQTT 连接的完成,用于建立设备间的直连通道,实现低延迟的音视频传输。
函数签名
initP2P(uid: string): void;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| uid | string | 用户唯一标识符,从登录后的用户信息中获取 |
IThinkCameraP2P 初始化,依赖登录完成和 MQTT 的初始化完成。
示例
export class TSmartDeviceController implements ITSmartLocalKeyProvider {
public async getLocalKey(topicId: string): Promise<string | undefined> {
if (topicId.startsWith(TSmartMqttConfig.TOPIC_PREFIX_DEVICE_IN)) {
const device =
await TSmartDeviceCache.get(topicId.replace(TSmartMqttConfig.TOPIC_PREFIX_DEVICE_IN, '')) as TSmartDeviceModel
return device.localKey;
}
return "";
}
}
...
IPCLog.d(this.logTag, "登录成功:" + resp);
TSmartMqtt.initClient(TSmartUser.getDomain()?.mobileMqttsUrl ?? '',
(TSmartUser.getPartnerIdentity() ?? '') + (TSmartUser.getSid() ?? ''), TSmartUser.getSid() ?? '',
(await MD5.digest(TSmartUser.getEcode())).substring(8, 24), new TSmartDeviceController());
TSmartMqtt.connect();
ThingIPCSdk.getP2P().initP2P(TSmartUser.getUid() as string);
功能描述
播放窗口设置。
函数签名
bindXComponentContext(xComponentContext: XComponentContext) : void;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| xComponentContext | XComponentContext | 视频渲染组件的上下文对象,用于接收摄像头视频帧数据。不可为 undefined(尽管签名允许,实际使用时必须传递有效值) |
示例
cameraP2P = ThingIPCSdk.getCameraP2P("devid");
XComponent({id: 'xcomponentId0',type: XComponentType.SURFACE,
libraryname: 'thingvideorenderersdk'
}).onLoad((xComponentContext) => {
this.xComponentContext0 = xComponentContext as XComponentContext;
this.cameraP2P.bindXComponentContext(this.xComponentContext0);
}).onDestroy(() => {
console.log('onDestroy');
}).id("xcomponent")
功能描述
建立 P2P 连接。
函数签名
connect(): Promise<ThingCameraResponse<number>>;
connectWrapper() : Promise<ThingCameraResponse<void>>;
返回值
Promise<ThingCameraResponse<number>>:异步返回会话 ID(Data 字段)和错误码。
功能描述
断开 P2P 连接。
函数签名
disconnect(force : boolean): Promise<ThingCameraResponse<void>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| force | boolean | true:强制断开,false:正常断开 |
返回值
Promise<ThingCameraResponse<void>>
断开后需重新调用 connect 才能操作。
功能描述
查询当前连接状态。
函数签名
isConnected(): boolean;
返回值(Boolean)
ture:已连接。false:未连接。功能描述
开始实时视频预览。
函数签名
startPreview(callback : ThingCameraCallback): Promise<ThingCameraResponse<void>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| callback | ThingCameraCallback | 操作结果回调 |
返回值
Promise<ThingCameraResponse<void>>
需先调用 connect。
示例
IPCLog.d(this.logTag, 'ipc connect start')
if (TSmartUser.getUid() !== undefined) {
this.cameraP2P.connectWrapper().then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, 'ipc connect success')
let previewCallBack: ThingCameraCallback = {
onResponse: (reason: string, errCode: number) => {
if (errCode >= 0) {
IPCLog.d(this.logTag, 'ipc preview success')
} else {
IPCLog.e(this.logTag, 'ipc preview fail')
}
return 0;
}
}
this.cameraP2P.startPreview(previewCallBack).then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, 'ipc preview return success')
} else {
IPCLog.e(this.logTag, 'ipc preview fail')
}
}).catch((e: TSmartAtopRequestError) => {
IPCLog.e(this.logTag, 'ipc preview fail' + e)
});
} else {
IPCLog.e(this.logTag, 'ipc connect fail')
}
}).catch((e: TSmartAtopRequestError) => {
IPCLog.e(this.logTag, 'ipc connect fail' + e)
})
} else {
IPCLog.e(this.logTag, 'uid is undefined')
}
IPCLog.d(this.logTag, 'ipc connect end')
功能描述
停止实时预览。
函数签名
stopPreview(callback : ThingCameraCallback): Promise<ThingCameraResponse<void>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| callback | ThingCameraCallback | 操作结果回调 |
返回值
Promise<ThingCameraResponse<void>>
示例
IPCLog.d(this.logTag, 'ipc disconnect start')
let stopPreviewCallBack: ThingCameraCallback = {
onResponse(reason: string, errCode: number): number {
IPCLog.d(this.logTag, 'ipc disconnect callback')
return 0;
}
};
this.cameraP2P.stopPreview(stopPreviewCallBack).then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, 'ipc stopPreview return success')
} else {
IPCLog.e(this.logTag, 'ipc stopPreview fail')
}
}).catch((e: TSmartAtopRequestError) => {
IPCLog.e(this.logTag, 'ipc preview fail' + e)
});
this.cameraP2P.disconnect(true).then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, 'ipc disconnect return success')
} else {
IPCLog.e(this.logTag, 'ipc disconnect fail')
}
}).catch((e: TSmartAtopRequestError) => {
IPCLog.e(this.logTag, 'ipc preview fail' + e)
});
功能描述
播放设备端录制的视频(云端回放)。
函数签名
startPlayBack(startTime : number, endTime : number, playTime : number, callback: ThingCameraFinishableCallback<string, string>): void;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| startTime | number | 回放开始时间戳(秒) |
| endTime | number | 回放结束时间戳(秒) |
| playTime | number | 初始播放时间戳(秒) |
| callback | ThingCameraFinishableCallback<string, string> | 回放进度/状态回调 |
示例
camera.startPlayBack(1620000000, 1620003600, 1620000000, {
onFinished(data, code) {
if (code === 0) console.log("回放完成");
},
onEvent(type, info1, info2, msg) {
console.log("回放事件:", type);
}
});
功能描述
暂停回放。
函数签名
pausePlayBack() : Promise<ThingCameraResponse<number>>;
返回值
Promise<ThingCameraResponse<number>>
示例
if (this.cameraP2P !== undefined) {
IPCLog.d(this.logTag, "暂停 SD 卡视频");
this.cameraP2P.pausePlayBack().then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, "暂停 SD 卡视频 成功");
} else {
IPCLog.d(this.logTag, "暂停 SD 卡视频 失败");
}
});
} else {
IPCLog.d(this.logTag, "暂停 SD 卡视频失败,this.cameraP2P === undefined");
}
功能描述
恢复回放。
函数签名
resumePlayBack() : Promise<ThingCameraResponse<number>>;
返回值
Promise<ThingCameraResponse<number>>
示例
if (this.cameraP2P !== undefined) {
IPCLog.d(this.logTag, "恢复 SD 卡视频");
this.cameraP2P.resumePlayBack().then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, "恢复 SD 卡视频 成功");
} else {
IPCLog.d(this.logTag, "恢复 SD 卡视频 失败");
}
});
} else {
IPCLog.d(this.logTag, "恢复 SD 卡视频失败,this.cameraP2P === undefined");
}
功能描述
停止回放。
函数签名
stopPlayBack() : Promise<ThingCameraResponse<void>>;
返回值
Promise<ThingCameraResponse<void>>
示例
if (this.cameraP2P !== undefined) {
IPCLog.d(this.logTag, "停止 SD 卡视频");
this.cameraP2P.stopPlayBack().then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, "停止 SD 卡视频 成功");
} else {
IPCLog.d(this.logTag, "停止 SD 卡视频 失败 " + result.errorCodeNumber);
}
});
} else {
IPCLog.d(this.logTag, "停止 SD 卡视频失败,this.cameraP2P === undefined");
}
功能描述
查询指定月份中有录像数据的所有日期列表,用于在日历控件中标记哪些天有可回放的录像。
函数签名
queryRecordDaysByMonth(month: number, year: number): Promise<ThingCameraResponse<string>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| month | number | 月份(1-12) |
| year | number | 年份(如 2025) |
返回值
Promise<ThingCameraResponse<string>>
connectWrapper 或 connect)。示例
let connectResult = await this.cameraP2P.connectWrapper();
if (connectResult.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, "connect 成功 ");
this.cameraP2P.queryRecordDaysByMonth(3, 2025).then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS && result.data !== undefined) {
let playbackDays = JSON.parse(result.data) as Record<string, Array<string>>;
IPCLog.d(this.logTag, "queryRecordDaysByMonth 成功" + playbackDays["DataDays"].toString());
} else {
IPCLog.e(this.logTag, "queryRecordDaysByMonth 失败 " + result.errorCodeNumber);
}
})
} else {
IPCLog.d(this.logTag, "connect 失败 ");
}
功能描述
查询指定日期的详细录像时间段信息,包括每个录像片段的开始/结束时间,用于生成时间轴控件。
函数签名
queryRecordTimeSliceByDay(day : number, month : number, year : number) : Promise<ThingCameraResponse<string>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| day | number | 日期(1-31) |
| month | number | 月份(1-12) |
| year | number | 年份(如 2025) |
返回值
Promise<ThingCameraResponse<string>>
示例
let connectResult = await this.cameraP2P.connectWrapper();
if (connectResult.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, "connect 成功 ");
this.cameraP2P.queryRecordTimeSliceByDay(26, 3, 2025).then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS && result.data !== undefined) {
IPCLog.d(this.logTag, "queryRecordTimeSliceByDay 成功");
let playbackBean = JSON.parse(result.data) as ThingCameraPlayBackBean;
// let playbackBean = ArkTSUtils.ASON.parse(json) as ThingCameraPlayBackBean;
IPCLog.d(this.logTag, "queryRecordTimeSliceByDay 成功 " + playbackBean.items?.length);
if (playbackBean.items !== undefined && playbackBean.items?.length > 0) {
this.mFirstThingCameraTimePieceBean = playbackBean.items[0];
}
} else {
IPCLog.e(this.logTag, "queryRecordTimeSliceByDay 失败 " + result.errorCodeNumber);
}
})
} else {
IPCLog.d(this.logTag, "connect 失败 ");
}
功能描述
录制实时视频到本地文件。
函数签名
startRecordLocalMp4(recordParams: ThingCameraSnapshotParams): Promise<ThingCameraResponse<string>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| recordParams | ThingCameraSnapshotParams | 保存地址 |
ThingCameraSnapshotParams 参数结构
| 参数 | 类型 | 描述 |
|---|---|---|
| dir | string | 保存文件路径 |
| filename | string | 文件名 |
| rotate | number | 旋转角度 |
| saveToSysTem | boolean | 是否保存到系统相册(需权限) |
返回值
Promise<ThingCameraResponse<string>>
示例
const response = await camera.startRecordLocalMp4({
dir: "/sdcard/videos",
fileName: "20231001",
rotate: 0
});
功能描述
停止本地录像。
函数签名
stopRecordLocalMp4(): Promise<ThingCameraResponse<string>>;
返回值
Promise<ThingCameraResponse<string>>:最终文件路径。
需与 startRecordLocalMp4 配对使用。
示例
const response = await camera.stopRecordLocalMp4();
console.log("视频已保存:", response.data);
功能描述
启动/停止双向语音对讲。
函数签名
startAudioTalk() : Promise<ThingCameraResponse<void>>;
stopAudioTalk() : Promise<ThingCameraResponse<void>>;
返回值
Promise<ThingCameraResponse<void>>
需确认设备支持音频功能。
示例
await camera.startAudioTalk(); // 开始对讲
await camera.stopAudioTalk(); // 停止对讲
功能描述
获取实时视频码率。
函数签名
getVideoBitRateKbps() : number;
返回值
当前码率(kbps)。
示例
const bitrate = camera.getVideoBitRateKbps();
console.log("当前码率:", bitrate);
功能描述
设置/获取静音状态。
函数签名
setMute(mute : number) : Promise<ThingCameraResponse<void>>;
getMute() : number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| mute | number | 0:取消静音,1:静音 |
返回值
Promise<ThingCameraResponse<void>>
number:返回当前静音状态。
示例
if (this.cameraP2P !== undefined) {
IPCLog.d(this.logTag, "静音");
this.cameraP2P.setMute(1).then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, "静音 成功");
} else {
IPCLog.d(this.logTag, "静音 失败 " + result.errorCodeNumber);
}
});
} else {
IPCLog.d(this.logTag, "静音失败,this.cameraP2P === undefined");
}
if (this.cameraP2P !== undefined) {
this.cameraP2P.getMute()
} else {
IPCLog.d(this.logTag, "获取静音状态失败,this.cameraP2P === undefined");
}
功能描述
请求摄像头 P2P 连接所需的 RTC 配置信息(如密码、Token、服务器地址等)。
函数签名
requestCameraRtcConfig(devId: string): Promise<ThingCameraResponse<ThingCameraRtcConfig>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| devId | string | 设备 ID |
ThingCameraRtcConfig 参数结构
| 参数 | 类型 | 描述 |
|---|---|---|
| devId | string | 设备 ID |
| password | string | 连接密码 |
| skill | string | 设备能力描述 |
| p2pId | string | P2P 唯一标识符 |
| p2pType | number | 底层传输协议类型 |
| p2pSpecifiedType | number | 连接策略 |
| p2pConfig | string | P2P 服务器配置 |
| sessionTid | string | 会话追踪 ID |
| vedioClaritys | collections.Array |
支持的清晰度列表 |
| virtualCameraUrl | string | 虚拟摄像头 URL |
| virtualCameraEncryptKey | string | 虚拟摄像头密钥 |
| vedioClarity | number | 视频清晰度,默认值为 4 |
| audioAttributes | ThingCameraConfigAudioAttributesBean | 音频硬件能力 |
返回值
Promise<ThingCameraResponse<ThingCameraRtcConfig>>:包含连接配置的响应对象。
示例
const configResult = await camera.requestCameraRtcConfig("device123");
if (configResult.errorCodeNumber === 0 && configResult.data) {
console.log("获取到配置:", configResult.data);
// 后续可用于手动调用 createDevice
}
功能描述
根据 RTC 配置创建摄像头设备实例,初始化底层 P2P 对象。
函数签名
createDevice(cameraConfig: ThingCameraRtcConfig): Promise<ThingCameraResponse<void>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| cameraConfig | ThingCameraRtcConfig | 获取的配置对象 |
返回值
Promise<ThingCameraResponse<void>>
示例
// 手动连接流程
const configResult = await camera.requestCameraRtcConfig("device123");
if (configResult.data) {
const createResult = await camera.createDevice(configResult.data);
if (createResult.errorCodeNumber === 0) {
// 设备创建成功,可调用 connect()
await camera.connect();
}
}
功能描述
注册 P2P 摄像头事件监听器,接收连接状态、视频帧、音频数据等事件。
函数签名
registerP2PCameraListener(listener: OnP2PCameraListener): void;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| listener | OnP2PCameraListener | 事件监听器对象 |
示例
const listener: OnP2PCameraListener = {
onSessionStatusChanged: (sessionId, status, camera) => {
console.log(`连接状态变化: ${sessionId}, 状态: ${status}`);
},
onReceiveFrameYUVData: (sessionId, y, u, v, frameInfo, camera) => {
// 自定义视频帧处理(通常由 XComponent 自动处理)
console.log(`收到视频帧: ${frameInfo.nWidth}x${frameInfo.nHeight}`);
},
onReceiveAudioBufferData: (sessionId, pcm, audioInfo, camera) => {
// 音频数据处理
console.log("收到音频数据");
}
};
camera.registerP2PCameraListener(listener);
功能描述
移除已注册的事件监听器。
函数签名
unregisterP2PCameraListener(listener: OnP2PCameraListener): void;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| listener | OnP2PCameraListener | 事件监听器对象 |
建议在页面销毁或不需要监听时及时移除,避免内存泄漏。
示例
// 移除监听器(如页面销毁时)
camera.unregisterP2PCameraListener(listener);
功能描述
对当前视频画面进行截图,保存为本地图片文件。
函数签名
snapshot(snapshotParams: ThingCameraSnapshotParams): Promise<ThingCameraResponse<string>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| snapshotParams | ThingCameraSnapshotParams | 文件存储信息 |
ThingCameraSnapshotParams 参数结构
| 参数 | 类型 | 描述 |
|---|---|---|
| dir | string | 保存文件路径 |
| fileName | string | 文件名 |
| rotate | number | 旋转角度 |
| saveToSysTem | boolean | 是否保存到系统相册(需权限) |
返回值
Promise<ThingCameraResponse<string>>:返回完整文件路径(Data 字段)。
需要在视频预览状态下调用,确保目录具有写入权限
示例
const snapshotResult = await camera.snapshot({
dir: "/sdcard/Pictures",
fileName: "camera_20231001_120000",
rotate: 0
});
if (snapshotResult.errorCodeNumber === 0) {
console.log("截图保存至:", snapshotResult.data);
// 结果: /sdcard/Pictures/camera_20231001_120000.jpg
}
功能描述
获取当前视频清晰度设置。
函数签名
getVideoClarity(): Promise<ThingCameraResponse<number>>;
返回值
Promise<ThingCameraResponse<number>>:当前清晰度值。
示例
const clarityResult = await camera.getVideoClarity();
if (clarityResult.errorCodeNumber === 0) {
const currentClarity = clarityResult.data;
console.log("当前清晰度:", currentClarity); // 如 4(高清)
}
功能描述
设置视频清晰度。
函数签名
setVideoClarity(clarity: number): Promise<ThingCameraResponse<number>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| clarity | number | 清晰度值(2 = 标清,4 = 高清,8 = 超清) |
返回值
Promise<ThingCameraResponse<number>>:设置后的清晰度值。
示例
// 设置为高清
const setResult = await camera.setVideoClarity(4);
if (setResult.errorCodeNumber === 0) {
console.log("清晰度已设置为:", setResult.data);
}
功能描述
获取当前音频回声数据透出状态。
函数签名
getIsEchoData(): boolean;
返回值
true:音频数据透出给监听器处理。false:音频数据直接发送给设备(默认)。示例
const isEcho = camera.getIsEchoData();
console.log("回声模式:", isEcho ? "透出" : "直发");
功能描述
设置音频回声数据处理模式。
函数签名
setIsEchoData(echoData: boolean): void;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| echoData | boolean | true:音频数据透出到 OnP2PCameraListener.onReceiveSpeakerEchoDatafalse:音频数据直接发送到摄像头设备 |
false(默认):普通对讲场景,音频直接传输。true:需要音频预处理的场景(如回声消除、噪声抑制、音效添加等)。示例
// 开启回声数据透出(用于自定义音频处理)
camera.setIsEchoData(true);
// 注册监听器处理音频数据
const listener: OnP2PCameraListener = {
onReceiveSpeakerEchoData: (audioBuffer, sampleRate) => {
// 自定义音频处理逻辑(如降噪、音效等)
console.log(`音频数据: ${audioBuffer.byteLength} 字节, 采样率: ${sampleRate}`);
// 处理后可选择性发送给设备
}
};
camera.registerP2PCameraListener(listener);
功能描述
检查设备是否支持低功耗唤醒模式(如电池供电设备)。
函数签名
supportLowPower(): boolean;
返回值
true:设备支持低功耗唤醒。false:不支持。示例
if (cameraP2P.supportLowPower()) { console.log("设备支持低功耗模式");}
功能描述
开始视频对讲功能,建立视频通话连接。
函数签名
startVideoTalk(callback: ThingBaseCallback): number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| callback | ThingBaseCallback | 操作结果回调 |
返回值
number 请求 ID,用于后续操作标识。
startVideoCapture 和 startSendVideoTalkData 使用。示例
const requestId = cameraP2P.startVideoTalk({
onResponse: (reason: string, errCode: number) => {
if (errCode >= 0) {
console.log("视频对讲开始成功");
// 开始视频采集和发送
cameraP2P.startVideoCapture(640, 480, 20);
cameraP2P.startSendVideoTalkData(requestId);
} else {
console.log("视频对讲开始失败");
}
return 0;
}});
功能描述
暂停视频对讲。
函数签名
pauseVideoTalk(callback: ThingBaseCallback): number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| callback | ThingBaseCallback | 操作结果回调 |
返回值
number:操作结果代码。
只能在视频对讲已开始状态下调用。
示例
cameraP2P.pauseVideoTalk({
onResponse: (reason: string, errCode: number) => {
if (errCode >= 0) {
console.log("视频对讲暂停成功");
}
return 0;
}
});
功能描述
恢复视频对讲。
函数签名
resumeVideoTalk(callback: ThingBaseCallback): number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| callback | ThingBaseCallback | 操作结果回调 |
返回值
number:请求 ID。
只能在视频对讲暂停状态下调用。
示例
const requestId = cameraP2P.resumeVideoTalk({
onResponse: (reason: string, errCode: number) => {
if (errCode >= 0) {
console.log("视频对讲恢复成功");
}
return 0;
}
});
功能描述
停止视频对讲。
函数签名
stopVideoTalk(): number;
返回值
number:操作结果代码。
会同时停止视频采集和数据发送。
示例
const result = cameraP2P.stopVideoTalk();
if (result >= 0) {
console.log("视频对讲停止成功");
}
功能描述
开始视频采集。
函数签名
startVideoCapture(width: number, height: number, frameRate: number): number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| width | number | 视频宽度 |
| height | number | 视频高度 |
| frameRate | number | 帧率(15-30,默认 20) |
返回值
number:操作结果代码。
需要在视频对讲开始后调用。
示例
const result = cameraP2P.startVideoCapture(640, 480, 20);
if (result >= 0) {
console.log("视频采集开始成功");
}
功能描述
停止视频采集。
函数签名
stopVideoCapture(): number;
返回值
number:操作结果代码。
会自动停止视频数据发送。
示例
const result = cameraP2P.stopVideoCapture();
if (result >= 0) {
console.log("视频采集停止成功");
}
功能描述
切换摄像头(前后置摄像头切换)。
函数签名
switchCamera(): number;
返回值
number:操作结果代码。
需要设备支持多摄像头。
示例
const result = cameraP2P.switchCamera();
if (result >= 0) {
console.log("摄像头切换成功");
}
功能描述
开始视频编码并发送视频数据到设备。
函数签名
startSendVideoTalkData(requestId: number): number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| requestId | number | 视频对讲的请求 ID |
返回值
number:操作结果代码。
需要在视频采集开始后调用。
示例
const result = cameraP2P.startSendVideoTalkData(requestId);
if (result >= 0) {
console.log("视频数据发送开始成功");
}
功能描述
停止视频编码和视频数据发送。
函数签名
stopSendVideoTalkData(): number;
返回值
number:操作结果代码。
会自动停止视频采集。
示例
const result = cameraP2P.stopSendVideoTalkData();
if (result >= 0) {
console.log("视频数据发送停止成功");
}
功能描述
启用或禁用音频特效。
函数签名
enableAudioEffect(enable: boolean): number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| enable | boolean | true:启用,false:禁用 |
返回值
number:操作结果代码。
需要在音频对讲开始前设置。
示例
const result = cameraP2P.enableAudioEffect(true);
if (result >= 0) {
console.log("音频特效启用成功");
}
功能描述
设置音频特效参数。
函数签名
setAudioEffectParameters( robotizationSupported: boolean, pitch: number, time_scale: number, normal_amp_scale: number, robot_amp_scale: number): number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| robotizationSupported | boolean | 是否支持机器声 |
| pitch | number | 音调参数 |
| time_scale | number | 时间缩放(目前只支持 1.0) |
| normal_amp_scale | number | 普通音量缩放 |
| robot_amp_scale | number | 机器声音量缩放 |
返回值
number:操作结果代码。
需要在音频特效启用后设置。
示例
const result = cameraP2P.setAudioEffectParameters(true, 1.5, 1.0, 1.0, 1.2);
if (result >= 0) {
console.log("音频特效参数设置成功");
}
功能描述
设置设备特性。
函数签名
setDeviceFeatures(jsonFeatures: string): number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| jsonFeatures | string | 设备特性的 JSON 字符串 |
返回值
number:操作结果代码。
JSON 格式需要符合设备要求。
示例
const features = {
"video_quality": "high",
"audio_format": "pcm"
};
const result = cameraP2P.setDeviceFeatures(JSON.stringify(features));
if (result >= 0) {
console.log("设备特性设置成功");
}
功能描述
设置视频分割信息。
函数签名
setVideoSplitInfo(json: string): number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| json | string | 视频分割信息的 JSON 字符串 |
返回值
number:操作结果代码。
用于多目摄像头视频分割显示。
示例
const splitInfo = {
"split_type": "quad",
"channels": 4
};
const result = cameraP2P.setVideoSplitInfo(JSON.stringify(splitInfo));
if (result >= 0) {
console.log("视频分割信息设置成功");
}
功能描述
开始回放视频下载。
函数签名
startPlayBackDownload(
startTime: number, stopTime: number,
folderPath: string, mp4FileName: string,
thumbFileName: string,
rotation: ThingCameraConstants.Rotation,
version: number,
callback: ThingProgressiveCallback): number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| startTime | number | 开始时间戳 |
| stopTime | number | 结束时间戳 |
| folderPath | string | 保存文件夹路径 |
| mp4FileName | string | MP4 文件名 |
| thumbFileName | string | 缩略图文件名 |
| rotation | ThingCameraConstants.Rotation | 旋转角度 |
| version | number | 版本号 |
| callback | ThingProgressiveCallback | 进度回调 |
返回值
number:操作结果代码。
需要确保文件夹路径有写入权限。
示例
const result = cameraP2P.startPlayBackDownload(
1620000000,
1620003600,
"/sdcard/Download",
"playback.mp4",
"thumb.jpg",
ThingCameraConstants.Rotation.ROTATION_0,
1,{
onResponse: (reason: string, errCode: number) => {
console.log("下载响应:", reason);
return 0;
},
onProgress: (progress: number) => {
console.log("下载进度:", progress + "%");
}
}
);
功能描述
停止回放视频下载。
函数签名
stopPlayBackDownload(callback: ThingBaseCallback): number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| callback | ThingBaseCallback | 操作结果回调 |
返回值
number:操作结果代码。
只能停止正在进行的下载任务。
示例
const result = cameraP2P.stopPlayBackDownload({
onResponse: (reason: string, errCode: number) => {
if (errCode >= 0) {
console.log("下载停止成功");
}
return 0;
}
});
功能描述
按天删除回放数据。
函数签名
deletePlaybackDataByDay(day: string, callback: ThingFinishableCallback): number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| day | string | 日期字符串(格式:YYYYMMDD) |
| callback | ThingFinishableCallback | 操作结果回调 |
返回值
number:操作结果代码。
删除操作不可逆,请谨慎使用。
示例
const result = cameraP2P.deletePlaybackDataByDay("20231201", {
onFinished: (data: string, errCode: number) => {
if (errCode >= 0) {
console.log("删除完成");
}
},
onResponse: (reason: string, errCode: number) => {
return 0;
}
});
功能描述
按片段删除回放数据。
函数签名
deletePlaybackDataByFragments(fragmentJson: string, callback: ThingFinishableCallback): number;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| fragmentJson | string | 片段信息的 JSON 字符串 |
| callback | ThingFinishableCallback | 操作结果回调 |
返回值
number:操作结果代码。
JSON 格式需要包含要删除的片段信息。
示例
const fragments = {
"fragments": [
{"startTime": 1620000000, "endTime": 1620003600}
]
};
const result = cameraP2P.deletePlaybackDataByFragments(JSON.stringify(fragments), {
onFinished: (data: string, errCode: number) => {
if (errCode >= 0) {
console.log("片段删除完成");
}
}
});
功能描述
以指定清晰度开始预览。
函数签名
startPreviewWithClarity(
clarity: ThingCameraConstants.VideoClarityMode,
callback: ThingCameraCallback): Promise<ThingCameraResponse<void>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| clarity | ThingCameraConstants.VideoClarityMode | 清晰度模式 |
| callback | ThingCameraCallback | 操作回调 |
返回值
Promise<ThingCameraResponse<void>>:异步操作结果。
可以在预览前指定清晰度,避免先默认清晰度再切换。
示例
const result = await cameraP2P.startPreviewWithClarity(
ThingCameraConstants.VideoClarityMode.THING_CLARITY_HD, {
onResponse: (reason: string, errCode: number) => {
if (errCode >= 0) {
console.log("高清预览开始成功");
}
return 0;
}
}
);
功能描述
设置回放视频的播放速度,用于控制回放时的快进、慢放等效果。
函数签名
setPlayBackSpeed(speed: number): Promise<ThingCameraResponse<void>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| speed | number | 播放速度值 |
返回值
Promise<ThingCameraResponse<void>>:异步操作结果。errorCodeNumber:操作结果错误码。ThingCameraErrorCode.SUCCESS:设置成功。ThingCameraErrorCode.CAMERA_OBJECT_NULL:摄像头对象为空。其他错误码参考 ThingCameraErrorCode。
示例
// 设置2倍速快进
const result = await cameraP2P.setPlayBackSpeed(2.0);
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
console.log("播放速度设置成功:2倍速");
} else {
console.log("播放速度设置失败,错误码:" + result.errorCodeNumber);
}
// 设置 0.5 倍速慢放
const slowResult = await cameraP2P.setPlayBackSpeed(0.5);
if (slowResult.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
console.log("播放速度设置成功:0.5 倍慢放");
}
// 设置正常速度倒放
const reverseResult = await cameraP2P.setPlayBackSpeed(-1.0);
if (reverseResult.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
console.log("播放速度设置成功:正常速度倒放");
}
IPCLog.d(this.logTag, 'ipc connect start')
if (TSmartUser.getUid() !== undefined) {
this.cameraP2P.connectWrapper().then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, 'ipc connect success')
let previewCallBack: ThingCameraCallback = {
onResponse: (reason: string, errCode: number) => {
if (errCode >= 0) {
IPCLog.d(this.logTag, 'ipc preview success')
} else {
IPCLog.e(this.logTag, 'ipc preview fail')
}
return 0;
}
}
this.cameraP2P.startPreview(previewCallBack).then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, 'ipc preview return success')
} else {
IPCLog.e(this.logTag, 'ipc preview fail')
}
}).catch((e: TSmartAtopRequestError) => {
IPCLog.e(this.logTag, 'ipc preview fail' + e)
});
} else {
IPCLog.e(this.logTag, 'ipc connect fail')
}
}).catch((e: TSmartAtopRequestError) => {
IPCLog.e(this.logTag, 'ipc connect fail' + e)
})
} else {
IPCLog.e(this.logTag, 'uid is undefined')
}
IPCLog.d(this.logTag, 'ipc connect end')
IPCLog.d(this.logTag, 'ipc disconnect start')
let stopPreviewCallBack: ThingCameraCallback = {
onResponse(reason: string, errCode: number): number {
IPCLog.d(this.logTag, 'ipc disconnect callback')
return 0;
}
};
this.cameraP2P.stopPreview(stopPreviewCallBack).then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, 'ipc stopPreview return success')
} else {
IPCLog.e(this.logTag, 'ipc stopPreview fail')
}
}).catch((e: TSmartAtopRequestError) => {
IPCLog.e(this.logTag, 'ipc preview fail' + e)
});
this.cameraP2P.disconnect(true).then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, 'ipc disconnect return success')
} else {
IPCLog.e(this.logTag, 'ipc disconnect fail')
}
}).catch((e: TSmartAtopRequestError) => {
IPCLog.e(this.logTag, 'ipc preview fail' + e)
});
let connectResult = await this.cameraP2P.connectWrapper();
if (connectResult.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, "connect 成功 ");
this.cameraP2P.queryRecordDaysByMonth(3, 2025).then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS && result.data !== undefined) {
let playbackDays = JSON.parse(result.data) as Record<string, Array<string>>;
IPCLog.d(this.logTag, "queryRecordDaysByMonth 成功" + playbackDays["DataDays"].toString());
} else {
IPCLog.e(this.logTag, "queryRecordDaysByMonth 失败 " + result.errorCodeNumber);
}
})
} else {
IPCLog.d(this.logTag, "connect 失败 ");
}
let connectResult = await this.cameraP2P.connectWrapper();
if (connectResult.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, "connect 成功 ");
this.cameraP2P.queryRecordTimeSliceByDay(26, 3, 2025).then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS && result.data !== undefined) {
IPCLog.d(this.logTag, "queryRecordTimeSliceByDay 成功");
let playbackBean = JSON.parse(result.data) as ThingCameraPlayBackBean;
// let playbackBean = ArkTSUtils.ASON.parse(json) as ThingCameraPlayBackBean;
IPCLog.d(this.logTag, "queryRecordTimeSliceByDay 成功 " + playbackBean.items?.length);
if (playbackBean.items !== undefined && playbackBean.items?.length > 0) {
this.mFirstThingCameraTimePieceBean = playbackBean.items[0];
}
} else {
IPCLog.e(this.logTag, "queryRecordTimeSliceByDay 失败 " + result.errorCodeNumber);
}
})
} else {
IPCLog.d(this.logTag, "connect 失败 ");
}
if (this.mFirstThingCameraTimePieceBean !== undefined) {
IPCLog.d(this.logTag, "播放 SD 卡视频");
let startTime: number = this.mFirstThingCameraTimePieceBean.startTime ?? 0;
let endTime = this.mFirstThingCameraTimePieceBean.endTime ?? 0;
let playTime = startTime;
let callback: ThingCameraFinishableCallback<string, string> = {
onResponse: (reason: string, errCode: number): void => {
IPCLog.d(this.logTag, "播放 SD 卡视频 onResponse " + errCode);
},
onFinished: (data: string, errCode: number): void => {
IPCLog.d(this.logTag, "播放 SD 卡视频 onFinished " + errCode);
},
onEvent: (eventType: number, info1: number, info2: number, errInfo: string): void => {
IPCLog.d(this.logTag, "播放 SD 卡视频 onEvent " + info1);
}
}
this.cameraP2P.startPlayBack(startTime, endTime, playTime, callback);
} else {
IPCLog.d(this.logTag, "播放 SD 卡视频失败,没有片段信息");
}
if (this.cameraP2P !== undefined) {
IPCLog.d(this.logTag, "暂停 SD 卡视频");
this.cameraP2P.pausePlayBack().then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, "暂停 SD 卡视频 成功");
} else {
IPCLog.d(this.logTag, "暂停 SD 卡视频 失败");
}
});
} else {
IPCLog.d(this.logTag, "暂停 SD 卡视频失败,this.cameraP2P === undefined");
}
if (this.cameraP2P !== undefined) {
IPCLog.d(this.logTag, "恢复 SD 卡视频");
this.cameraP2P.resumePlayBack().then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, "恢复 SD 卡视频 成功");
} else {
IPCLog.d(this.logTag, "恢复 SD 卡视频 失败");
}
});
} else {
IPCLog.d(this.logTag, "恢复 SD 卡视频失败,this.cameraP2P === undefined");
}
if (this.cameraP2P !== undefined) {
IPCLog.d(this.logTag, "停止 SD 卡视频");
this.cameraP2P.stopPlayBack().then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, "停止 SD 卡视频 成功");
} else {
IPCLog.d(this.logTag, "停止 SD 卡视频 失败 " + result.errorCodeNumber);
}
});
} else {
IPCLog.d(this.logTag, "停止 SD 卡视频失败,this.cameraP2P === undefined");
}
if (this.cameraP2P !== undefined) {
IPCLog.d(this.logTag, "静音");
this.cameraP2P.setMute(1).then((result) => {
if (result.errorCodeNumber === ThingCameraErrorCode.SUCCESS) {
IPCLog.d(this.logTag, "静音 成功");
} else {
IPCLog.d(this.logTag, "静音 失败 " + result.errorCodeNumber);
}
});
} else {
IPCLog.d(this.logTag, "静音失败,this.cameraP2P === undefined");
}
if (this.cameraP2P !== undefined) {
this.cameraP2P.getMute()
} else {
IPCLog.d(this.logTag, "获取静音状态失败,this.cameraP2P === undefined");
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈