1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef OHOS_NAPI_AVCAST_CONTROLLER_CALLBACK_H 17 #define OHOS_NAPI_AVCAST_CONTROLLER_CALLBACK_H 18 19 #include <list> 20 #include "avsession_info.h" 21 #include "avsession_log.h" 22 #include "napi/native_api.h" 23 #include "napi/native_node_api.h" 24 #include "napi_async_callback.h" 25 #include "errors.h" 26 27 namespace OHOS::AVSession { 28 using MSErrCode = ErrCode; 29 class NapiAVCastControllerCallback : public AVCastControllerCallback { 30 public: 31 enum { 32 EVENT_CAST_PLAYBACK_STATE_CHANGE, 33 EVENT_CAST_MEDIA_ITEM_CHANGE, 34 EVENT_CAST_PLAY_NEXT, 35 EVENT_CAST_PLAY_PREVIOUS, 36 EVENT_CAST_SEEK_DONE, 37 EVENT_CAST_VIDEO_SIZE_CHANGE, 38 EVENT_CAST_ERROR, 39 EVENT_CAST_GENERIC_ERR, 40 EVENT_CAST_IO_ERR, 41 EVENT_CAST_PARSING_ERR, 42 EVENT_CAST_DECOD_EERR, 43 EVENT_CAST_RENDER_ERR, 44 EVENT_CAST_DRM_ERR, 45 EVENT_CAST_END_OF_STREAM, 46 EVENT_CAST_PLAY_REQUEST, 47 EVENT_CAST_KEY_REQUEST, 48 EVENT_CAST_VALID_COMMAND_CHANGED, 49 EVENT_CAST_TYPE_MAX, 50 }; 51 52 // bit 28~21 is subsys, bit 20~16 is Module. bit 15~0 is code 53 static constexpr MSErrCode MS_MODULE = 0X01000; 54 static constexpr MSErrCode MS_ERR_OFFSET = ErrCodeOffset(30, MS_MODULE); // 30 is SUBSYS_MULTIMEDIA 55 // media api9 error code 56 enum MediaServiceExtErrCodeAPI9 : ErrCode { 57 MSERR_EXT_API9_OK = 0, // use for determine error 58 MSERR_EXT_API9_NO_PERMISSION = 201, // permission denied (AccessToken). 59 MSERR_EXT_API9_PERMISSION_DENIED = 202, // permission denied (system API). 60 MSERR_EXT_API9_INVALID_PARAMETER = 401, // invalid parameter. 61 MSERR_EXT_API9_UNSUPPORT_CAPABILITY = 801, // unsupport api. 62 MSERR_EXT_API9_NO_MEMORY = 5400101, // no memory. 63 MSERR_EXT_API9_OPERATE_NOT_PERMIT = 5400102, // opertation not be permitted. 64 MSERR_EXT_API9_IO = 5400103, // IO error. 65 MSERR_EXT_API9_TIMEOUT = 5400104, // opertate timeout. 66 MSERR_EXT_API9_SERVICE_DIED = 5400105, // media service died. 67 MSERR_EXT_API9_UNSUPPORT_FORMAT = 5400106, // unsupport format. 68 }; 69 70 // cast api13 error code 71 enum CastExtErrCodeAPI13 : ErrCode { 72 // Generic error 73 CAST_GENERICERR_EXT_API13_UNSPECIFIED = 6611000, 74 CAST_GENERICERR_EXT_API13_REMOTE_ERROR, 75 CAST_GENERICERR_EXT_API13_BEHIND_LIVE_WINDOW, 76 CAST_GENERICERR_EXT_API13_TIMEOUT, 77 CAST_GENERICERR_EXT_API13_FAILED_RUNTIME_CHECK, 78 CAST_GENERICERR_EXT_API13_PLAYER_ERROR = 6611100, 79 CAST_GENERICERR_EXT_API13_SEEK_MODE_UNSUPPORTED, 80 CAST_GENERICERR_EXT_API13_ILLEGAL_SEEK_TARGET, 81 CAST_GENERICERR_EXT_API13_PLAY_MODE_UNSUPPORTED, 82 CAST_GENERICERR_EXT_API13_PLAY_SPEED_UNSUPPORTED, 83 CAST_GENERICERR_EXT_API13_DEVICE_MISSED, 84 CAST_GENERICERR_EXT_API13_INVALID_PARAM, 85 CAST_GENERICERR_EXT_API13_NO_MEMORY, 86 CAST_GENERICERR_EXT_API13_OPERATION_NOT_ALLOWED, 87 // Input/Output errors 88 CAST_IOERR_EXT_API13_UNSPECIFIED = 6612000, 89 CAST_IOERR_EXT_API13_NETWORK_CONNECTION_FAILED, 90 CAST_IOERR_EXT_API13_NETWORK_CONNECTION_TIMEOUT, 91 CAST_IOERR_EXT_API13_INVALID_HTTP_CONTENT_TYPE, 92 CAST_IOERR_EXT_API13_BAD_HTTP_STATUS, 93 CAST_IOERR_EXT_API13_FILE_NOT_FOUND, 94 CAST_IOERR_EXT_API13_NO_PERMISSION, 95 CAST_IOERR_EXT_API13_CLEARTEXT_NOT_PERMITTED, 96 CAST_IOERR_EXT_API13_READ_POSITION_OUT_OF_RANGE, 97 CAST_IOERR_EXT_API13_NO_CONTENTS = 6612100, 98 CAST_IOERR_EXT_API13_READ_ERROR, 99 CAST_IOERR_EXT_API13_CONTENT_BUSY, 100 CAST_IOERR_EXT_API13_CONTENT_EXPIRED, 101 CAST_IOERR_EXT_API13_CONTENT_NON_ALLOWED_USE, 102 CAST_IOERR_EXT_API13_CONTENT_CANNOT_VERIFIED, 103 CAST_IOERR_EXT_API13_CONTENT_EXHAUSTED_ALLOWED_USES, 104 CAST_IOERR_EXT_API13_NETWORK_PACKET_SENDING_FAILURE, 105 // Content parsing errors 106 CAST_PARSINGERR_EXT_API13_UNSPECIFIED = 6613000, 107 CAST_PARSINGERR_EXT_API13_CONTAINER_MALFORMED, 108 CAST_PARSINGERR_EXT_API13_MANIFEST_MALFORMED, 109 CAST_PARSINGERR_EXT_API13_CONTAINER_UNSUPPORTED, 110 CAST_PARSINGERR_EXT_API13_MANIFEST_UNSUPPORTED, 111 // Decoding errors 112 CAST_DECODEERR_EXT_API13_UNSPECIFIED = 6614000, 113 CAST_DECODEERR_EXT_API13_INIT_FAILED, 114 CAST_DECODEERR_EXT_API13_QUERY_FAILED, 115 CAST_DECODEERR_EXT_API13_FAILED, 116 CAST_DECODEERR_EXT_API13_FORMAT_EXCEEDS_CAPABILITIES, 117 CAST_DECODEERR_EXT_API13_FORMAT_UNSUPPORTED, 118 // AudioRender errors 119 CAST_RENDERERR_EXT_API13_UNSPECIFIED = 6615000, 120 CAST_RENDERERR_EXT_API13_INIT_FAILED, 121 CAST_RENDERERR_EXT_API13_WRITE_FAILED, 122 // DRM errors 123 CAST_DRMERR_EXT_API13_UNSPECIFIED = 6616000, 124 CAST_DRMERR_EXT_API13_SCHEME_UNSUPPORTED, 125 CAST_DRMERR_EXT_API13_PROVISIONING_FAILED, 126 CAST_DRMERR_EXT_API13_CONTENT_ERROR, 127 CAST_DRMERR_EXT_API13_LICENSE_ACQUISITION_FAILED, 128 CAST_DRMERR_EXT_API13_DISALLOWED_OPERATION, 129 CAST_DRMERR_EXT_API13_SYSTEM_ERROR, 130 CAST_DRMERR_EXT_API13_DEVICE_REVOKED, 131 CAST_DRMERR_EXT_API13_LICENSE_EXPIRED, 132 CAST_DRMERR_EXT_API13_PROVIDE_KEY_RESPONSE_ERROR = 6616100, 133 }; 134 135 enum MediaServiceErrCode : ErrCode { 136 MSERR_OK = ERR_OK, 137 MSERR_NO_MEMORY = MS_ERR_OFFSET + ENOMEM, // no memory 138 MSERR_INVALID_OPERATION = MS_ERR_OFFSET + ENOSYS, // opertation not be permitted 139 MSERR_INVALID_VAL = MS_ERR_OFFSET + EINVAL, // invalid argument 140 MSERR_UNKNOWN = MS_ERR_OFFSET + 0x200, // unkown error. 141 MSERR_SERVICE_DIED, // media service died 142 MSERR_CREATE_REC_ENGINE_FAILED, // create recorder engine failed. 143 MSERR_CREATE_PLAYER_ENGINE_FAILED, // create player engine failed. 144 MSERR_CREATE_AVMETADATAHELPER_ENGINE_FAILED, // create avmetadatahelper engine failed. 145 MSERR_CREATE_AVCODEC_ENGINE_FAILED, // create avcodec engine failed. 146 MSERR_INVALID_STATE, // the state is not support this operation. 147 MSERR_UNSUPPORT, // unsupport interface. 148 MSERR_UNSUPPORT_AUD_SRC_TYPE, // unsupport audio source type. 149 MSERR_UNSUPPORT_AUD_SAMPLE_RATE, // unsupport audio sample rate. 150 MSERR_UNSUPPORT_AUD_CHANNEL_NUM, // unsupport audio channel. 151 MSERR_UNSUPPORT_AUD_ENC_TYPE, // unsupport audio encoder type. 152 MSERR_UNSUPPORT_AUD_PARAMS, // unsupport audio params(other params). 153 MSERR_UNSUPPORT_VID_SRC_TYPE, // unsupport video source type. 154 MSERR_UNSUPPORT_VID_ENC_TYPE, // unsupport video encoder type. 155 MSERR_UNSUPPORT_VID_PARAMS, // unsupport video params(other params). 156 MSERR_UNSUPPORT_CONTAINER_TYPE, // unsupport container format type. 157 MSERR_UNSUPPORT_PROTOCOL_TYPE, // unsupport protocol type. 158 MSERR_UNSUPPORT_VID_DEC_TYPE, // unsupport video decoder type. 159 MSERR_UNSUPPORT_AUD_DEC_TYPE, // unsupport audio decoder type. 160 MSERR_UNSUPPORT_STREAM, // internal data stream error. 161 MSERR_UNSUPPORT_FILE, // this appears to be a text file. 162 MSERR_UNSUPPORT_SOURCE, // unsupport source type. 163 MSERR_AUD_RENDER_FAILED, // audio render failed. 164 MSERR_AUD_ENC_FAILED, // audio encode failed. 165 MSERR_VID_ENC_FAILED, // video encode failed. 166 MSERR_AUD_DEC_FAILED, // audio decode failed. 167 MSERR_VID_DEC_FAILED, // video decode failed. 168 MSERR_MUXER_FAILED, // stream avmuxer failed. 169 MSERR_DEMUXER_FAILED, // stream demuxer or parser failed. 170 MSERR_OPEN_FILE_FAILED, // open file failed. 171 MSERR_FILE_ACCESS_FAILED, // read or write file failed. 172 MSERR_START_FAILED, // audio/video start failed. 173 MSERR_PAUSE_FAILED, // audio/video pause failed. 174 MSERR_STOP_FAILED, // audio/video stop failed. 175 MSERR_SEEK_FAILED, // audio/video seek failed. 176 MSERR_NETWORK_TIMEOUT, // network timeout. 177 MSERR_NOT_FIND_CONTAINER, // not find a demuxer. 178 MSERR_DATA_SOURCE_IO_ERROR, // media data source IO failed. 179 MSERR_DATA_SOURCE_OBTAIN_MEM_ERROR, // media data source get mem failed. 180 MSERR_DATA_SOURCE_ERROR_UNKNOWN, // media data source error unknow. 181 MSERR_EXTEND_START = MS_ERR_OFFSET + 0xF000, // extend err start. 182 }; 183 184 enum CastErrCode : ErrCode { 185 // Generic error 186 ERROR_CODE_GENERIC_START = 1000, 187 ERROR_CODE_UNSPECIFIED = ERROR_CODE_GENERIC_START, 188 ERROR_CODE_REMOTE_ERROR, 189 ERROR_CODE_BEHIND_LIVE_WINDOW, 190 ERROR_CODE_TIMEOUT, 191 ERROR_CODE_FAILED_RUNTIME_CHECK, 192 ERROR_CODE_PLAYER_ERROR = 1100, 193 ERROR_CODE_SEEK_MODE_UNSUPPORTED, 194 ERROR_CODE_ILLEGAL_SEEK_TARGET, 195 ERROR_CODE_PLAY_MODE_UNSUPPORTED, 196 ERROR_CODE_PLAY_SPEED_UNSUPPORTED, 197 ERROR_CODE_DEVICE_MISSED, 198 ERROR_CODE_INVALID_PARAM, 199 ERROR_CODE_NO_MEMORY, 200 ERROR_OPERATION_NOT_ALLOWED, 201 ERROR_CODE_GENERIC_END = ERROR_OPERATION_NOT_ALLOWED, 202 // Input/Output errors 203 ERROR_CODE_IO_START = 2000, 204 ERROR_CODE_IO_UNSPECIFIED = ERROR_CODE_IO_START, 205 ERROR_CODE_IO_NETWORK_CONNECTION_FAILED, 206 ERROR_CODE_IO_NETWORK_CONNECTION_TIMEOUT, 207 ERROR_CODE_IO_INVALID_HTTP_CONTENT_TYPE, 208 ERROR_CODE_IO_BAD_HTTP_STATUS, 209 ERROR_CODE_IO_FILE_NOT_FOUND, 210 ERROR_CODE_IO_NO_PERMISSION, 211 ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED, 212 ERROR_CODE_IO_READ_POSITION_OUT_OF_RANGE, 213 ERROR_CODE_IO_NO_CONTENTS = 2100, 214 ERROR_CODE_IO_READ_ERROR, 215 ERROR_CODE_IO_CONTENT_BUSY, 216 ERROR_CODE_IO_CONTENT_EXPIRED, 217 ERROR_CODE_IO_CONTENT_NON_ALLOWED_USE, 218 ERROR_CODE_IO_CONTENT_CANNOT_VERIFIED, 219 ERROR_CODE_IO_CONTENT_EXHAUSTED_ALLOWED_USES, 220 ERROR_CODE_IO_NETWORK_PACKET_SENDING_FAILURE, 221 ERROR_CODE_IO_END = ERROR_CODE_IO_NETWORK_PACKET_SENDING_FAILURE, 222 // Content parsing errors 223 ERROR_CODE_PARSING_START = 3000, 224 ERROR_CODE_PARSING_UNSPECIFIED = ERROR_CODE_PARSING_START, 225 ERROR_CODE_PARSING_CONTAINER_MALFORMED, 226 ERROR_CODE_PARSING_MANIFEST_MALFORMED, 227 ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED, 228 ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED, 229 ERROR_CODE_PARSING_END = ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED, 230 // Decoding errors 231 ERROR_CODE_DECODE_START = 4000, 232 ERROR_CODE_DECODE_UNSPECIFIED = ERROR_CODE_DECODE_START, 233 ERROR_CODE_DECODER_INIT_FAILED, 234 ERROR_CODE_DECODER_QUERY_FAILED, 235 ERROR_CODE_DECODING_FAILED, 236 ERROR_CODE_DECODING_FORMAT_EXCEEDS_CAPABILITIES, 237 ERROR_CODE_DECODING_FORMAT_UNSUPPORTED, 238 ERROR_CODE_DECODE_END = ERROR_CODE_DECODING_FORMAT_UNSUPPORTED, 239 // AudioRender errors 240 ERROR_CODE_AUDIO_RENDERS_START = 5000, 241 ERROR_CODE_AUDIO_RENDERS_UNSPECIFIED = ERROR_CODE_AUDIO_RENDERS_START, 242 ERROR_CODE_AUDIO_RENDERS_INIT_FAILED, 243 ERROR_CODE_AUDIO_RENDERS_WRITE_FAILED, 244 ERROR_CODE_AUDIO_RENDERS_END = ERROR_CODE_AUDIO_RENDERS_WRITE_FAILED, 245 // DRM errors 246 ERROR_CODE_DRM_START = 6000, 247 ERROR_CODE_DRM_UNSPECIFIED = ERROR_CODE_DRM_START, 248 ERROR_CODE_DRM_SCHEME_UNSUPPORTED, 249 ERROR_CODE_DRM_PROVISIONING_FAILED, 250 ERROR_CODE_DRM_CONTENT_ERROR, 251 ERROR_CODE_DRM_LICENSE_ACQUISITION_FAILED, 252 ERROR_CODE_DRM_DISALLOWED_OPERATION, 253 ERROR_CODE_DRM_SYSTEM_ERROR, 254 ERROR_CODE_DRM_DEVICE_REVOKED, 255 ERROR_CODE_DRM_LICENSE_EXPIRED, 256 ERROR_CODE_DRM_PROVIDE_KEY_RESPONSE_ERROR, 257 ERROR_CODE_DRM_END = ERROR_CODE_DRM_PROVIDE_KEY_RESPONSE_ERROR, 258 }; 259 260 const std::map<MediaServiceErrCode, std::string> MSERRCODE_INFOS = { 261 {MSERR_OK, "success"}, 262 {MSERR_NO_MEMORY, "no memory"}, 263 {MSERR_INVALID_OPERATION, "operation not be permitted"}, 264 {MSERR_INVALID_VAL, "invalid argument"}, 265 {MSERR_UNKNOWN, "unkown error"}, 266 {MSERR_SERVICE_DIED, "media service died"}, 267 {MSERR_CREATE_REC_ENGINE_FAILED, "create recorder engine failed"}, 268 {MSERR_CREATE_PLAYER_ENGINE_FAILED, "create player engine failed"}, 269 {MSERR_CREATE_AVMETADATAHELPER_ENGINE_FAILED, "create avmetadatahelper engine failed"}, 270 {MSERR_INVALID_STATE, "the state is not support this operation"}, 271 {MSERR_UNSUPPORT, "unsupport interface"}, 272 {MSERR_UNSUPPORT_AUD_SRC_TYPE, "unsupport audio source type"}, 273 {MSERR_UNSUPPORT_AUD_SAMPLE_RATE, "unsupport audio sample rate"}, 274 {MSERR_UNSUPPORT_AUD_CHANNEL_NUM, "unsupport audio channel"}, 275 {MSERR_UNSUPPORT_AUD_ENC_TYPE, "unsupport audio encoder type"}, 276 {MSERR_UNSUPPORT_AUD_PARAMS, "unsupport audio params(other params)"}, 277 {MSERR_UNSUPPORT_VID_SRC_TYPE, "unsupport video source type"}, 278 {MSERR_UNSUPPORT_VID_ENC_TYPE, "unsupport video encoder type"}, 279 {MSERR_UNSUPPORT_VID_PARAMS, "unsupport video params(other params)"}, 280 {MSERR_UNSUPPORT_CONTAINER_TYPE, "unsupport container format type"}, 281 {MSERR_UNSUPPORT_PROTOCOL_TYPE, "unsupport protocol type"}, 282 {MSERR_UNSUPPORT_VID_DEC_TYPE, "unsupport video decoder type"}, 283 {MSERR_UNSUPPORT_AUD_DEC_TYPE, "unsupport audio decoder type"}, 284 {MSERR_UNSUPPORT_STREAM, "internal data stream error"}, 285 {MSERR_UNSUPPORT_FILE, "this appears to be a text file"}, 286 {MSERR_UNSUPPORT_SOURCE, "unsupport source type"}, 287 {MSERR_AUD_ENC_FAILED, "audio encode failed"}, 288 {MSERR_AUD_RENDER_FAILED, "audio render failed"}, 289 {MSERR_VID_ENC_FAILED, "video encode failed"}, 290 {MSERR_AUD_DEC_FAILED, "audio decode failed"}, 291 {MSERR_VID_DEC_FAILED, "video decode failed"}, 292 {MSERR_MUXER_FAILED, "stream avmuxer failed"}, 293 {MSERR_DEMUXER_FAILED, "stream demuxer or parser failed"}, 294 {MSERR_OPEN_FILE_FAILED, "open file failed"}, 295 {MSERR_FILE_ACCESS_FAILED, "read or write file failed"}, 296 {MSERR_START_FAILED, "audio or video start failed"}, 297 {MSERR_PAUSE_FAILED, "audio or video pause failed"}, 298 {MSERR_STOP_FAILED, "audio or video stop failed"}, 299 {MSERR_SEEK_FAILED, "audio or video seek failed"}, 300 {MSERR_NETWORK_TIMEOUT, "network timeout"}, 301 {MSERR_NOT_FIND_CONTAINER, "not find a demuxer"}, 302 {MSERR_EXTEND_START, "extend start error code"}, 303 }; 304 305 // Generic error 306 const std::map<CastErrCode, std::string> CAST_GENERIC_ERRCODE_INFOS = { 307 {ERROR_CODE_UNSPECIFIED, "The error code for cast control is unspecified"}, 308 {ERROR_CODE_REMOTE_ERROR, "An unspecified error occurs in the remote player"}, 309 {ERROR_CODE_BEHIND_LIVE_WINDOW, "The playback position falls behind the live window"}, 310 {ERROR_CODE_TIMEOUT, "The process of cast contorl times out"}, 311 {ERROR_CODE_FAILED_RUNTIME_CHECK, "The runtime check failed"}, 312 {ERROR_CODE_PLAYER_ERROR, "Cross-device data transmission is locked"}, 313 {ERROR_CODE_SEEK_MODE_UNSUPPORTED, "The specified seek mode is not supported"}, 314 {ERROR_CODE_ILLEGAL_SEEK_TARGET, "The position to seek to is out of the range of the media\ 315 asset or the specified seek mode is not supported"}, 316 {ERROR_CODE_PLAY_MODE_UNSUPPORTED, "The specified playback mode is not supported"}, 317 {ERROR_CODE_PLAY_SPEED_UNSUPPORTED, "The specified playback speed is not supported"}, 318 {ERROR_CODE_DEVICE_MISSED, "The action failed because either the media source devce or the\ 319 media sink device has been revoked"}, 320 {ERROR_CODE_INVALID_PARAM, "The parameter is invalid, for example, the url is illegal to play"}, 321 {ERROR_CODE_NO_MEMORY, "Allocation of memory failed"}, 322 {ERROR_OPERATION_NOT_ALLOWED, "Operation is not allowed"}, 323 }; 324 // Input/Output errors 325 const std::map<CastErrCode, std::string> CAST_IO_ERRCODE_INFOS = { 326 {ERROR_CODE_IO_UNSPECIFIED, "An unspecified input/output error occurs"}, 327 {ERROR_CODE_IO_NETWORK_CONNECTION_FAILED, "Network connection failure"}, 328 {ERROR_CODE_IO_NETWORK_CONNECTION_TIMEOUT, "Network timeout"}, 329 {ERROR_CODE_IO_INVALID_HTTP_CONTENT_TYPE, "Invalid \"Content-Type\" HTTP header"}, 330 {ERROR_CODE_IO_BAD_HTTP_STATUS, "The HTTP server returns an unexpected HTTP response status code"}, 331 {ERROR_CODE_IO_FILE_NOT_FOUND, "The file does not exist"}, 332 {ERROR_CODE_IO_NO_PERMISSION, "No permission is granted to perform the IO operation"}, 333 {ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED, "Access to cleartext HTTP traffic is not allowed by the\ 334 app's network security configuration"}, 335 {ERROR_CODE_IO_READ_POSITION_OUT_OF_RANGE, "Reading data out of the data bound"}, 336 {ERROR_CODE_IO_NO_CONTENTS, "The media does not contain any contents that can be played"}, 337 {ERROR_CODE_IO_READ_ERROR, "The media cannot be read, for example, because of dust or scratches"}, 338 {ERROR_CODE_IO_CONTENT_BUSY, "This resource is already in use"}, 339 {ERROR_CODE_IO_CONTENT_EXPIRED, "The content using the validity interval has expired"}, 340 {ERROR_CODE_IO_CONTENT_NON_ALLOWED_USE, "Using the requested content to play is not allowed"}, 341 {ERROR_CODE_IO_CONTENT_CANNOT_VERIFIED, "The use of the allowed content cannot be verified"}, 342 {ERROR_CODE_IO_CONTENT_EXHAUSTED_ALLOWED_USES, "The number of times this content has been used as\ 343 requested has reached the maximum allowed number of uses"}, 344 {ERROR_CODE_IO_NETWORK_PACKET_SENDING_FAILURE, "An error occurs when sending packet from source\ 345 device to sink device"}, 346 }; 347 // Content parsing errors 348 const std::map<CastErrCode, std::string> CAST_PARSING_ERRCODE_INFOS = { 349 {ERROR_CODE_PARSING_UNSPECIFIED, "Unspecified error related to content parsing"}, 350 {ERROR_CODE_PARSING_CONTAINER_MALFORMED, "Parsing error associated with media container format bit\ 351 streams"}, 352 {ERROR_CODE_PARSING_MANIFEST_MALFORMED, "Parsing error associated with the media manifest"}, 353 {ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED, "An error occurs when attempting to extract a file with\ 354 an unsupported media container format"}, 355 {ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED, "Unsupported feature in the media manifest"}, 356 }; 357 // Decoding errors 358 const std::map<CastErrCode, std::string> CAST_DECODE_ERRCODE_INFOS = { 359 {ERROR_CODE_DECODE_UNSPECIFIED, "Unspecified decoding error"}, 360 {ERROR_CODE_DECODER_INIT_FAILED, "Decoder initialization failed"}, 361 {ERROR_CODE_DECODER_QUERY_FAILED, "Decoder query failed"}, 362 {ERROR_CODE_DECODING_FAILED, "Decoding the media samples failed"}, 363 {ERROR_CODE_DECODING_FORMAT_EXCEEDS_CAPABILITIES, "The format of the content to decode exceeds the\ 364 capabilities of the device"}, 365 {ERROR_CODE_DECODING_FORMAT_UNSUPPORTED, "The format of the content to decode is not supported"}, 366 }; 367 // AudioRender errors 368 const std::map<CastErrCode, std::string> CAST_RENDER_ERRCODE_INFOS = { 369 {ERROR_CODE_AUDIO_RENDERS_UNSPECIFIED, "Unspecified errors related to the audio renderer"}, 370 {ERROR_CODE_AUDIO_RENDERS_INIT_FAILED, "Initializing the audio renderer failed"}, 371 {ERROR_CODE_AUDIO_RENDERS_WRITE_FAILED, "The audio renderer fails to write data"}, 372 }; 373 // DRM errors 374 const std::map<CastErrCode, std::string> CAST_DRM_ERRCODE_INFOS = { 375 {ERROR_CODE_DRM_UNSPECIFIED, "Unspecified error related to DRM"}, 376 {ERROR_CODE_DRM_SCHEME_UNSUPPORTED, "The chosen DRM protection scheme is not supported by the device"}, 377 {ERROR_CODE_DRM_PROVISIONING_FAILED, "Device provisioning failed"}, 378 {ERROR_CODE_DRM_CONTENT_ERROR, "The DRM-protected content to play is incompatible"}, 379 {ERROR_CODE_DRM_LICENSE_ACQUISITION_FAILED, "Failed to obtain a license"}, 380 {ERROR_CODE_DRM_DISALLOWED_OPERATION, "The operation is disallowed by the license policy"}, 381 {ERROR_CODE_DRM_SYSTEM_ERROR, "An error occurs in the DRM system"}, 382 {ERROR_CODE_DRM_DEVICE_REVOKED, "The device has revoked DRM privileges"}, 383 {ERROR_CODE_DRM_LICENSE_EXPIRED, "The DRM license being loaded into the open DRM session has expire"}, 384 {ERROR_CODE_DRM_PROVIDE_KEY_RESPONSE_ERROR, "An error occurs when the DRM processes the key response"}, 385 }; 386 387 const std::map<MediaServiceErrCode, MediaServiceExtErrCodeAPI9> MSERRCODE_TO_EXTERRORCODEAPI9 = { 388 {MSERR_OK, MSERR_EXT_API9_OK}, 389 {MSERR_NO_MEMORY, MSERR_EXT_API9_NO_MEMORY}, 390 {MSERR_INVALID_OPERATION, MSERR_EXT_API9_OPERATE_NOT_PERMIT}, 391 {MSERR_INVALID_VAL, MSERR_EXT_API9_INVALID_PARAMETER}, 392 {MSERR_SERVICE_DIED, MSERR_EXT_API9_SERVICE_DIED}, 393 {MSERR_CREATE_REC_ENGINE_FAILED, MSERR_EXT_API9_NO_MEMORY}, 394 {MSERR_CREATE_PLAYER_ENGINE_FAILED, MSERR_EXT_API9_NO_MEMORY}, 395 {MSERR_INVALID_STATE, MSERR_EXT_API9_OPERATE_NOT_PERMIT}, 396 {MSERR_UNSUPPORT, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 397 {MSERR_UNSUPPORT_AUD_SRC_TYPE, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 398 {MSERR_UNSUPPORT_AUD_SAMPLE_RATE, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 399 {MSERR_UNSUPPORT_AUD_CHANNEL_NUM, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 400 {MSERR_UNSUPPORT_AUD_ENC_TYPE, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 401 {MSERR_UNSUPPORT_AUD_PARAMS, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 402 {MSERR_UNSUPPORT_VID_SRC_TYPE, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 403 {MSERR_UNSUPPORT_VID_ENC_TYPE, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 404 {MSERR_UNSUPPORT_VID_PARAMS, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 405 {MSERR_UNSUPPORT_CONTAINER_TYPE, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 406 {MSERR_UNSUPPORT_PROTOCOL_TYPE, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 407 {MSERR_UNSUPPORT_VID_DEC_TYPE, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 408 {MSERR_UNSUPPORT_AUD_DEC_TYPE, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 409 {MSERR_UNSUPPORT_STREAM, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 410 {MSERR_UNSUPPORT_FILE, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 411 {MSERR_UNSUPPORT_SOURCE, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 412 {MSERR_AUD_RENDER_FAILED, MSERR_EXT_API9_IO}, 413 {MSERR_AUD_ENC_FAILED, MSERR_EXT_API9_IO}, 414 {MSERR_VID_ENC_FAILED, MSERR_EXT_API9_IO}, 415 {MSERR_AUD_DEC_FAILED, MSERR_EXT_API9_IO}, 416 {MSERR_VID_DEC_FAILED, MSERR_EXT_API9_IO}, 417 {MSERR_MUXER_FAILED, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 418 {MSERR_DEMUXER_FAILED, MSERR_EXT_API9_UNSUPPORT_FORMAT}, 419 {MSERR_OPEN_FILE_FAILED, MSERR_EXT_API9_IO}, 420 {MSERR_FILE_ACCESS_FAILED, MSERR_EXT_API9_IO}, 421 {MSERR_START_FAILED, MSERR_EXT_API9_OPERATE_NOT_PERMIT}, 422 {MSERR_PAUSE_FAILED, MSERR_EXT_API9_OPERATE_NOT_PERMIT}, 423 {MSERR_STOP_FAILED, MSERR_EXT_API9_OPERATE_NOT_PERMIT}, 424 {MSERR_SEEK_FAILED, MSERR_EXT_API9_OPERATE_NOT_PERMIT}, 425 {MSERR_NETWORK_TIMEOUT, MSERR_EXT_API9_TIMEOUT}, 426 {MSERR_NOT_FIND_CONTAINER, MSERR_EXT_API9_INVALID_PARAMETER}, 427 {MSERR_UNKNOWN, MSERR_EXT_API9_IO}, 428 }; 429 430 const std::map<CastErrCode, CastExtErrCodeAPI13> CASTERRCODE_TO_EXTERRORCODEAPI13 = { 431 // Generic error 432 {ERROR_CODE_UNSPECIFIED, CAST_GENERICERR_EXT_API13_UNSPECIFIED}, 433 {ERROR_CODE_REMOTE_ERROR, CAST_GENERICERR_EXT_API13_REMOTE_ERROR}, 434 {ERROR_CODE_BEHIND_LIVE_WINDOW, CAST_GENERICERR_EXT_API13_BEHIND_LIVE_WINDOW}, 435 {ERROR_CODE_TIMEOUT, CAST_GENERICERR_EXT_API13_TIMEOUT}, 436 {ERROR_CODE_FAILED_RUNTIME_CHECK, CAST_GENERICERR_EXT_API13_FAILED_RUNTIME_CHECK}, 437 {ERROR_CODE_PLAYER_ERROR, CAST_GENERICERR_EXT_API13_PLAYER_ERROR}, 438 {ERROR_CODE_SEEK_MODE_UNSUPPORTED, CAST_GENERICERR_EXT_API13_SEEK_MODE_UNSUPPORTED}, 439 {ERROR_CODE_ILLEGAL_SEEK_TARGET, CAST_GENERICERR_EXT_API13_ILLEGAL_SEEK_TARGET}, 440 {ERROR_CODE_PLAY_MODE_UNSUPPORTED, CAST_GENERICERR_EXT_API13_PLAY_MODE_UNSUPPORTED}, 441 {ERROR_CODE_PLAY_SPEED_UNSUPPORTED, CAST_GENERICERR_EXT_API13_PLAY_SPEED_UNSUPPORTED}, 442 {ERROR_CODE_DEVICE_MISSED, CAST_GENERICERR_EXT_API13_DEVICE_MISSED}, 443 {ERROR_CODE_INVALID_PARAM, CAST_GENERICERR_EXT_API13_INVALID_PARAM}, 444 {ERROR_CODE_NO_MEMORY, CAST_GENERICERR_EXT_API13_NO_MEMORY}, 445 {ERROR_OPERATION_NOT_ALLOWED, CAST_GENERICERR_EXT_API13_OPERATION_NOT_ALLOWED}, 446 // Input/Output errors 447 {ERROR_CODE_IO_UNSPECIFIED, CAST_IOERR_EXT_API13_UNSPECIFIED}, 448 {ERROR_CODE_IO_NETWORK_CONNECTION_FAILED, CAST_IOERR_EXT_API13_NETWORK_CONNECTION_FAILED}, 449 {ERROR_CODE_IO_NETWORK_CONNECTION_TIMEOUT, CAST_IOERR_EXT_API13_NETWORK_CONNECTION_TIMEOUT}, 450 {ERROR_CODE_IO_INVALID_HTTP_CONTENT_TYPE, CAST_IOERR_EXT_API13_INVALID_HTTP_CONTENT_TYPE}, 451 {ERROR_CODE_IO_BAD_HTTP_STATUS, CAST_IOERR_EXT_API13_BAD_HTTP_STATUS}, 452 {ERROR_CODE_IO_FILE_NOT_FOUND, CAST_IOERR_EXT_API13_FILE_NOT_FOUND}, 453 {ERROR_CODE_IO_NO_PERMISSION, CAST_IOERR_EXT_API13_NO_PERMISSION}, 454 {ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED, CAST_IOERR_EXT_API13_CLEARTEXT_NOT_PERMITTED}, 455 {ERROR_CODE_IO_READ_POSITION_OUT_OF_RANGE, CAST_IOERR_EXT_API13_READ_POSITION_OUT_OF_RANGE}, 456 {ERROR_CODE_IO_NO_CONTENTS, CAST_IOERR_EXT_API13_NO_CONTENTS}, 457 {ERROR_CODE_IO_READ_ERROR, CAST_IOERR_EXT_API13_READ_ERROR}, 458 {ERROR_CODE_IO_CONTENT_BUSY, CAST_IOERR_EXT_API13_CONTENT_BUSY}, 459 {ERROR_CODE_IO_CONTENT_EXPIRED, CAST_IOERR_EXT_API13_CONTENT_EXPIRED}, 460 {ERROR_CODE_IO_CONTENT_NON_ALLOWED_USE, CAST_IOERR_EXT_API13_CONTENT_NON_ALLOWED_USE}, 461 {ERROR_CODE_IO_CONTENT_CANNOT_VERIFIED, CAST_IOERR_EXT_API13_CONTENT_CANNOT_VERIFIED}, 462 {ERROR_CODE_IO_CONTENT_EXHAUSTED_ALLOWED_USES, CAST_IOERR_EXT_API13_CONTENT_EXHAUSTED_ALLOWED_USES}, 463 {ERROR_CODE_IO_NETWORK_PACKET_SENDING_FAILURE, CAST_IOERR_EXT_API13_NETWORK_PACKET_SENDING_FAILURE}, 464 // Content parsing errors 465 {ERROR_CODE_PARSING_UNSPECIFIED, CAST_PARSINGERR_EXT_API13_UNSPECIFIED}, 466 {ERROR_CODE_PARSING_CONTAINER_MALFORMED, CAST_PARSINGERR_EXT_API13_CONTAINER_MALFORMED}, 467 {ERROR_CODE_PARSING_MANIFEST_MALFORMED, CAST_PARSINGERR_EXT_API13_MANIFEST_MALFORMED}, 468 {ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED, CAST_PARSINGERR_EXT_API13_CONTAINER_UNSUPPORTED}, 469 {ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED, CAST_PARSINGERR_EXT_API13_MANIFEST_UNSUPPORTED}, 470 // Decoding errors 471 {ERROR_CODE_DECODE_UNSPECIFIED, CAST_DECODEERR_EXT_API13_UNSPECIFIED}, 472 {ERROR_CODE_DECODER_INIT_FAILED, CAST_DECODEERR_EXT_API13_INIT_FAILED}, 473 {ERROR_CODE_DECODER_QUERY_FAILED, CAST_DECODEERR_EXT_API13_QUERY_FAILED}, 474 {ERROR_CODE_DECODING_FAILED, CAST_DECODEERR_EXT_API13_FAILED}, 475 {ERROR_CODE_DECODING_FORMAT_EXCEEDS_CAPABILITIES, CAST_DECODEERR_EXT_API13_FORMAT_EXCEEDS_CAPABILITIES}, 476 {ERROR_CODE_DECODING_FORMAT_UNSUPPORTED, CAST_DECODEERR_EXT_API13_FORMAT_UNSUPPORTED}, 477 // AudioRender errors 478 {ERROR_CODE_AUDIO_RENDERS_UNSPECIFIED, CAST_RENDERERR_EXT_API13_UNSPECIFIED}, 479 {ERROR_CODE_AUDIO_RENDERS_INIT_FAILED, CAST_RENDERERR_EXT_API13_INIT_FAILED}, 480 {ERROR_CODE_AUDIO_RENDERS_WRITE_FAILED, CAST_RENDERERR_EXT_API13_WRITE_FAILED}, 481 // DRM errors 482 {ERROR_CODE_DRM_UNSPECIFIED, CAST_DRMERR_EXT_API13_UNSPECIFIED}, 483 {ERROR_CODE_DRM_SCHEME_UNSUPPORTED, CAST_DRMERR_EXT_API13_SCHEME_UNSUPPORTED}, 484 {ERROR_CODE_DRM_PROVISIONING_FAILED, CAST_DRMERR_EXT_API13_PROVISIONING_FAILED}, 485 {ERROR_CODE_DRM_CONTENT_ERROR, CAST_DRMERR_EXT_API13_CONTENT_ERROR}, 486 {ERROR_CODE_DRM_LICENSE_ACQUISITION_FAILED, CAST_DRMERR_EXT_API13_LICENSE_ACQUISITION_FAILED}, 487 {ERROR_CODE_DRM_DISALLOWED_OPERATION, CAST_DRMERR_EXT_API13_DISALLOWED_OPERATION}, 488 {ERROR_CODE_DRM_SYSTEM_ERROR, CAST_DRMERR_EXT_API13_SYSTEM_ERROR}, 489 {ERROR_CODE_DRM_DEVICE_REVOKED, CAST_DRMERR_EXT_API13_DEVICE_REVOKED}, 490 {ERROR_CODE_DRM_LICENSE_EXPIRED, CAST_DRMERR_EXT_API13_LICENSE_EXPIRED}, 491 {ERROR_CODE_DRM_PROVIDE_KEY_RESPONSE_ERROR, CAST_DRMERR_EXT_API13_PROVIDE_KEY_RESPONSE_ERROR}, 492 }; 493 494 NapiAVCastControllerCallback(); 495 ~NapiAVCastControllerCallback() override; 496 497 void OnCastPlaybackStateChange(const AVPlaybackState& state) override; 498 void OnMediaItemChange(const AVQueueItem& avQueueItem) override; 499 void OnPlayNext() override; 500 void OnPlayPrevious() override; 501 void OnSeekDone(const int32_t seekNumber) override; 502 void OnVideoSizeChange(const int32_t width, const int32_t height) override; 503 void OnPlayerError(const int32_t errorCode, const std::string& errorMsg) override; 504 void OnEndOfStream(const int32_t isLooping) override; 505 void OnPlayRequest(const AVQueueItem& avQueueItem) override; 506 void OnKeyRequest(const std::string &assetId, const std::vector<uint8_t> &keyRequestData) override; 507 void OnCastValidCommandChanged(const std::vector<int32_t>& cmds) override; 508 509 bool IsCallbacksEmpty(int32_t event); 510 511 napi_status AddCallback(napi_env env, int32_t event, napi_value callback); 512 napi_status RemoveCallback(napi_env env, int32_t event, napi_value callback); 513 514 private: 515 void HandleEvent(int32_t event); 516 void HandlePlayerErrorAPI13(const int32_t errorCode, const std::string& errorMsg); 517 518 std::function<bool()> CheckCallbackValid(int32_t event, const std::list<napi_ref>::iterator& ref); 519 520 template<typename T> 521 void HandleEvent(int32_t event, const T& param); 522 523 template<typename T> 524 void HandleEvent(int32_t event, const std::string& firstParam, const T& secondParam); 525 526 template<typename T> 527 void HandleEvent(int32_t event, const int32_t firstParam, const T& secondParam); 528 529 void HandleEvent(int32_t event, const int32_t firstParam, const int32_t secondParam, const int32_t thirdParam); 530 531 void HandleErrorEvent(int32_t event, const int32_t errorCode, const std::string& errorMsg); 532 533 std::mutex lock_; 534 std::shared_ptr<NapiAsyncCallback> asyncCallback_; 535 std::list<napi_ref> callbacks_[EVENT_CAST_TYPE_MAX] {}; 536 std::shared_ptr<bool> isValid_; 537 }; 538 } // namespace OHOS::AVSession 539 #endif // OHOS_NAPI_AVCAST_CONTROLLER_CALLBACK_H 540