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(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 }