OpenHarmony音视频开发概述:转码(一)

一、简介

OpenHarmony-5.0-Release 版本MediaKit 新提供了AVTranscoder JS API 用来实现视频转码功能,本文主要介绍了使用 AVTranscoder 实现视频转码功能的开发指导。

二、版本信息

OpenHarmony-5.0-Release 标准系统(2024/9/1),新增API持续演进中,后续可能存在差异。

三、开发流程

1、创建AVTranscoder实例

通过createAVTranscoder()构建一个AVTranscoder实例

import { media } from '@kit.MediaKit';
import { BusinessError } from '@kit.BasicServicesKit';

let avTranscoder: media.AVTranscoder;
media.createAVTranscoder().then((transcoder: media.AVTranscoder) => {
  avTranscoder = transcoder;
}, (error: BusinessError) => {
  console.error(`createAVTranscoder failed`);
})

2、设置监听事件

设置应用需要的监听事件,监听转码进度及错误上报
(1)progressUpdate 监听AVTranscoder的转码进度更新
(2)complete 监听AVTranscoder的转码完成
(3)error 监听AVTranscoder的错误信息

import { BusinessError } from '@kit.BasicServicesKit';

avTranscoder.on('progressUpdate', (progress: number) => {
  console.log('avTranscoder progressUpdate = ' + progress);
});

// 转码完成回调函数
avTranscoder.on('complete', () => {
  console.log(`transcoder is completed`);
  // 用户可以在此监听转码完成事件
})

// 错误上报回调函数
avTranscoder.on('error', (err: BusinessError) => {
  console.error(`avTranscoder failed, code is ${err.code}, message is ${err.message}`);
})

3、设置资源

设置fdSrc(源媒体文件描述,通过该属性设置数据源,即转码输入文件)和fdDst(目标媒体文件描述,通过该属性设置数据输出,即转码输出文件描述符)
注:fdSrc属性的类型为AVFileDescriptor;fdDst的属性的类型为number,需要调用基础文件操作接口(ohos.file.fs)实现应用文件访问能力,获取方式可参考应用文件访问与管理

import resourceManager from '@ohos.resourceManager';

let context = getContext(this) as common.UIAbilityContext;
let fileDescriptor = await context.resourceManager.getRawFd('xxx.mp4');
// 设置转码的源文件属性fdSrc
this.avTranscoder.fdSrc = fileDescriptor;

// 设置转码的目标文件属性fdDst
this.avTranscoder.fdDst = xxx;

4、配置转码参数

prepare(config: AVTranscoderConfig): Promise<\void>
通过prepare接口进行视频转码的参数设置,目前支持设置的转码参数有限,只有一些基本的能力。

import { media } from '@kit.MediaKit';
import { BusinessError } from '@kit.BasicServicesKit';

let avConfig: media.AVTranscoderConfig = {
  audioBitrate: 100000, // 输出音频的码率
  audioCodec: media.CodecMimeType.AUDIO_AAC, // 输出音频的编码格式,目前只支持AAC_LC
  fileFormat: media.ContainerFormatType.CFT_MPEG_4A, // 输出的封装格式,目前支持MP4格式
  videoBitrate: 2000000, // 输出视频的码率
  videoCodec: media.CodecMimeType.VIDEO_AVC,
  videoFrameWidth: 640,  // 输出视频的宽
  videoFrameHeight: 480, // 视频分辨率的高
}
avTranscoder.prepare(avConfig).then(() => {
  console.log('Invoke prepare succeeded.');
}, (err: BusinessError) => {
  console.error(`Invoke prepare failed, code is ${err.code}, message is ${err.message}`);
})

5、开始转码

avTranscoder.start();

6、暂停转码

avTranscoder.pause();

5、恢复转码

avTranscoder.resume();

6、取消转码

avTranscoder.cancel();

7、取消转码事件监听

avTranscoder.off('progressUpdate');
avTranscoder.off('error');
avTranscoder.off('complete');

8、销毁实例

avTranscoder.release();

四、结语

后续持续更新转码的API参考、支持的能力及系统服务层的实现原理。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值