1 /* 2 * Copyright (c) 2022-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_AVSESSION_INFO_H 17 #define OHOS_AVSESSION_INFO_H 18 19 #include <string> 20 21 #include "avmeta_data.h" 22 #include "avplayback_state.h" 23 #include "avcast_player_state.h" 24 #include "avmedia_description.h" 25 #include "avqueue_item.h" 26 #include "avsession_descriptor.h" 27 #include "key_event.h" 28 #include "want_params.h" 29 /** 30 * @brief Listening events for the creation and destruction of sessions 31 * and the latest session changes. 32 * @since 9 33 */ 34 namespace OHOS::AVSession { 35 using DeathCallback = std::function<void()>; 36 37 class SessionListener { 38 public: 39 /** 40 * @brief Listen for session creation events. 41 * 42 * @param descriptor Session related description callback. 43 * @since 9 44 */ 45 virtual void OnSessionCreate(const AVSessionDescriptor& descriptor) = 0; 46 47 /** 48 * @brief Listen for session release events. 49 * 50 * @param descriptor Session related description callback. 51 * @since 9 52 */ 53 virtual void OnSessionRelease(const AVSessionDescriptor& descriptor) = 0; 54 55 /** 56 * @brief Listen for changes in the latest session. 57 * 58 * @param descriptor Session related description callback. 59 * @since 9 60 */ 61 virtual void OnTopSessionChange(const AVSessionDescriptor& descriptor) = 0; 62 63 /** 64 * @brief Listen for AudioSession verification. 65 * 66 * @param uid Session related uid. 67 * @since 9 68 */ OnAudioSessionChecked(const int32_t uid)69 virtual void OnAudioSessionChecked(const int32_t uid) {}; 70 71 /** 72 * @brief Listen for the event of device discovery. 73 * 74 * @param { OutputDeviceInfo } castOutputDeviceInfo - Discovered device info. 75 * @since 10 76 */ OnDeviceAvailable(const OutputDeviceInfo & castOutputDeviceInfo)77 virtual void OnDeviceAvailable(const OutputDeviceInfo& castOutputDeviceInfo) {}; 78 79 /** 80 * @brief Listen for the event of device offline. 81 * 82 * @param { std::string& } deviceId - Offlined device ID. 83 * @since 10 84 */ OnDeviceOffline(const std::string & deviceId)85 virtual void OnDeviceOffline(const std::string& deviceId) {}; 86 87 /** 88 * @brief Deconstruct SessionListener. 89 * @since 9 90 */ 91 virtual ~SessionListener() = default; 92 }; 93 94 class IAVCastControllerProxyListener { 95 public: 96 virtual void OnCastPlaybackStateChange(const AVPlaybackState& state) = 0; 97 98 virtual void OnMediaItemChange(const AVQueueItem& avQueueItem) = 0; 99 100 virtual void OnPlayNext() = 0; 101 102 virtual void OnPlayPrevious() = 0; 103 104 virtual void OnSeekDone(const int32_t seekNumber) = 0; 105 106 virtual void OnVideoSizeChange(const int32_t width, const int32_t height) = 0; 107 108 virtual void OnPlayerError(const int32_t errorCode, const std::string& errorMsg) = 0; 109 110 virtual void OnEndOfStream(const int32_t isLooping) = 0; 111 112 /** 113 * @brief Deconstruct SessionListener. 114 * @since 9 115 */ 116 virtual ~IAVCastControllerProxyListener() = default; 117 }; 118 119 class AVSessionCallback { 120 public: 121 /** 122 * @brief playback. 123 * @since 9 124 */ 125 virtual void OnPlay() = 0; 126 127 /** 128 * @brief Pause playback. 129 * @since 9 130 */ 131 virtual void OnPause() = 0; 132 133 /** 134 * @brief Stop playback. 135 * @since 9 136 */ 137 virtual void OnStop() = 0; 138 139 /** 140 * @brief play next. 141 * @since 9 142 */ 143 virtual void OnPlayNext() = 0; 144 145 /** 146 * @brief Play the previous song. 147 * @since 9 148 */ 149 virtual void OnPlayPrevious() = 0; 150 151 /** 152 * @brief Fast forward. 153 * @since 9 154 */ 155 virtual void OnFastForward() = 0; 156 157 /** 158 * @brief Fast rewind. 159 * @since 9 160 */ 161 virtual void OnRewind() = 0; 162 163 /** 164 * @brief Seek to the specified time. 165 * 166 * @param time Seek to the specified time 167 * @since 9 168 */ 169 virtual void OnSeek(int64_t time) = 0; 170 171 /** 172 * @brief Set playback speed. 173 * 174 * @param speed The playback speed to be set 175 * @return Whether the playback speed is set successfully 176 * @since 9 177 */ 178 virtual void OnSetSpeed(double speed) = 0; 179 180 /** 181 * @brief Set cycle mode. 182 * 183 * @param mode Cycle mode to be set {@link LoopMode} 184 * @return Whether the cycle mode is set successfully. 185 * @since 9 186 */ 187 virtual void OnSetLoopMode(int32_t loopMode) = 0; 188 189 /** 190 * @brief Whether to collect the current song. 191 * 192 * @param mediald current song id. 193 * @since 9 194 */ 195 virtual void OnToggleFavorite(const std::string& mediald) = 0; 196 197 /** 198 * @brief Listening for Media key events. 199 * 200 * @param keyEvent event callbacks. 201 * @since 9 202 */ 203 virtual void OnMediaKeyEvent(const MMI::KeyEvent& keyEvent) = 0; 204 205 /** 206 * @brief Monitor and play device change events. 207 * 208 * @param connectionState Event callback of device state. 209 * @param outputDeviceInfo Event callback of device information. 210 * @since 9 211 */ 212 virtual void OnOutputDeviceChange(const int32_t connectionState, const OutputDeviceInfo& outputDeviceInfo) = 0; 213 214 /** 215 * @brief Listen for command events. 216 * 217 * @param commonCommand The name of the command to be sent. 218 * @param commandArgs Command packets to be sent 219 * @since 10 220 */ 221 virtual void OnCommonCommand(const std::string& commonCommand, const AAFwk::WantParams& commandArgs) = 0; 222 223 /** 224 * @brief Listen to the change of item in the playlist to be played. 225 * 226 * @param itemId The serial number of the item to be played. 227 * @since 10 228 */ 229 virtual void OnSkipToQueueItem(int32_t itemId) = 0; 230 231 /** 232 * @brief Deconstruct AVSessionCallback. 233 * @since 9 234 */ 235 virtual ~AVSessionCallback() = default; 236 }; 237 238 class AVControllerCallback { 239 public: 240 /** 241 * @brief Session Destroy. 242 * @since 9 243 */ 244 virtual void OnSessionDestroy() = 0; 245 246 /** 247 * @brief Listening session destruction playback status change event. 248 * 249 * @param state Session related description callback. 250 * @since 9 251 */ 252 virtual void OnPlaybackStateChange(const AVPlaybackState& state) = 0; 253 254 /** 255 * @brief Listen for metadata change events. 256 * 257 * @param data Data is the changed metadata. 258 * @since 9 259 */ 260 virtual void OnMetaDataChange(const AVMetaData& data) = 0; 261 262 /** 263 * @brief Listen to the activation status event of the session. 264 * 265 * @param isActive Whether the session is activated. 266 * @since 9 267 */ 268 virtual void OnActiveStateChange(bool isActive) = 0; 269 270 /** 271 * @brief Listen for valid command change events supported by the session. 272 * 273 * @param cmds Collection callback of valid commands. 274 * @since 9 275 */ 276 virtual void OnValidCommandChange(const std::vector<int32_t>& cmds) = 0; 277 278 /** 279 * @brief Monitor and play device change events. 280 * 281 * @param connectionState Event callback of device state. 282 * @param outputDeviceInfo Device related information callback. 283 * @since 9 284 */ 285 virtual void OnOutputDeviceChange(const int32_t connectionState, const OutputDeviceInfo& outputDeviceInfo) = 0; 286 287 /** 288 * @brief Listen for changes in custom events of the session. 289 * 290 * @param event Changed session event name. 291 * @param args Parameters of parts. 292 * @since 9 293 */ 294 virtual void OnSessionEventChange(const std::string& event, const AAFwk::WantParams& args) = 0; 295 296 /** 297 * @brief Session playlist change callback. 298 * 299 * @param items The changed queue items. 300 * @since 10 301 */ 302 virtual void OnQueueItemsChange(const std::vector<AVQueueItem>& items) = 0; 303 304 /** 305 * @brief Session title change callback. 306 * 307 * @param title The changed title. 308 * @since 10 309 */ 310 virtual void OnQueueTitleChange(const std::string& title) = 0; 311 312 /** 313 * @brief Session custom media packet change callback. 314 * 315 * @param extras The changed custom media packet. 316 * @since 10 317 */ 318 virtual void OnExtrasChange(const AAFwk::WantParams& extras) = 0; 319 320 /** 321 * @brief Deconstruct AVControllerCallback. 322 * @since 9 323 */ 324 virtual ~AVControllerCallback() = default; 325 }; 326 327 class AVCastControllerCallback { 328 public: 329 virtual void OnCastPlaybackStateChange(const AVPlaybackState& state) = 0; 330 331 virtual void OnMediaItemChange(const AVQueueItem& avQueueItem) = 0; 332 333 virtual void OnPlayNext() = 0; 334 335 virtual void OnPlayPrevious() = 0; 336 337 virtual void OnSeekDone(const int32_t seekNumber) = 0; 338 339 virtual void OnVideoSizeChange(const int32_t width, const int32_t height) = 0; 340 341 virtual void OnPlayerError(const int32_t errorCode, const std::string& errorMsg) = 0; 342 343 virtual void OnEndOfStream(const int32_t isLooping) = 0; 344 345 /** 346 * @brief Deconstruct AVControllerCallback. 347 * @since 9 348 */ 349 virtual ~AVCastControllerCallback() = default; 350 }; 351 352 class IAVCastSessionStateListener { 353 public: 354 /** 355 * @brief Listen to the change of cast state change. 356 * 357 * @param castHandle The combination of providerId and castId. 358 * @since 9 359 */ 360 virtual void OnCastStateChange(int32_t castState, DeviceInfo deviceInfo) = 0; 361 362 /** 363 * @brief Deconstruct IAVCastSessionStateListener. 364 * @since 10 365 */ 366 virtual ~IAVCastSessionStateListener() = default; 367 }; 368 369 370 struct SessionToken { 371 std::string sessionId; 372 pid_t pid; 373 pid_t uid; 374 }; 375 376 enum SessionDataCategory { 377 SESSION_DATA_CATEGORY_INVALID = -1, 378 SESSION_DATA_META = 0, 379 SESSION_DATA_PLAYBACK_STATE = 1, 380 SESSION_DATA_CONTROL_COMMAND = 2, 381 SESSION_DATA_SET_EVENT = 3, 382 SESSION_DATA_QUEUE_ITEMS = 4, 383 SESSION_DATA_QUEUE_TITLE = 5, 384 SESSION_DATA_COMMON_COMMAND = 6, 385 SESSION_DATA_EXTRAS = 7, 386 SESSION_DATA_CATEGORY_MAX = 8, 387 }; 388 389 enum AVCastCategory { 390 /** 391 * The default cast type "local", media can be routed on the same device, 392 * including internal speakers or audio jacks on the device itself, A2DP devices. 393 * @syscap SystemCapability.Multimedia.AVSession.AVCast 394 * @since 10 395 */ 396 CATEGORY_LOCAL = 0, 397 398 /** 399 * The remote category indicating the media is presenting on a remote device, 400 * the application needs to get an AVCastController to control remote playback. 401 * @syscap SystemCapability.Multimedia.AVSession.AVCast 402 * @since 10 403 */ 404 CATEGORY_REMOTE = 1, 405 }; 406 407 enum ProtocolType { 408 /** 409 * The default cast type "local", media can be routed on the same device, 410 * including internal speakers or audio jacks on the device itself, A2DP devices. 411 * @syscap SystemCapability.Multimedia.AVSession.AVCast 412 * @since 10 413 */ 414 TYPE_LOCAL = 0, 415 416 /** 417 * Cast+ mirror capability 418 * @syscap SystemCapability.Multimedia.AVSession.AVCast 419 * @systemapi 420 * @since 10 421 */ 422 TYPE_CAST_PLUS_MIRROR = 1, 423 424 /** 425 * The Cast+ Stream indicating the media is presenting on a different device 426 * the application need get an AVCastController to control remote playback. 427 * @syscap SystemCapability.Multimedia.AVSession.AVCast 428 * @since 10 429 */ 430 TYPE_CAST_PLUS_STREAM = 2, 431 }; 432 433 /** 434 * Define the device connection state. 435 * @syscap SystemCapability.Multimedia.AVSession.Core 436 * @since 10 437 */ 438 enum ConnectionState { 439 /** 440 * A connection state indicating the device is in the process of connecting. 441 * @syscap SystemCapability.Multimedia.AVSession.Core 442 * @since 10 443 */ 444 STATE_CONNECTING = 0, 445 /** 446 * A connection state indicating the device is connected. 447 * @syscap SystemCapability.Multimedia.AVSession.Core 448 * @since 10 449 */ 450 STATE_CONNECTED = 1, 451 /** 452 * The default connection state indicating the device is disconnected. 453 * @syscap SystemCapability.Multimedia.AVSession.Core 454 * @since 10 455 */ 456 STATE_DISCONNECTED = 6, 457 }; 458 459 enum DeviceType { 460 /** 461 * A device type indicating the route is on internal speakers or audio jacks on the device itself. 462 * @since 10 463 * @syscap SystemCapability.Multimedia.AVSession.Core 464 */ 465 DEVICE_TYPE_LOCAL = 0, 466 /** 467 * A device type indicating the route is on a TV. 468 * @since 10 469 * @syscap SystemCapability.Multimedia.AVSession.AVCast 470 */ 471 DEVICE_TYPE_TV = 2, 472 /** 473 * A device type indicating the route is on a smart speaker. 474 * @since 10 475 * @syscap SystemCapability.Multimedia.AVSession.AVCast 476 */ 477 DEVICE_TYPE_SPEAKER = 3, 478 /** 479 * A device type indicating the route is on a bluetooth device. 480 * @since 10 481 * @syscap SystemCapability.Multimedia.AVSession.Core 482 */ 483 DEVICE_TYPE_BLUETOOTH = 10, 484 }; 485 486 enum CastEngineConnectState { 487 CONNECTING = 0, 488 CONNECTED = 1, 489 PAUSED = 2, 490 PLAYING = 3, 491 DISCONNECTING = 4, 492 DISCONNECTED = 5, 493 STREAM = 6, 494 MIRROR_TO_UI = 7, 495 UI_TO_MIRROR = 8, 496 UICAST = 9, 497 DEVICE_STATE_MAX = 10, 498 }; 499 500 /** 501 * Enumerates ErrorCode types, returns in BusinessError.code. 502 * @enum { number } 503 * @syscap SystemCapability.Multimedia.AVSession.Core 504 * @since 10 505 */ 506 enum AVSessionErrorCode { 507 /** 508 * Session service exception. 509 * @syscap SystemCapability.Multimedia.AVSession.Core 510 * @since 10 511 */ 512 ERR_CODE_SERVICE_EXCEPTION = 6600101, 513 514 /** 515 * The session does not exist 516 * @syscap SystemCapability.Multimedia.AVSession.Core 517 * @since 10 518 */ 519 ERR_CODE_SESSION_NOT_EXIST = 6600102, 520 521 /** 522 * The session controller does not exist. 523 * @syscap SystemCapability.Multimedia.AVSession.Core 524 * @since 10 525 */ 526 ERR_CODE_CONTROLLER_NOT_EXIST = 6600103, 527 528 /** 529 * The remote session connection failed. 530 * @syscap SystemCapability.Multimedia.AVSession.Core 531 * @since 10 532 */ 533 ERR_CODE_REMOTE_CONNECTION_ERR = 6600104, 534 535 /** 536 * Invalid session command. 537 * @syscap SystemCapability.Multimedia.AVSession.Core 538 * @since 10 539 */ 540 ERR_CODE_COMMAND_INVALID = 6600105, 541 542 /** 543 * The session is not activated. 544 * @syscap SystemCapability.Multimedia.AVSession.Core 545 * @since 10 546 */ 547 ERR_CODE_SESSION_INACTIVE = 6600106, 548 549 /** 550 * Too many commands or events. 551 * @syscap SystemCapability.Multimedia.AVSession.Core 552 * @since 10 553 */ 554 ERR_CODE_MESSAGE_OVERLOAD = 6600107, 555 556 /** 557 * Device connecting failed. 558 * @syscap SystemCapability.Multimedia.AVSession.Core 559 * @since 10 560 */ 561 ERR_CODE_DEVICE_CONNECTION_FAILED = 6600108, 562 563 /** 564 * The remote connection is not established. 565 * @syscap SystemCapability.Multimedia.AVSession.Core 566 * @since 10 567 */ 568 ERR_CODE_REMOTE_CONNECTION_NOT_EXIST = 6600109, 569 }; 570 } // namespace OHOS::AVSession 571 #endif // OHOS_AVSESSION_INFO_H 572