HarmonyOS 鸿蒙Next分享视频

HarmonyOS 鸿蒙Next分享视频 有没有分享视频的开发指导,或者Demo示例?

3 回复

视频类型分享支持将一个或多个视频分享到目标设备/目标应用。

  • 目标设备接收时,视频会保存到图库中。
  • 目标应用接收时,可便捷地处理视频内容。例如:将一个视频分享给畅连,发送给畅连好友。

开发步骤

  1. 导入相关模块。
import { systemShare } from '@kit.ShareKit';
import { uniformTypeDescriptor as utd } from '@kit.ArkData';
import { common } from '@kit.AbilityKit';
import { fileUri } from '@kit.CoreFileKit';
import { image } from '@kit.ImageKit';
import { BusinessError } from '@kit.BasicServicesKit';
  1. 生成视频封面图(推荐)。
// 生成视频封面图
let uiContext: UIContext = this.getUIContext();
let contextFaker: Context = uiContext.getHostContext() as Context;
let thumbnailPath = contextFaker.filesDir + '/exampleImage.jpg'; // 仅为示例 请替换正确的文件路径
let imageSource: image.ImageSource = image.createImageSource(thumbnailPath);
let imagePacker: image.ImagePacker = image.createImagePacker();
let buffer: ArrayBuffer = await imagePacker.packToData(imageSource, {
  // 当前只支持'image/jpeg','image/webp'和'image/png'类型图片. 
  format: 'image/jpeg', 
  // JPEG编码中设定输出图片质量的参数,取值范围为0-100. 
  // 建议适当压缩,图片过大无法拉起分享.
  quality: 30 
});
  1. 构造分享数据。
// 构造ShareData,需配置一条有效数据信息
let filePath = contextFaker.filesDir + '/exampleVideo.mp4'; // 仅为示例 请替换正确的文件路径
// 获取精准的utd类型
let utdTypeId = utd.getUniformDataTypeByFilenameExtension('.mp4', utd.UniformDataType.VIDEO);
let shareData: systemShare.SharedData = new systemShare.SharedData({
  utd: utdTypeId,
  uri: fileUri.getUriFromPath(filePath),
  title: '视频标题', // 不传title字段时,显示视频文件名
  description: '视频描述', // 不传description字段时,显示视频大小
  thumbnail: new Uint8Array(buffer), // 优先使用传递的缩略图做预览 不传则默认使用视频第一帧画面做预览图
});

沙箱路径可通过fileUri.getUriFromPath方法获取文件URI。

  1. 启动分享面板。
// 进行分享面板显示
let controller: systemShare.ShareController = new systemShare.ShareController(shareData);
let context: common.UIAbilityContext = uiContext.getHostContext() as common.UIAbilityContext;
controller.show(context, {
  selectionMode: systemShare.SelectionMode.SINGLE,
  previewMode: systemShare.SharePreviewMode.DETAIL,
}).then(() => {
  console.info('ShareController show success.');
}).catch((error: BusinessError) => {
  console.error(`ShareController show error. code: ${error.code}, message: ${error.message}`);
});

完整示例代码请参见:samplecode-分享视频

更多关于HarmonyOS 鸿蒙Next分享视频的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS Next的视频分享功能基于分布式软总线技术实现跨设备传输,支持端到端加密。用户可通过控制中心超级中转站直接拖拽媒体文件,或使用畅连应用进行高清视频传输。系统通过自研的HDFS分布式文件系统保障传输稳定性,并利用硬件级TEE安全环境保护数据隐私。该功能兼容多种视频格式,在搭载HarmonyOS Next的设备间可实现无缝流转,无需依赖第三方应用。

在HarmonyOS Next中,分享视频可以通过系统分享能力或自定义UI实现。以下是简要开发指导:

  1. 使用系统分享:通过Want对象配置视频URI和MIME类型,调用startAbility()触发系统分享面板:

    let want = {
      action: 'ohos.want.action.send',
      entities: ['entity.system.share'],
      uri: 'file://media/video.mp4', // 视频文件路径
      type: 'video/*'
    };
    await context.startAbility(want);
    
  2. 自定义分享界面:若需定制UI,可通过Picker组件选择视频文件,结合FileManager获取路径,再使用DataShareHelper发送到目标应用。

示例代码可参考官方DevEco Sample中心的"ShareDemo",其中包含视频分享的完整场景实现。注意需申请ohos.permission.READ_MEDIA权限,并适配动态授权逻辑。

回到顶部