立即注册
查看: 331|回复: 0

[鸿蒙OS技术分享] HarmonyOS媒体数据管理开发:媒体元数据获取开发指导

已绑定手机
发表于 2021-11-26 14:15:20 | 显示全部楼层 |阅读模式 来自 广东省深圳市
HarmonyOS媒体数据管理模块支持多媒体数据管理相关的功能开发,常见操作如:获取媒体元数据、截取帧数据等。
在进行应用的开发前,开发者应了解以下基本概念:
PixelMap:PixelMap是图像解码后无压缩的位图格式,用于图像显示或者进一步的处理。
媒体元数据:媒体元数据是用来描述多媒体数据的数据,例如媒体标题、媒体时长等数据信息。
约束与限制
为及时释放native资源,建议在媒体数据管理AVMetadataHelper对象使用完成后,主动调用release()方法。

媒体元数据获取开发指导
1、场景介绍
媒体元数据是描述多媒体数据的数据,例如媒体标题、媒体时长、媒体的帧数据等。

2、接口说明
表1 媒体元数据获取相关类AVMetadataHelper的主要接口
接口名描述
setSource(String path)读取指定路径的媒体文件,将其设置为媒体源。
setSource(FileDescriptor fd)读取指定的媒体文件描述符,设置媒体源。
setSource(FileDescriptor fd, long offset, long length)读取指定的媒体文件描述符,读取数据的起始位置的偏移量以及读取的数据长度,设置媒体源。
setSource(String uri, Map<String, String> headers)读取指定的媒体文件Uri和请求头,设置媒体源。
setSource(Context context, Uri uri)读取指定的媒体的Uri和上下文,设置媒体源。
resolveMetadata(int keyCode)获取媒体元数据中指定keyCode对应的值。
fetchVideoScaledPixelMapByTime(long timeUs, int option, int dstWidth, int dstHeight)根据视频源中时间戳、获取选项以及图像帧缩放大小,获取帧数据。
fetchVideoPixelMapByTime(long timeUs, int option)根据视频源中时间戳和获取选项,获取帧数据。
fetchVideoPixelMapByTime(long timeUs)根据视频源中时间戳,获取最靠近时间戳的帧的数据。
fetchVideoPixelMapByTime()随机获取数据源中某一帧的数据。
resolveImage()获取音频源中包含的图像数据,比如专辑封面,如果有多个图像,返回任意一个图像的数据。
fetchVideoPixelMapByIndex(int frameIndex, PixelMapConfigs configs)根据帧索引、指定的图像像素格式选项,获取视频源中指定一帧的数据。
fetchVideoPixelMapByIndex(int frameIndex)根据帧索引,获取视频源中指定一帧的数据。
fetchVideoPixelMapByIndex(int frameIndex, int numFrames, PixelMapConfigs configs)根据连续帧开始索引、连续帧数、指定的图像像素格式选项,获取视频源中指定的连续多帧的数据。
fetchVideoPixelMapByIndex(int frameIndex, int numFrames)根据连续帧开始索引、连续帧数,获取视频源中指定的连续多帧的数据。
fetchImagePixelMapByIndex(int imageIndex, PixelMapConfigs configs)根据图像索引、指定的图像像素格式选项,获取源图像中指定的图像。
fetchImagePixelMapByIndex(int imageIndex)根据图像索引,获取源图像中指定的图像。
fetchImagePrimaryPixelMap(PixelMapConfigs configs)据指定的图像像素格式选项,获取源图像中默认图像。
fetchImagePrimaryPixelMap()获取源图像中默认图像。
release()释放读取的媒体资源。


3、获取帧数据的开发步骤
1)创建媒体数据管理AVMetadataHelper对象,可以通过setSource设置要读取的媒体文件,如果不设置或设置不正确,则无法进行后续操作。
AVMetadataHelper avMetadataHelper = new AVMetadataHelper ();
avMetadataHelper.setSource("/path/short_video.mp4");
2)指定获取帧数据的选项,以及获取帧的时间,获取媒体源的帧数据。
PixelMap pixelMap = avMetadataHelper.fetchVideoPixelMapByTime(1000L, 0x00);
3)获取到PixelMap对象,并完成相关信息处理后,调用release()函数释放读取的媒体资源。
avMetadataHelper.release();

4、获取媒体元数据的开发步骤
1)创建媒体数据管理AVMetadataHelper对象,可以通过setSource设置要读取的媒体文件,如果不设置或设置不正确,则无法进行后续操作。
AVMetadataHelper avMetadataHelper= new AVMetadataHelper();
avMetadataHelper.setSource("/path/short_video.mp4");
2)指定要获取的媒体元数据的key,获取媒体元数据。如下代码获取媒体的时长信息:
String result = avMetadataHelper.resolveMetadata(AVMetadataHelper.AV_KEY_DURATION);
3)获取到媒体元数据后,调用release()函数释放读取的媒体资源。
avMetadataHelper.release();

5、获取音频的图像数据的开发步骤
1)创建媒体数据管理AVMetadataHelper对象,可以通过setSource设置要读取的音频媒体文件,如果不设置或设置不正确,则无法进行后续操作。
AVMetadataHelper avMetadataHelper= new AVMetadataHelper();
avMetadataHelper.setSource("/path/short_video.mp4");
2)获取音频的图像数据。
byte[] data = avMetadataHelper.resolveImage();
3)获取到图像数据后,调用release()函数释放读取的媒体资源。
avMetadataHelper.release();
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表