“wangzhongjie” 4c2515c1fb 22
2024-02-22 10:40:35 +08:00

125 lines
4.6 KiB
TypeScript

import mediaLibrary from '@ohos.multimedia.mediaLibrary'
import onvifclient from '@ohos.onvifclient';
import fs from '@ohos.file.fs'
import util from '@ohos.util';
import configAddress from '../../common/utils/FileConfig'
import {getCurrentTime} from '../utils/tools'
//开始录屏
export async function startRecordVideo(param,td,context) {
return new Promise<videoPlayRes>(async (reslove,reject)=>{
var video_uri = `rtsp://${param.userName}:${param.pwd}@${param.ip}:${param.port}/h264/ch${td}/main/av_stream`;
// var result3 = onvifclient.startRecordVideo(video_uri, "video/" );
// const record_handle = result3.dataInt;
// console.info( `baoyihu startRecordVideo result:`+result3.result+ ` VideoFile:`+result3.dataString );
// reslove(record_handle)
// return
var mediaTest = mediaLibrary.getMediaLibrary(context);
let mediaType = mediaLibrary.MediaType.VIDEO;
let DIR_DOCUMENTS = mediaLibrary.DirectoryType.DIR_VIDEO;
const num = Math.floor(Math.random() * 10000)
const name = `movie_record${getCurrentTime(1)}.mp4`
const path = await mediaTest.getPublicDirectory(DIR_DOCUMENTS);
mediaTest.createAsset(mediaType, name, path, (error, asset) => {
const file_asset = asset; // 记录 ,关闭时用到
asset.open('rw', (error, fd) => {
if (fd > 0) {
var file_path = configAddress.videoSavePath + name;
var result = onvifclient.startRecordVideo(video_uri, file_path, fd);
var rocord_handle = result.dataInt; // 记录 ,关闭时用到
reslove({fd,rocord_handle,file_asset})
} else {
reslove({fd:0,rocord_handle:0,file_asset:0})
console.error('baoyihu startRecordVideo File Open failed with error: ' + error);
}
});
});
})
}
//结束录屏
export async function endRecordVideo(record_handle) {
if(this.record_handle >0)
{
var result = onvifclient.endRecordVideo(record_handle);
// this.record_handle = -1;
console.info( `baoyihu endRecordVideo result:`+result.result+ ` VideoFile:`+result.dataString );
}
else
{
console.info( `baoyihu endRecordVideo no task error`);
}
// var result = onvifclient.endRecordVideo(filehandle);
// fs.closeSync(filehandle);
// file_asset.close(filehandle);
}
/**
*拍照
* @param param
* @param context
* @param type=0不获取base64
*/
export async function takePhoto(param,context,type=0) {
return new Promise(async (reslove,reject)=>{
var video_uri = `rtsp://${param.userName}:${param.pwd}@${param.ip}:${param.port}/h264/ch${param.pztd}/main/av_stream`;
var mediaTest = mediaLibrary.getMediaLibrary(context);
let mediaType = mediaLibrary.MediaType.IMAGE;
let DIR_DOCUMENTS = mediaLibrary.DirectoryType.DIR_IMAGE;
const path = await mediaTest.getPublicDirectory(DIR_DOCUMENTS);
const name="picture_record" + getCurrentTime(1) + ".jpg"
// if(type==1){
// var result = onvifclient.getVideoSnapshot(video_uri,"")
// reslove(result.dataString)
// }else{
// var result = onvifclient.getVideoSnapshot(video_uri,"")
// reslove('')
// }
// return
mediaTest.createAsset(mediaType, name, path, (error, asset) => {
asset.open('rw', (error, fd) => {
if (fd > 0) {
var file_path =configAddress.picSavePath + name
// var result3 = onvifclient.getVideoSnapshot(video_uri,"");
var result3 = onvifclient.getVideoSnapshot(video_uri, file_path, fd);
fs.closeSync(fd);
asset.close(fd);
if(type==1){
fs.lstat(file_path).then((stat) => {
let file = fs.openSync(file_path, fs.OpenMode.READ_WRITE);
const size = Number(stat.size) + 100
let buf = new ArrayBuffer(size);
let num = fs.readSync(file.fd, buf);
var that = new util.Base64();
var array = new Uint8Array(buf);
var result = that.encodeToStringSync(array); //base64圖片
mediaTest.deleteAsset(file_path).then(() => {
console.log('delSuccess')
}).catch(() => {
console.log('delError')
})
this.fileUtil.deleteF(file_path, 3)
reslove(result)
}).catch((err) => {
console.info("get link status failed with error message: " + err.message + ", error code: " + err.code);
});
}else{
reslove('')
}
} else {
console.error('baoyihu getVideoSnapshot File Open failed with error: ' + error);
}
});
});
})
}
export interface videoPlayRes {
rocord_handle?: number;
fd?: number;
file_asset?:any
}