更新时间:2024-03-04 08:53:15
设备在触发侦测报警时,通常会上传并存储一张实时视频的截图。通过 IPC SDK 获取到的 告警消息 或者 云存储事件 中,都会携带一张加密后的视频截图,需要使用加密图片组件来展示加密图片。
图片解密组件 DecryptImageView
是基于 Fresco
开发的图片加载组件,在加载图片之前,您需要初始化 Fresco
类。
如果其他 SDK 也使用到 Fresco
,请将 IPC SDK 的初始化放到最后,避免被覆盖。否则,可能无法正常显示加密图片。
示例代码
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
FrescoManager.initFresco(this);
}
}
接口说明
public void setImageURI(String url, byte[] key);
参数说明
参数 | 说明 |
---|---|
url | 加密的图片地址 |
key | 加密的图片密钥 |
示例代码
String encroption = "xxx";
DecryptImageView bg = view.findViewById(R.id.decrypt_image_view);
bg.setImageURI(imgUrl, encroption.getBytes());
{path}@{key}
的格式拼接。展示图片时,您需要将 URL 拆分。@{key}
的后缀,则表示这是一张未加密的普通的图片。示例代码
val img: SimpleDraweeView = findViewById(R.id.img);
if (mUriString.contains("@")) {
val index = mUriString.lastIndexOf("@")
try {
val decryption = mUriString.substring(index + 1)
val imageUrl = mUriString.substring(0, index)
val builder = ImageRequestBuilder.newBuilderWithSource(Uri.parse(imageUrl))
.setRotationOptions(RotationOptions.autoRotateAtRenderTime())
.disableDiskCache()
val imageRequest = DecryptImageRequest(builder, "AES", "AES/CBC/PKCS5Padding",
decryption.toByteArray())
controller = Fresco.newDraweeControllerBuilder().setImageRequest(imageRequest)
.build()
} catch (e: Exception) {
e.printStackTrace()
}
} else {
try {
uri = Uri.parse(mUriString)
} catch (e: Exception) {
e.printStackTrace()
}
val builder = Fresco.newDraweeControllerBuilder().setUri(uri)
controller = builder.build()
}
img.controller = controller
云存储事件中,事件截图 TimeRangeBean.snapshotUrl
的值是一个完整的加密过的图片地址,并使用云存储视频播放的统一密钥。
示例代码
String mEncryptKey = "";
CloudBusiness cloudBusiness =new CloudBusiness();
cloudBusiness.getCloudSecret(devId, new Business.ResultListener<JSONObject>() {
@Override
public void onFailure(BusinessResponse bizResponse, JSONObject bizResult, String apiName) {
}
@Override
public void onSuccess(BusinessResponse bizResponse, JSONObject bizResult, String apiName) {
mEncryptKey = bizResult.getString("encryptKey");
}
});
CloudDayBean dayBean = dayBeanList.get(0);
cloudCamera.getMotionDetectionInfo(devId, dayBean.getCurrentStartDayTime(), dayBean.getCurrentDayEndTime(), offset, limit, new IThingResultCallback<List<TimeRangeBean>>() {
@Override
public void onSuccess(List<TimeRangeBean> result) {
//获取指定时间相应的移动侦测数据
TimeRangeBean timeRangeBean = list.get(0);
if (timeRangeBean.getV() == 2 && !TextUtils.isEmpty(mEncryptKey)) {
mSnapshot.setImageURI(timeRangeBean.getSnapshotUrl(), mEncryptKey.getBytes());
} else {
mSnapshot.setImageURI(timeRangeBean.getSnapshotUrl());
}
}
@Override
public void onError(String errorCode, String errorMessage) {
}
});
接口说明
void downloadEncryptedImg(String url, String key, IThingResultCallback<Bitmap> callback);
参数说明
参数 | 说明 |
---|---|
url | 加密图片的地址 |
key | 加密图片的密钥 |
callback | 下载回调,下载成功返回 Bitmap |
示例代码
IThingIPCTool tool = ThingIPCSdk.getTool();
if (tool != null) {
tool.downloadEncryptedImg(url, key, new IThingResultCallback<Bitmap>() {
@Override
public void onSuccess(Bitmap result) {
}
@Override
public void onError(String errorCode, String errorMessage) {
}
});
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈