HarmonyOS学习路之开发篇—多媒体开发(视频开发 三)

简介: 媒体描述信息开发

媒体描述信息开发

场景介绍

媒体描述信息主要工作是支持多媒体的相关描述信息的存取。

接口说明

媒体描述信息类AVDescription的主要接口

image.png媒体描述信息内部静态类AVDescription.Builder的主要接口

image.png

开发步骤

1. 调用AVDescription.Builder类的build方法创建AVDescription实例。代码示例如下:

String pathName = "/data/data/com.example.myapplication/files/test.png";
ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions();
srcOpts.formatHint = "image/png";
ImageSource imageSource = ImageSource.create(pathName, srcOpts);
ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOptions();
decodingOpts.desiredSize = new Size(0, 0);
decodingOpts.desiredRegion = new Rect(0, 0, 0, 0);
PixelMap pixelMap = imageSource.createPixelmap(0, decodingOpts);
Uri iconUri = Uri.parse("http://test.icon");
Uri mediaUri = Uri.parse("http://test.mp4");
PacMap pacMap = new PacMap();
AVDescription avDescription = new AVDescription.Builder().setExtras(null)
            .setMediaId("1")
            .setDescription("Description")
            .setIconUri(iconUri)
            .setIMediaUri(mediaUri)
            .setExtras(pacMap)
            .setIcon(pixelMap)
            .setTitle("title")
            .setSubTitle("subTitle")
            .build();

2. (可选)根据已有的AVDescription对象,可以获取媒体的描述信息,如获取媒体Uri,代码示例如下:


Uri uri = avDescription.getMediaUri(); 

3. (可选)根据已有的AVDescription对象,可以将媒体的描述信息写入Parcel对象,代码示例如下:


Parcel parcel = Parcel.create();
boolean result = avDescription.marshalling(parcel);

4. (可选)根据已有的Parcel对象,可以读取到AVDescription对象,实现媒体描述信息的写入,代码示例如下:


boolean result = avDescription.unmarshalling(parcel);

媒体元数据开发

场景介绍

媒体元数据主要用于媒体数据的存放和读取,包含诸如媒体资源的描述、创建日期、作者、封面图片等等。


接口说明

媒体元数据存放类AVMetadata.Builder的主要接口

image.png媒体元数据类AVMetadata的主要接口

image.png

开发步骤

1. 调用AVMetadata.Builder类的build方法创建AVMetadata实例。代码示例如下:

String pathName = "/data/data/com.example.myapplication/files/test.png";
ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions();
srcOpts.formatHint = "image/png";
ImageSource imageSource = ImageSource.create(pathName, srcOpts);
ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOptions();
decodingOpts.desiredSize = new Size(0, 0);
decodingOpts.desiredRegion = new Rect(0, 0, 0, 0);
PixelMap pixelMap = imageSource.createPixelmap(0, decodingOpts);
AVMetadata avMetadata = new AVMetadata.Builder().setString(AVMetadata.AVTextKey.META_ID, "illuminate.mp3")
                  .setString(AVMetadata.AVTextKey.TITLE, "title")
                  .setString(AVMetadata.AVTextKey.ARTIST, "artist")
                  .setString(AVMetadata.AVTextKey.ALBUM, "album")
                  .setString(AVMetadata.AVTextKey.TITLE, "display_subtitle")
                  .setPixelMap(AVMetadata.AVPixelMapKey.ICON, pixelmap)
                  .build();

2. (可选)根据已有的AVMetadata对象,可以获取媒体元数据信息,如获取媒体标题等,代码示例如下:


String title = avMetadata.getString(AVMetadata.AVTextKey.TITLE);

3. 将已有的媒体元数据AVMetadata对象下发给应用,示例如下:


AVSession  mediaSession = new AVSession(this, "AVService");
mediaSession.setAVMetadata(avMetadata);

4. 应用获取媒体元数据一般结合AVControllerCallback相关类使用。

Image musicCover;
Text musicTitle;
public class Callback extends AVControllerCallback {
    @Override
    public void onAVMetadataChanged(AVMetadata metadata) {
        // 歌曲信息回调
        AVDescription description = metadata.getAVDescription();
        // 获取标题
        String title = description.getTitle().toString();
        CharSequence sequence = metadata.getText(AVMetadata.AVTextKey.TITLE);
        if (sequence != null) {
            title = sequence.toString();
        }
        // 设置媒体title
        musicTitle.setText(title);
        // 获取曲目专封面
        PixelMap iconPixelMap = description.getIcon();
        // 设置歌曲封面图
        musicCover.setPixelMap(iconPixelMap);
    }
}
相关文章
|
4天前
|
安全 测试技术 数据安全/隐私保护
猫头虎分享:鸿蒙生态带给开发者的全新机遇!轻松实现按需加载与多端适配,开发效率翻倍
猫头虎分享:鸿蒙生态带来的全新机遇!华为在原生鸿蒙之夜发布会上,推出了全新的鸿蒙系统和焕新升级的应用市场。此次升级在用户体验和隐私保护方面实现了重大突破,提供了自动化检测前移、按需加载和多端适配等服务,帮助开发者提高开发效率和应用质量。
45 6
|
7天前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
44 8
|
7天前
|
安全 测试技术 数据安全/隐私保护
|
2天前
|
传感器 开发框架 物联网
鸿蒙next选择 Flutter 开发跨平台应用的原因
鸿蒙(HarmonyOS)是华为推出的一款旨在实现多设备无缝连接的操作系统。为了实现这一目标,鸿蒙选择了 Flutter 作为主要的跨平台应用开发框架。Flutter 的跨平台能力、高性能、丰富的生态支持和与鸿蒙系统的良好兼容性,使其成为理想的选择。通过 Flutter,开发者可以高效地构建和部署多平台应用,推动鸿蒙生态的快速发展。
70 0
|
4天前
|
Dart 安全 UED
Flutter&鸿蒙next中的表单封装:提升开发效率与用户体验
在移动应用开发中,表单是用户与应用交互的重要界面。本文介绍了如何在Flutter中封装表单,以提升开发效率和用户体验。通过代码复用、集中管理和一致性的优势,封装表单组件可以简化开发流程。文章详细讲解了Flutter表单的基础、封装方法和表单验证技巧,帮助开发者构建健壮且用户友好的应用。
55 0
|
移动开发 Ubuntu 网络协议
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(中)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令
170 1
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(中)
|
XML Web App开发 开发框架
鸿蒙开发入门 | 开发第一个鸿蒙应用+页面跳转
准备好鸿蒙开发环境后,接下来就需要创建鸿蒙项目,掌握项目的创建过程以及配置。项目创建好后,需要把项目运行在模拟器上,鸿蒙的模拟和安卓模拟器有些不同,鸿蒙提供远程模拟器和本地模拟器,通过登录华为账号登录在线模拟器,使用DevEco Studio可将项目部署到远程模拟器中。
1242 1
鸿蒙开发入门 | 开发第一个鸿蒙应用+页面跳转
|
存储 Ubuntu 前端开发
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(下)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令
332 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(下)
|
存储 编解码 Ubuntu
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(上)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令
223 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(上)
|
开发工具
HarmonyOS(鸿蒙)开发一文入门
HarmonyOS(鸿蒙)开发一文入门
165 0
HarmonyOS(鸿蒙)开发一文入门