• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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