b6c02d88创建于 9 天前历史提交

ohos.multimedia.media(媒体服务)

说明:

当前为Beta阶段。

media模块为开发者提供一套简单且易于理解的接口,使得开发者能够方便接入系统并使用系统的媒体资源。

媒体子系统包含了音视频相关媒体业务,目前主要提供获取视频缩略图(AVImageGenerator)的功能。

导入模块

import kit.MediaKit.*

权限列表

ohos.permission.MICROPHONE

使用说明

API示例代码使用说明:

  • 若示例代码首行有“// index.cj”注释,表示该示例可在仓颉模板工程的“index.cj”文件中编译运行。
  • 若示例需获取Context应用上下文,需在仓颉模板工程中的“main_ability.cj”文件中进行配置。
  • 获取当前应用沙箱所在路径可通过UIAbilityContext.filesDir获取。

上述示例工程及配置模板详见仓颉示例代码说明

func createAVImageGenerator()

public func createAVImageGenerator(): AVImageGenerator

功能: 创建AVImageGenerator实例。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

返回值:

类型 说明
AVImageGenerator 返回AVImageGenerator实例。

异常:

示例:

// index.cj

import kit.MediaKit.*
import kit.PerformanceAnalysisKit.*
import ohos.business_exception.BusinessException

try {
    let generator = createAVImageGenerator()
} catch (e: BusinessException) {
    Hilog.error(0, "AppLogCj", e.message)
}

class AVFileDescriptor

public class AVFileDescriptor {
    public var fd: Int32
    public var offset: Int64
    public var length: Int64
    public init(
        fd: Int32,
        offset!: Int64 = 0,
        length!: Int64 = -1
    )
}

功能: 音视频文件资源描述,一种特殊资源的播放方式,使用场景:应用中的音频资源被连续存储在同一个文件中,需要根据偏移量和长度进行播放。

系统能力: SystemCapability.Multimedia.Media.Core

起始版本: 22

var fd

public var fd: Int32

功能: 资源句柄,通过getRawFd获取,也可以通过open获取。

类型: Int32

读写能力: 可读写

系统能力: SystemCapability.Multimedia.Media.Core

起始版本: 22

var length

public var length: Int64

功能: 资源长度,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。

类型: Int64

读写能力: 可读写

系统能力: SystemCapability.Multimedia.Media.Core

起始版本: 22

var offset

public var offset: Int64

功能: 资源偏移量,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。

类型: Int64

读写能力: 可读写

系统能力: SystemCapability.Multimedia.Media.Core

起始版本: 22

init(Int32, Int64, Int64)

public init(
    fd: Int32,
    offset!: Int64 = 0,
    length!: Int64 = -1
)

功能: 构造音视频文件资源描述类型。

系统能力: SystemCapability.Multimedia.Media.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
fd Int32 - 资源句柄,通过getRawFd获取,也可以通过open获取。
offset Int64 0 命名参数。 资源偏移量,默认值为0,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。
length Int64 -1 命名参数。 资源长度,默认值为-1,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。

class AVImageGenerator

public class AVImageGenerator {}

功能: 视频缩略图获取类,用于从视频资源中获取缩略图。在调用AVImageGenerator的方法前,需要先通过createAVImageGenerator()构建一个AVImageGenerator实例。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

prop fdSrc

public mut prop fdSrc: AVFileDescriptor

功能: 媒体文件描述,通过该属性设置数据源。

使用示例:

假设一个连续存储的媒体文件,地址偏移:0,字节长度:100。其文件描述为AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }。

说明:

将资源句柄(fd)传递给AVImageGenerator实例之后,不允许通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个AVPlayer/AVImageGenerator/AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频缩略图数据获取异常。

类型: AVFileDescriptor

读写能力: 可读写

系统能力: SystemCapability.Multimedia.Media.AVMetadataExtractor

起始版本: 22

异常:

func fetchFrameByTime(Int64, AVImageQueryOptions, PixelMapParams)

public func fetchFrameByTime(timeUs: Int64, options: AVImageQueryOptions, param: PixelMapParams): PixelMap

功能: 获取视频缩略图。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
timeUs Int64 - 需要获取的缩略图在视频中的时间点,单位为微秒(μs)。
options AVImageQueryOptions - 需要获取的缩略图时间点与视频帧的对应关系。
param PixelMapParams - 需要获取的缩略图的格式参数。

返回值:

类型 说明
PixelMap 视频缩略图。

异常:

  • BusinessException:对应错误码如下表,详见Media错误码

    错误码ID 错误信息
    5400101 No memory.
    5400102 Operation not allowed.
    5400106 Unsupported format.

示例:

// index.cj

import kit.MediaKit.*
import kit.LocalizationKit.*
import ohos.business_exception.BusinessException
import kit.PerformanceAnalysisKit.Hilog

try {
    let timeUs = 0
    let queryOption = AVImageQueryOptions.AvImageQueryNextSync
    let param = PixelMapParams(width: 300, height: 300)
    let generator = createAVImageGenerator()
    let abilityContext = Global.abilityContext // 此处需手动配置模板,获取Context上下文。上下文获取方式请参见使用说明。
    let rawFd = abilityContext.resourceManager.getRawFd("trailer.mp4")    // 请替换您的资源路径,获取文件路径参考本文使用说明
    generator.fdSrc = AVFileDescriptor(rawFd.fd, offset: rawFd.offset, length: rawFd.length)
    let pic = generator.fetchFrameByTime(timeUs, queryOption, param)
    generator.release()
} catch (e: BusinessException) {
    Hilog.info(0, "test", "${e.message}")
}

func release()

public func release(): Unit

功能: 释放资源。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

异常:

示例:

// index.cj

import kit.MediaKit.*
import kit.LocalizationKit.*
import kit.PerformanceAnalysisKit.*
import ohos.business_exception.BusinessException

try {
    let timeUs = 0
    let queryOption = AVImageQueryOptions.AvImageQueryNextSync
    let param = PixelMapParams(width: 300, height: 300)
    let generator = createAVImageGenerator()
    let abilityContext = Global.abilityContext // 此处需手动配置模板,获取Context上下文。上下文获取方式请参见使用说明。
    let rawFd = abilityContext.resourceManager.getRawFd("trailer.mp4")
    generator.fdSrc = AVFileDescriptor(rawFd.fd, offset:rawFd.offset, length:rawFd.length)
    let pic = generator.fetchFrameByTime(timeUs, queryOption, param)
    generator.release()
} catch (e: BusinessException) {
    Hilog.error(0, "AppLogCj", e.message)
}

class PixelMapParams

public class PixelMapParams {
    public var width: Int32
    public var height: Int32
    public init(width!: Int32 = -1, height!: Int32 = -1)
}

功能: 获取视频缩略图时,输出缩略图的格式参数。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

var height

public var height: Int32

功能: 输出的缩略图高度。应保证大于0且不大于原始视频高度。否则返回的缩略图不会进行缩放。

类型: Int32

读写能力: 可读写

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

var width

public var width: Int32

功能: 输出的缩略图宽度。应保证大于0且不大于原始视频宽度。否则返回的缩略图不会进行缩放。

类型: Int32

读写能力: 可读写

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

init(Int32, Int32)

public init(width!: Int32 = -1, height!: Int32 = -1)

功能: 构造缩略图的格式参数。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
width Int32 -1 命名参数。 输出的缩略图宽度。应保证大于0且不大于原始视频宽度。否则返回的缩略图不会进行缩放。
height Int32 -1 命名参数。 输出的缩略图高度。应保证大于0且不大于原始视频高度。否则返回的缩略图不会进行缩放。

enum AVImageQueryOptions

public enum AVImageQueryOptions <: Equatable<AVImageQueryOptions> & ToString {
    | AvImageQueryNextSync
    | AvImageQueryPreviousSync
    | AvImageQueryClosestSync
    | AvImageQueryClosest
    | ...
}

功能: 需要获取的缩略图时间点与视频帧的对应关系。

在获取视频缩略图时,传入的时间点与实际取得的视频帧所在时间点不一定相等,需要指定传入的时间点与实际取得的视频帧的时间关系。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

父类型:

AvImageQueryClosest

AvImageQueryClosest

功能: 表示选取离传入时间点最近的帧,该帧不一定是关键帧。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

AvImageQueryClosestSync

AvImageQueryClosestSync

功能: 表示选取离传入时间点最近的关键帧。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

AvImageQueryNextSync

AvImageQueryNextSync

功能: 表示选取传入时间点或之后的关键帧。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

AvImageQueryPreviousSync

AvImageQueryPreviousSync

功能: 表示选取传入时间点或之前的关键帧。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

func !=(AVImageQueryOptions)

public operator func !=(other: AVImageQueryOptions): Bool

功能: 比较两个AVImageQueryOptions是否不等。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
other AVImageQueryOptions - 另一AVImageQueryOptions实例。

返回值:

类型 说明
Bool 两个AVImageQueryOptions不等返回true,否则返回false。

func ==(AVImageQueryOptions)

public operator func ==(other: AVImageQueryOptions): Bool

功能: 比较两个AVImageQueryOptions是否相等。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
other AVImageQueryOptions - 另一AVImageQueryOptions实例。

返回值:

类型 说明
Bool 两个AVImageQueryOptions相等返回true,否则返回false。

func toString()

public func toString(): String

功能: 返回AVImageQueryOptions的字符串表示。

系统能力: SystemCapability.Multimedia.Media.AVImageGenerator

起始版本: 22

返回值:

类型 说明
String AVImageQueryOptions的字符串表示。