1# Media Subsystem ChangeLog 2 3## cl.media.1 API Change of the Playback Function 4 5Added the [AVPlayer](../../../application-dev/reference/apis/js-apis-media.md#avplayer9)<sup>9+</sup> API for audio and video playback, with the updated state machine and error codes, which is recommended. The following APIs for audio playback and video playback are no longer maintained: [AudioPlayer](../../../application-dev/reference/apis/js-apis-media.md#audioplayer)<sup>6+</sup> and [VideoPlayer](../../../application-dev/reference/apis/js-apis-media.md#videoplayer)<sup>8+</sup>. 6 7**Change Impacts** 8 9The original APIs can still be used but are no longer maintained. You are advised to use the new API instead. 10 11**Key API/Component Changes** 12 13Added APIs 14 15| Class | Declaration | 16| -------------- | ------------------------------------------------------------ | 17| media | createAVPlayer(callback: AsyncCallback\<AVPlayer>): void | 18| media | createAVPlayer() : Promise\<AVPlayer> | 19| media.AVPlayer | interface AVPlayer | 20| media.AVPlayer | videoScaleType ?: VideoScaleType | 21| media.AVPlayer | url ?: string | 22| media.AVPlayer | surfaceId ?: string | 23| media.AVPlayer | stop(callback: AsyncCallback\<void>): void | 24| media.AVPlayer | stop(): Promise\<void> | 25| media.AVPlayer | setVolume(volume: number): void | 26| media.AVPlayer | setSpeed(speed: PlaybackSpeed): void | 27| media.AVPlayer | setBitrate(bitrate: number): void | 28| media.AVPlayer | seek(timeMs: number, mode?:SeekMode): void | 29| media.AVPlayer | reset(callback: AsyncCallback\<void>): void | 30| media.AVPlayer | reset(): Promise\<void> | 31| media.AVPlayer | release(callback: AsyncCallback\<void>): void | 32| media.AVPlayer | release(): Promise\<void> | 33| media.AVPlayer | readonly width: number | 34| media.AVPlayer | readonly state: AVPlayerState | 35| media.AVPlayer | readonly height: number | 36| media.AVPlayer | readonly duration: number | 37| media.AVPlayer | readonly currentTime: number | 38| media.AVPlayer | prepare(callback: AsyncCallback\<void>): void | 39| media.AVPlayer | prepare(): Promise\<void> | 40| media.AVPlayer | play(callback: AsyncCallback\<void>): void | 41| media.AVPlayer | play(): Promise\<void> | 42| media.AVPlayer | pause(callback: AsyncCallback\<void>): void | 43| media.AVPlayer | pause(): Promise\<void> | 44| media.AVPlayer | on(type: 'volumeChange', callback: Callback\<number>): void | 45| media.AVPlayer | on(type: 'videoSizeChange', callback: (width: number, height: number) => void): void | 46| media.AVPlayer | on(type: 'timeUpdate', callback: Callback\<number>): void | 47| media.AVPlayer | on(type: 'stateChange', callback: (state: AVPlayerState, reason: StateChangeReason) => void): void | 48| media.AVPlayer | on(type: 'startRenderFrame', callback: Callback\<void>): void | 49| media.AVPlayer | on(type: 'speedDone', callback: Callback\<number>): void | 50| media.AVPlayer | on(type: 'seekDone', callback: Callback\<number>): void | 51| media.AVPlayer | on(type: 'error', callback: ErrorCallback): void | 52| media.AVPlayer | on(type: 'endOfStream', callback: Callback\<void>): void | 53| media.AVPlayer | on(type: 'durationUpdate', callback: Callback\<number>): void | 54| media.AVPlayer | on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void | 55| media.AVPlayer | on(type: 'bitrateDone', callback: Callback\<number>): void | 56| media.AVPlayer | on(type: 'availableBitrates', callback: (bitrates: Array\<number>) => void): void | 57| media.AVPlayer | on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void | 58| media.AVPlayer | off(type: 'volumeChange'): void | 59| media.AVPlayer | off(type: 'videoSizeChange'): void | 60| media.AVPlayer | off(type: 'timeUpdate'): void | 61| media.AVPlayer | off(type: 'stateChange'): void | 62| media.AVPlayer | off(type: 'startRenderFrame'): void | 63| media.AVPlayer | off(type: 'speedDone'): void | 64| media.AVPlayer | off(type: 'seekDone'): void | 65| media.AVPlayer | off(type: 'error'): void | 66| media.AVPlayer | off(type: 'endOfStream'): void | 67| media.AVPlayer | off(type: 'durationUpdate'): void | 68| media.AVPlayer | off(type: 'bufferingUpdate'): void | 69| media.AVPlayer | off(type: 'bitrateDone'): void | 70| media.AVPlayer | off(type: 'availableBitrates'): void | 71| media.AVPlayer | off(type: 'audioInterrupt'): void | 72| media.AVPlayer | loop: boolean | 73| media.AVPlayer | getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void | 74| media.AVPlayer | getTrackDescription() : Promise\<Array\<MediaDescription>> | 75| media.AVPlayer | fdSrc ?: AVFileDescriptor | 76| media.AVPlayer | audioInterruptMode ?: audio.InterruptMode | 77| unnamed | type AVPlayerState = 'idle' \| 'initialized' \| 'prepared' \| 'playing' \| 'paused' \| 'completed' \| 'stopped' \| 'released' \| 'error' | 78 79APIs no longer maintained 80 81| Class | Declaration | 82| ----------------- | ------------------------------------------------------------ | 83| media | createVideoPlayer(callback: AsyncCallback\<VideoPlayer>): void | 84| media | createVideoPlayer() : Promise\<VideoPlayer> | 85| media | createAudioPlayer(): AudioPlayer | 86| media.AudioPlayer | interface AudioPlayer | 87| media.AudioPlayer | play(): void | 88| media.AudioPlayer | release(): void | 89| media.AudioPlayer | audioInterruptMode ?: audio.InterruptMode | 90| media.AudioPlayer | fdSrc: AVFileDescriptor | 91| media.AudioPlayer | seek(timeMs: number): void | 92| media.AudioPlayer | readonly duration: number | 93| media.AudioPlayer | loop: boolean | 94| media.AudioPlayer | readonly state: AudioState | 95| media.AudioPlayer | getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void | 96| media.AudioPlayer | getTrackDescription() : Promise\<Array\<MediaDescription>> | 97| media.AudioPlayer | on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void | 98| media.AudioPlayer | on(type: 'play' \| 'pause' \| 'stop' \| 'reset' \| 'dataLoad' \| 'finish' \| 'volumeChange', callback: () => void): void | 99| media.AudioPlayer | on(type: 'timeUpdate', callback: Callback\<number>): void | 100| media.AudioPlayer | on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void | 101| media.AudioPlayer | on(type: 'error', callback: ErrorCallback): void | 102| media.AudioPlayer | setVolume(vol: number): void | 103| media.AudioPlayer | pause(): void | 104| media.AudioPlayer | readonly currentTime: number | 105| media.AudioPlayer | stop(): void | 106| media.AudioPlayer | reset(): void | 107| media.AudioPlayer | src: string | 108| media.VideoPlayer | interface VideoPlayer | 109| media.VideoPlayer | play(callback: AsyncCallback\<void>): void | 110| media.VideoPlayer | play(): Promise\<void> | 111| media.VideoPlayer | prepare(callback: AsyncCallback\<void>): void | 112| media.VideoPlayer | prepare(): Promise\<void> | 113| media.VideoPlayer | release(callback: AsyncCallback\<void>): void | 114| media.VideoPlayer | release(): Promise\<void> | 115| media.VideoPlayer | audioInterruptMode ?: audio.InterruptMode | 116| media.VideoPlayer | fdSrc: AVFileDescriptor | 117| media.VideoPlayer | seek(timeMs: number, callback: AsyncCallback\<number>): void | 118| media.VideoPlayer | seek(timeMs: number, mode:SeekMode, callback: AsyncCallback\<number>): void | 119| media.VideoPlayer | seek(timeMs: number, mode?:SeekMode): Promise\<number> | 120| media.VideoPlayer | readonly duration: number | 121| media.VideoPlayer | loop: boolean | 122| media.VideoPlayer | videoScaleType ?: VideoScaleType | 123| media.VideoPlayer | readonly state: VideoPlayState | 124| media.VideoPlayer | getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void | 125| media.VideoPlayer | getTrackDescription() : Promise\<Array\<MediaDescription>> | 126| media.VideoPlayer | readonly height: number | 127| media.VideoPlayer | on(type: 'playbackCompleted', callback: Callback\<void>): void | 128| media.VideoPlayer | on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void | 129| media.VideoPlayer | on(type: 'startRenderFrame', callback: Callback\<void>): void | 130| media.VideoPlayer | on(type: 'videoSizeChanged', callback: (width: number, height: number) => void): void | 131| media.VideoPlayer | on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void | 132| media.VideoPlayer | on(type: 'error', callback: ErrorCallback): void | 133| media.VideoPlayer | setDisplaySurface(surfaceId: string, callback: AsyncCallback\<void>): void | 134| media.VideoPlayer | setDisplaySurface(surfaceId: string): Promise\<void> | 135| media.VideoPlayer | setVolume(vol: number, callback: AsyncCallback\<void>): void | 136| media.VideoPlayer | setVolume(vol: number): Promise\<void> | 137| media.VideoPlayer | url: string | 138| media.VideoPlayer | pause(callback: AsyncCallback\<void>): void | 139| media.VideoPlayer | pause(): Promise\<void> | 140| media.VideoPlayer | readonly currentTime: number | 141| media.VideoPlayer | setSpeed(speed:number, callback: AsyncCallback\<number>): void | 142| media.VideoPlayer | setSpeed(speed:number): Promise\<number> | 143| media.VideoPlayer | stop(callback: AsyncCallback\<void>): void | 144| media.VideoPlayer | stop(): Promise\<void> | 145| media.VideoPlayer | readonly width: number | 146| media.VideoPlayer | reset(callback: AsyncCallback\<void>): void | 147| media.VideoPlayer | reset(): Promise\<void> | 148| unnamed | type AudioState = 'idle' \| 'playing' \| 'paused' \| 'stopped' \| 'error' | 149| unnamed | type VideoPlayState = 'idle' \| 'prepared' \| 'playing' \| 'paused' \| 'stopped' \| 'error' | 150 151**Adaptation Guide** 152 153For details, see the [reference](../../../application-dev/reference/apis/js-apis-media.md) for each API. 154 155## cl.media.2 API Change of the Recording Function 156 157Added the [AVRecorder](../../../application-dev/reference/apis/js-apis-media.md#avrecorder9)<sup>9+</sup> API for audio and video recording, with the updated state machine and error codes, which is recommended. The following APIs for audio recording and video recording are no longer maintained: [AudioRecorder](../../../application-dev/reference/apis/js-apis-media.md#audiorecorder)<sup>6+</sup> and [VideoRecorder](../../../application-dev/reference/apis/js-apis-media.md#videorecorder9)<sup>9+</sup>. 158 159The [AudioSourceType](../../../application-dev/reference/apis/js-apis-media.md#audiosourcetype9) and [VideoSourceType](../../../application-dev/reference/apis/js-apis-media.md#videosourcetype9) APIs shared by the old and new recording APIs are changed to non-system APIs. 160 161**Change Impacts** 162 163The [AudioRecorder](../../../application-dev/reference/apis/js-apis-media.md#audiorecorder)<sup>6+</sup> and [VideoRecorder](../../../application-dev/reference/apis/js-apis-media.md#videorecorder9)<sup>9+</sup> APIs can still be used but are no longer maintained. You are advised to use the [AVRecorder](../../../application-dev/reference/apis/js-apis-media.md#avrecorder9)<sup>9+</sup> API instead. 164 165**Key API/Component Changes** 166 167Added APIs 168 169| Class | Declaration | 170| ----------------------- | ------------------------------------------------------------ | 171| media | createAVRecorder(callback: AsyncCallback\<AVRecorder>): void | 172| media | createAVRecorder() : Promise\<AVRecorder> | 173| media.AVRecorder | interface AVRecorder | 174| media.AVRecorder | prepare(config: AVRecorderConfig, callback: AsyncCallback\<void>): void | 175| media.AVRecorder | prepare(config: AVRecorderConfig): Promise\<void> | 176| media.AVRecorder | release(callback: AsyncCallback\<void>): void | 177| media.AVRecorder | release(): Promise\<void> | 178| media.AVRecorder | readonly state: AVRecorderState | 179| media.AVRecorder | on(type: 'stateChange', callback: (state: AVRecorderState, reason: StateChangeReason) => void): void | 180| media.AVRecorder | on(type: 'error', callback: ErrorCallback): void | 181| media.AVRecorder | resume(callback: AsyncCallback\<void>): void | 182| media.AVRecorder | resume(): Promise\<void> | 183| media.AVRecorder | start(callback: AsyncCallback\<void>): void | 184| media.AVRecorder | start(): Promise\<void> | 185| media.AVRecorder | off(type: 'stateChange'): void | 186| media.AVRecorder | off(type: 'error'): void | 187| media.AVRecorder | pause(callback: AsyncCallback\<void>): void | 188| media.AVRecorder | pause(): Promise\<void> | 189| media.AVRecorder | stop(callback: AsyncCallback\<void>): void | 190| media.AVRecorder | stop(): Promise\<void> | 191| media.AVRecorder | reset(callback: AsyncCallback\<void>): void | 192| media.AVRecorder | reset(): Promise\<void> | 193| media.AVRecorder | getInputSurface(callback: AsyncCallback\<string>): void | 194| media.AVRecorder | getInputSurface(): Promise\<string> | 195| media.AVRecorderConfig | videoSourceType?: VideoSourceType | 196| media.AVRecorderConfig | audioSourceType?: AudioSourceType | 197| media.AVRecorderConfig | profile: AVRecorderProfile | 198| media.AVRecorderConfig | rotation?: number | 199| media.AVRecorderConfig | url: string | 200| media.AVRecorderConfig | location?: Location | 201| media.AVRecorderConfig | interface AVRecorderConfig | 202| media.AVRecorderProfile | videoBitrate?: number | 203| media.AVRecorderProfile | videoCodec?: CodecMimeType | 204| media.AVRecorderProfile | audioCodec?: CodecMimeType | 205| media.AVRecorderProfile | videoFrameRate?: number | 206| media.AVRecorderProfile | videoFrameHeight?: number | 207| media.AVRecorderProfile | audioSampleRate?: number | 208| media.AVRecorderProfile | audioBitrate?: number | 209| media.AVRecorderProfile | videoFrameWidth?: number | 210| media.AVRecorderProfile | audioChannels?: number | 211| media.AVRecorderProfile | fileFormat: ContainerFormatType | 212| media.AVRecorderProfile | interface AVRecorderProfile | 213| unnamed | type AVRecorderState = 'idle' \| 'prepared' \| 'started' \| 'paused' \| 'stopped' \| 'released' \| 'error' | 214 215APIs no longer maintained 216 217| Class | Declaration | 218| -------------------------- | ------------------------------------------------------------ | 219| media | createVideoRecorder(callback: AsyncCallback\<VideoRecorder>): void | 220| media | createVideoRecorder(): Promise\<VideoRecorder> | 221| media | createAudioRecorder(): AudioRecorder | 222| media.AudioRecorder | interface AudioRecorder | 223| media.AudioRecorder | prepare(config: AudioRecorderConfig): void | 224| media.AudioRecorder | release(): void | 225| media.AudioRecorder | on(type: 'prepare' \| 'start' \| 'pause' \| 'resume' \| 'stop' \| 'release' \| 'reset', callback: () => void): void | 226| media.AudioRecorder | on(type: 'error', callback: ErrorCallback): void | 227| media.AudioRecorder | resume(): void | 228| media.AudioRecorder | start(): void | 229| media.AudioRecorder | pause(): void | 230| media.AudioRecorder | stop(): void | 231| media.AudioRecorder | reset(): void | 232| media.AudioRecorderConfig | audioSampleRate?: number | 233| media.AudioRecorderConfig | location?: Location | 234| media.AudioRecorderConfig | fileFormat?: ContainerFormatType | 235| media.AudioRecorderConfig | interface AudioRecorderConfig | 236| media.AudioRecorderConfig | audioEncoder?: AudioEncoder | 237| media.AudioRecorderConfig | audioEncodeBitRate?: number | 238| media.AudioRecorderConfig | numberOfChannels?: number | 239| media.AudioRecorderConfig | format?: AudioOutputFormat | 240| media.AudioRecorderConfig | uri: string | 241| media.AudioRecorderConfig | audioEncoderMime?: CodecMimeType | 242| media.VideoRecorder | interface VideoRecorder | 243| media.VideoRecorder | prepare(config: VideoRecorderConfig, callback: AsyncCallback\<void>): void | 244| media.VideoRecorder | prepare(config: VideoRecorderConfig): Promise\<void> | 245| media.VideoRecorder | release(callback: AsyncCallback\<void>): void | 246| media.VideoRecorder | release(): Promise\<void> | 247| media.VideoRecorder | readonly state: VideoRecordState | 248| media.VideoRecorder | on(type: 'error', callback: ErrorCallback): void | 249| media.VideoRecorder | resume(callback: AsyncCallback\<void>): void | 250| media.VideoRecorder | resume(): Promise\<void> | 251| media.VideoRecorder | start(callback: AsyncCallback\<void>): void | 252| media.VideoRecorder | start(): Promise\<void> | 253| media.VideoRecorder | pause(callback: AsyncCallback\<void>): void | 254| media.VideoRecorder | pause(): Promise\<void> | 255| media.VideoRecorder | stop(callback: AsyncCallback\<void>): void | 256| media.VideoRecorder | stop(): Promise\<void> | 257| media.VideoRecorder | reset(callback: AsyncCallback\<void>): void | 258| media.VideoRecorder | reset(): Promise\<void> | 259| media.VideoRecorder | getInputSurface(callback: AsyncCallback\<string>): void | 260| media.VideoRecorder | getInputSurface(): Promise\<string> | 261| media.VideoRecorderConfig | videoSourceType: VideoSourceType | 262| media.VideoRecorderConfig | audioSourceType?: AudioSourceType | 263| media.VideoRecorderConfig | profile: VideoRecorderProfile | 264| media.VideoRecorderConfig | rotation?: number | 265| media.VideoRecorderConfig | url: string | 266| media.VideoRecorderConfig | location?: Location | 267| media.VideoRecorderConfig | interface VideoRecorderConfig | 268| media.VideoRecorderProfile | readonly videoBitrate: number | 269| media.VideoRecorderProfile | readonly videoCodec: CodecMimeType | 270| media.VideoRecorderProfile | readonly audioCodec: CodecMimeType | 271| media.VideoRecorderProfile | readonly videoFrameRate: number | 272| media.VideoRecorderProfile | readonly videoFrameHeight: number | 273| media.VideoRecorderProfile | readonly audioSampleRate: number | 274| media.VideoRecorderProfile | readonly audioBitrate: number | 275| media.VideoRecorderProfile | readonly videoFrameWidth: number | 276| media.VideoRecorderProfile | readonly audioChannels: number | 277| media.VideoRecorderProfile | readonly fileFormat: ContainerFormatType | 278| media.VideoRecorderProfile | interface VideoRecorderProfile | 279| unnamed | type VideoRecordState = 'idle' \| 'prepared' \| 'playing' \| 'paused' \| 'stopped' \| 'error' | 280 281Changed APIs 282 283| Class | Declaration | Capability Before Change | Capability After Change | Whether a System API Before Change| Whether a System API After Change| 284| --------------------- | ------------------------------------------------------------ | ----------------------------------------------- | -------------------------------------------- | -------------------- | -------------------- | 285| media.AudioSourceType | enum AudioSourceType { /** * default audio source type. * @since 9 * @syscap SystemCapability.Multimedia.Media.AVRecorder */ AUDIO_SOURCE_TYPE_DEFAULT = 0, /** * source type mic. * @since 9 * @syscap SystemCapability.Multimedia.Media.AVRecorder */ AUDIO_SOURCE_TYPE_MIC = 1, } | SystemCapability.Multimedia.Media.VideoRecorder | SystemCapability.Multimedia.Media.AVRecorder | Yes | No | 286| media.VideoSourceType | enum VideoSourceType { /** * surface raw data. * @since 9 * @syscap SystemCapability.Multimedia.Media.AVRecorder */ VIDEO_SOURCE_TYPE_SURFACE_YUV = 0, /** * surface ES data. * @since 9 * @syscap SystemCapability.Multimedia.Media.AVRecorder */ VIDEO_SOURCE_TYPE_SURFACE_ES = 1, } | SystemCapability.Multimedia.Media.VideoRecorder | SystemCapability.Multimedia.Media.AVRecorder | Yes | No | 287 288**Adaptation Guide** 289 290For details, see the [reference](../../../application-dev/reference/apis/js-apis-media.md) for each API. 291 292## cl.media.3 Error Code Change 293 294Added the standard error code enumeration type [AVErrorCode9](../../../application-dev/reference/apis/js-apis-media.md#averrorcode)<sup>9+</sup> that replaces the original error code enumeration type [MediaErrorCode](../../../application-dev/reference/apis/js-apis-media.md#mediaerrorcode)<sup>8+</sup>. 295 296**Change Impacts** 297 298The error code enumeration type [MediaErrorCode](../../../application-dev/reference/apis/js-apis-media.md#mediaerrorcode)<sup>8+</sup> is still used for original APIs. [AVErrorCode9](../../../application-dev/reference/apis/js-apis-media.md#averrorcode)<sup>9+</sup> is used for newly added APIs. 299 300**Key API/Component Changes** 301 302Added API 303 304| Class | Declaration | 305| ----------------- | ------------------------------------------------------------ | 306| media.AVErrorCode | enum AVErrorCode { /** * operation success. * @since 9 * @syscap SystemCapability.Multimedia.Media.Core */ AVERR_OK = 0, /** * permission denied. * @since 9 * @syscap SystemCapability.Multimedia.Media.Core */ AVERR_NO_PERMISSION = 201, /** * invalid parameter. * @since 9 * @syscap SystemCapability.Multimedia.Media.Core */ AVERR_INVALID_PARAMETER = 401, /** * the api is not supported in the current version * @since 9 * @syscap SystemCapability.Multimedia.Media.Core */ AVERR_UNSUPPORT_CAPABILITY = 801, /** * the system memory is insufficient or the number of services reaches the upper limit * @since 9 * @syscap SystemCapability.Multimedia.Media.Core */ AVERR_NO_MEMORY = 5400101, /** * current status does not allow or do not have permission to perform this operation * @since 9 * @syscap SystemCapability.Multimedia.Media.Core */ AVERR_OPERATE_NOT_PERMIT = 5400102, /** * data flow exception information * @since 9 * @syscap SystemCapability.Multimedia.Media.Core */ AVERR_IO = 5400103, /** * system or network response timeout. * @since 9 * @syscap SystemCapability.Multimedia.Media.Core */ AVERR_TIMEOUT = 5400104, /** * service process died. * @since 9 * @syscap SystemCapability.Multimedia.Media.Core */ AVERR_SERVICE_DIED = 5400105, /** * unsupported media format * @since 9 * @syscap SystemCapability.Multimedia.Media.Core */ AVERR_UNSUPPORT_FORMAT = 5400106, } | 307 308API no longer maintained 309 310| Class | Declaration | 311| -------------------- | ------------------------------------------------------------ | 312| media.MediaErrorCode | enum MediaErrorCode { /** * operation success. * @since 8 * @syscap SystemCapability.Multimedia.Media.Core */ MSERR_OK = 0, /** * malloc or new memory failed. maybe system have no memory. * @since 8 * @syscap SystemCapability.Multimedia.Media.Core */ MSERR_NO_MEMORY = 1, /** * no permission for the operation. * @since 8 * @syscap SystemCapability.Multimedia.Media.Core */ MSERR_OPERATION_NOT_PERMIT = 2, /** * invalid argument. * @since 8 * @syscap SystemCapability.Multimedia.Media.Core */ MSERR_INVALID_VAL = 3, /** * an I/O error occurred. * @since 8 * @syscap SystemCapability.Multimedia.Media.Core */ MSERR_IO = 4, /** * operation time out. * @since 8 * @syscap SystemCapability.Multimedia.Media.Core */ MSERR_TIMEOUT = 5, /** * unknown error. * @since 8 * @syscap SystemCapability.Multimedia.Media.Core */ MSERR_UNKNOWN = 6, /** * media service died. * @since 8 * @syscap SystemCapability.Multimedia.Media.Core */ MSERR_SERVICE_DIED = 7, /** * operation is not permit in current state. * @since 8 * @syscap SystemCapability.Multimedia.Media.Core */ MSERR_INVALID_STATE = 8, /** * operation is not supported in current version. * @since 8 * @syscap SystemCapability.Multimedia.Media.Core */ MSERR_UNSUPPORTED = 9, } | 313 314 <!--no_check-->