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_AVSESSION_SERVER_H 17 #define OHOS_AVSESSION_SERVER_H 18 19 #include <map> 20 #include <mutex> 21 22 #include "json/json.h" 23 #include "app_manager_adapter.h" 24 #include "avcontroller_item.h" 25 #include "avsession_info.h" 26 #include "softbus/softbus_session_server.h" 27 28 namespace OHOS::AVSession { 29 class AVSessionService; 30 class AVControllerObserver; 31 constexpr size_t BUFFER_MAX_SIZE = 1024 * 1024; 32 constexpr size_t DEFAULT_QUALITY = 100; 33 constexpr int64_t DELAY_TIME = 2000; 34 35 class MigrateAVSessionServer : public SessionListener, public SoftbusSessionServer, 36 public std::enable_shared_from_this<MigrateAVSessionServer> { 37 public: MigrateAVSessionServer()38 MigrateAVSessionServer() {} ~MigrateAVSessionServer()39 ~MigrateAVSessionServer() {} 40 41 void OnConnectProxy(const std::string &deviceId) override; 42 void OnDisconnectProxy(const std::string &deviceId) override; 43 int32_t GetCharacteristic() override; 44 void OnBytesReceived(const std::string &deviceId, const std::string &data) override; 45 46 void Init(AVSessionService *ptr); 47 48 void OnSessionCreate(const AVSessionDescriptor &descriptor) override; 49 void OnSessionRelease(const AVSessionDescriptor &descriptor) override; 50 void OnTopSessionChange(const AVSessionDescriptor &descriptor) override; OnAudioSessionChecked(const int32_t uid)51 void OnAudioSessionChecked(const int32_t uid) override {} 52 53 void OnMetaDataChange(const std::string &playerId, const AVMetaData &data); 54 void OnPlaybackStateChanged(const std::string &playerId, const AVPlaybackState &state); 55 void StopObserveControllerChanged(const std::string &deviceId); 56 57 private: 58 std::map<std::string, sptr<AVControllerItem>> playerIdToControllerMap_; 59 std::map<std::string, std::shared_ptr<AVControllerObserver>> playerIdToControllerCallbackMap_; 60 std::list<sptr<AVControllerItem>> sortControllerList_; 61 62 void ObserveControllerChanged(const std::string &deviceId); 63 void CreateController(const std::string &sessionId); 64 void UpdateCache(const std::string &sessionId, sptr<AVControllerItem> avcontroller, 65 std::shared_ptr<AVControllerObserver> callback, bool isAdd); 66 void ClearCacheBySessionId(const std::string &sessionId); 67 void SendRemoteControllerList(const std::string &deviceId); 68 int32_t ConvertStateFromSingleToDouble(int32_t state); 69 70 int32_t GetControllerById(const std::string &sessionId, sptr<AVControllerItem> &controller); 71 72 std::string ConvertControllersToStr(sptr<AVControllerItem> avcontroller); 73 74 Json::Value ConvertControllerToJson(sptr<AVControllerItem> avcontroller); 75 76 Json::Value ConvertMetadataToJson(const AVMetaData &metadata); 77 78 std::string ConvertMetadataInfoToStr(const std::string playerId, int32_t controlCommand, 79 const AVMetaData &metadata); 80 81 std::string RebuildPlayState(const AVPlaybackState &playbackState); 82 void SortControllers(std::list<sptr<AVControllerItem>> avcontrollerList); 83 84 void ProcControlCommand(const std::string &data); 85 void SendCommandProc(const std::string &command, sptr<AVControllerItem> controller); 86 void MediaButtonEventProc(const std::string &command, sptr<AVControllerItem> controller); 87 void CommandWithExtrasProc(int mediaCommand, const std::string &extrasCommand, const std::string &extras, 88 sptr<AVControllerItem> controller); 89 void PlaybackCommandDataProc(int mediaCommand, const std::string &extrasCommand, sptr<AVControllerItem> controller); 90 void SendSpecialKeepaliveData(); 91 std::string GetBundleName(std::string sessionId); 92 bool CompressToJPEG(const AVMetaData &metadata, std::vector<uint8_t> &outputData); 93 void DelaySendMetaData(); 94 95 AVSessionService *servicePtr_ = nullptr; 96 bool isSoftbusConnecting_ = false; 97 std::string deviceId_; 98 std::string topSessionId_; 99 std::recursive_mutex migrateControllerLock_; 100 std::recursive_mutex topSessionLock_; 101 }; 102 103 class AVControllerObserver : public AVControllerCallback { 104 public: AVControllerObserver(const std::string & playerId)105 explicit AVControllerObserver(const std::string &playerId) : playerId_(playerId){}; AVControllerObserver()106 AVControllerObserver() {}; ~AVControllerObserver()107 ~AVControllerObserver() {}; 108 109 void Init(std::weak_ptr<MigrateAVSessionServer> migrateServer); 110 111 void OnSessionDestroy() override; 112 void OnPlaybackStateChange(const AVPlaybackState &state) override; 113 void OnMetaDataChange(const AVMetaData &data) override; OnAVCallMetaDataChange(const AVCallMetaData & avCallMetaData)114 void OnAVCallMetaDataChange(const AVCallMetaData &avCallMetaData) override {} OnAVCallStateChange(const AVCallState & avCallState)115 void OnAVCallStateChange(const AVCallState &avCallState) override {} OnActiveStateChange(bool isActive)116 void OnActiveStateChange(bool isActive) override {} OnValidCommandChange(const std::vector<int32_t> & cmds)117 void OnValidCommandChange(const std::vector<int32_t> &cmds) override {} OnOutputDeviceChange(const int32_t connectionState,const OutputDeviceInfo & outputDeviceInfo)118 void OnOutputDeviceChange(const int32_t connectionState, const OutputDeviceInfo &outputDeviceInfo) override {} OnSessionEventChange(const std::string & event,const AAFwk::WantParams & args)119 void OnSessionEventChange(const std::string &event, const AAFwk::WantParams &args) override {} OnQueueItemsChange(const std::vector<AVQueueItem> & items)120 void OnQueueItemsChange(const std::vector<AVQueueItem> &items) override {} OnQueueTitleChange(const std::string & title)121 void OnQueueTitleChange(const std::string &title) override {} OnExtrasChange(const AAFwk::WantParams & extras)122 void OnExtrasChange(const AAFwk::WantParams &extras) override {} 123 124 private: 125 std::weak_ptr<MigrateAVSessionServer> migrateServer_; 126 std::string playerId_ = ""; 127 }; 128 } // namespace OHOS::AVSession 129 #endif // OHOS_AVSESSION_SERVER_H