From 23c691e0b8601471159d32de82a6b5d57016135f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=B3=E4=B8=9C=E6=B5=B7?= Date: Mon, 8 Sep 2025 10:46:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B7=A5=E7=A8=8B=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=B7=BB=E5=8A=A0=E5=BC=82=E5=B8=B8=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/ets/entryability/EntryAbility.ets | 6 +- entry/src/main/ets/pages/Index.ets | 73 ++++++++++++------- .../main/ets/pages/VideoTranscoderPage.ets | 15 ++-- .../main/ets/utils/AVTranscoderManager.ets | 68 ++++++++++++----- 4 files changed, 109 insertions(+), 53 deletions(-) diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index d089ce8..13b00c4 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -22,7 +22,11 @@ const DOMAIN = 0x0000; export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { - this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); + try { + this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); + } catch (err) { + hilog.error(DOMAIN, 'testTag', `setColorMode failed, code is ${err.code}, message is ${err.message}`); + } hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate'); } diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index a8987bc..57e6e24 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -14,6 +14,8 @@ */ import { media } from '@kit.MediaKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { common } from '@kit.AbilityKit'; import { VideoTranscoderPage } from './VideoTranscoderPage'; import { TranscoderFinishPage } from './TranscoderFinishPage'; import { avConfigCommon } from '../utils/AVTranscoderManager'; @@ -42,6 +44,7 @@ struct Index { @State videoFrameWidth: number = 0; @State videoFrameHeight: number = 0; controller: VideoController = new VideoController(); + private context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext; @Builder myRouter(name: string) { @@ -74,21 +77,25 @@ struct Index { const TAG = 'MetadataDemo'; const isSupport: boolean = canIUse('SystemCapability.Multimedia.Media.AVMetadataExtractor'); if (isSupport) { - // Create an AVMetadataExtractor object - let avMetadataExtractor: media.AVMetadataExtractor = await media.createAVMetadataExtractor(); - // Set up fdSrc - avMetadataExtractor.fdSrc = await getContext(this).resourceManager.getRawFd('video_sample.mp4'); - // Get metadata (callback mode) - avMetadataExtractor.fetchMetadata((error, metadata) => { - if (error) { - console.error(TAG, `fetchMetadata callback failed, err = ${JSON.stringify(error)}`); - return; - } - console.info(TAG, `fetchMetadata callback success, genre: ${JSON.stringify(metadata)}`); - // Initialization parameters - this.videoFrameWidth = Number(metadata.videoWidth); - this.videoFrameHeight = Number(metadata.videoHeight); - }) + try { + // Create an AVMetadataExtractor object + let avMetadataExtractor: media.AVMetadataExtractor = await media.createAVMetadataExtractor(); + // Set up fdSrc + avMetadataExtractor.fdSrc = await this.context.resourceManager.getRawFd('video_sample.mp4'); + // Get metadata (callback mode) + avMetadataExtractor.fetchMetadata((error, metadata) => { + if (error) { + console.error(TAG, `fetchMetadata callback failed, err = ${JSON.stringify(error)}`); + return; + } + console.info(TAG, `fetchMetadata callback success, genre: ${JSON.stringify(metadata)}`); + // Initialization parameters + this.videoFrameWidth = Number(metadata.videoWidth); + this.videoFrameHeight = Number(metadata.videoHeight); + }) + } catch (err) { + hilog.error(0x0000, 'testTag', `createAVMetadataExtractor failed, code is ${err.code}, message is ${err.message}`); + } } } @@ -98,20 +105,32 @@ struct Index { const width: number = Number(this.resolution.split('x')[0]); console.info('this.videoFrameWidth', this.videoFrameWidth, width); if (this.videoFrameWidth < 3840 && width >= 3840) { - this.getUIContext().getPromptAction().showToast({ - message: $r('app.string.showToastWarn4k'), - duration: 2000 - }) + try { + this.getUIContext().getPromptAction().showToast({ + message: $r('app.string.showToastWarn4k'), + duration: 2000 + }) + } catch (err) { + hilog.error(0x0000, 'testTag', `getUIContext failed, code is ${err.code}, message is ${err.message}`); + } } else if (this.videoFrameWidth < 1920 && width >= 1920) { - this.getUIContext().getPromptAction().showToast({ - message: $r('app.string.showToastWarn1080'), - duration: 2000 - }) + try { + this.getUIContext().getPromptAction().showToast({ + message: $r('app.string.showToastWarn1080'), + duration: 2000 + }) + } catch (err) { + hilog.error(0x0000, 'testTag', `getUIContext failed, code is ${err.code}, message is ${err.message}`); + } } else if (this.videoFrameWidth < 720 && width >= 720) { - this.getUIContext().getPromptAction().showToast({ - message: $r('app.string.showToastWarn720'), - duration: 2000 - }) + try { + this.getUIContext().getPromptAction().showToast({ + message: $r('app.string.showToastWarn720'), + duration: 2000 + }) + } catch (err) { + hilog.error(0x0000, 'testTag', `getUIContext failed, code is ${err.code}, message is ${err.message}`); + } } else { const codeRate: number = parseInt(codeRateList[this.selectedIndex].split('Mbps')[0]) * 1000000; const params: avConfigCommon = { diff --git a/entry/src/main/ets/pages/VideoTranscoderPage.ets b/entry/src/main/ets/pages/VideoTranscoderPage.ets index 940640c..e922ae6 100644 --- a/entry/src/main/ets/pages/VideoTranscoderPage.ets +++ b/entry/src/main/ets/pages/VideoTranscoderPage.ets @@ -14,6 +14,7 @@ */ import { common } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; import { AVTranscoderManager, outputPathCommon } from '../utils/AVTranscoderManager'; @CustomDialog @@ -165,11 +166,15 @@ export struct VideoTranscoderPage { .height('40vp') .onClick(() => { if (this.isFinish) { - this.getUIContext().getPromptAction().showToast({ - message: $r('app.string.showToastWarnPause'), - duration: 2000 - }) - return + try { + this.getUIContext().getPromptAction().showToast({ + message: $r('app.string.showToastWarnPause'), + duration: 2000 + }) + return + } catch (err) { + hilog.error(0x0000, 'testTag', `getUIContext failed, code is ${err.code}, message is ${err.message}`); + } } if (this.isPause) { // Resume to convert diff --git a/entry/src/main/ets/utils/AVTranscoderManager.ets b/entry/src/main/ets/utils/AVTranscoderManager.ets index 8564a99..2431c2f 100644 --- a/entry/src/main/ets/utils/AVTranscoderManager.ets +++ b/entry/src/main/ets/utils/AVTranscoderManager.ets @@ -81,11 +81,19 @@ export class AVTranscoderManager { async startTranscoderProcess() { if (this.isSupport) { if (this.avTranscoder) { - await this.avTranscoder.release(); + try { + await this.avTranscoder.release(); + } catch (err) { + hilog.error(0x0000, 'testTag', `release failed, code is ${err.code}, message is ${err.message}`); + } this.avTranscoder = undefined; }; // 1. Create a transcoding instance. - this.avTranscoder = await media.createAVTranscoder(); + try { + this.avTranscoder = await media.createAVTranscoder(); + } catch (err) { + hilog.error(0x0000, 'testTag', `createAVTranscoder failed, code is ${err.code}, message is ${err.message}`); + } this.setAVTranscoderCallback(); // 2. Get the transcoding source file fd and the target file fd to avTranscoder; refer to the FilePicker document. if (this.context) { @@ -93,47 +101,67 @@ export class AVTranscoderManager { // To obtain the input file fd, video_sample.mp4 is a provisioning resource in the rawfile directory, // which needs to be replaced by the developer according to the actual situation. let fileDescriptor = await this.context.resourceManager.getRawFd('video_sample.mp4'); - this.avTranscoder.fdSrc = fileDescriptor; + this.avTranscoder!.fdSrc = fileDescriptor; } catch (error) { hilog.error(0x0000, 'testTag', 'Failed to get the file descriptor, please check the resource and path.'); } let outputFilePath = this.context.filesDir + '/output.mp4'; - let file = fs.openSync(outputFilePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); - this.avTranscoder.fdDst = file.fd; - this.outputFilePath = outputFilePath; - this.currentProgress = 0; + try { + let file = fs.openSync(outputFilePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); + this.avTranscoder!.fdDst = file.fd; + this.outputFilePath = outputFilePath; + this.currentProgress = 0; + } catch (err) { + hilog.error(0x0000, 'testTag', `openSync failed, code is ${err.code}, message is ${err.message}`); + } + } + try { + // 3. Configure transcoding parameters to complete the preparation. + await this.avTranscoder!.prepare(this.avConfig); + // 4. Start transcoding. + await this.avTranscoder!.start(); + } catch (err) { + hilog.error(0x0000, 'testTag', `prepare or start failed, code is ${err.code}, message is ${err.message}`); } - // 3. Configure transcoding parameters to complete the preparation. - await this.avTranscoder.prepare(this.avConfig); - // 4. Start transcoding. - await this.avTranscoder.start(); } } // Pause the process for transcoding. async pauseTranscoderProcess() { if (this.isSupport && this.avTranscoder) { - // Call pause only after the start returns. - await this.avTranscoder.pause(); + try { + // Call pause only after the start returns. + await this.avTranscoder.pause(); + } catch (err) { + hilog.error(0x0000, 'testTag', `pause failed, code is ${err.code}, message is ${err.message}`); + } } } // Restore the corresponding transcoding process. async resumeTranscoderProcess() { if (this.isSupport && this.avTranscoder) { - // It is reasonable to call resume only after the call is returned. - await this.avTranscoder.resume(); + try { + // It is reasonable to call resume only after the call is returned. + await this.avTranscoder.resume(); + } catch (err) { + hilog.error(0x0000, 'testTag', `resume failed, code is ${err.code}, message is ${err.message}`); + } } } // Release the transcoding process. async releaseTranscoderProcess() { if (this.isSupport && this.avTranscoder) { - // 1. Release the transcoding instance. - await this.avTranscoder.release(); - this.avTranscoder = undefined; - // 2. Turn off the transcoding target file fd. - fs.closeSync(this.avTranscoder!.fdDst); + try { + // 1. Release the transcoding instance. + await this.avTranscoder.release(); + this.avTranscoder = undefined; + // 2. Turn off the transcoding target file fd. + fs.closeSync(this.avTranscoder!.fdDst); + } catch (err) { + hilog.error(0x0000, 'testTag', `release failed, code is ${err.code}, message is ${err.message}`); + } } } -- Gitee