From bc31f9360ce38104c135be4e9c2637268b669834 Mon Sep 17 00:00:00 2001 From: wangshuo <584363327@qq.com> Date: Thu, 20 Jul 2023 15:05:39 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloudapp/ui/CasCloudPhoneActivity.java | 16 ++--- build.gradle | 1 + cloudphone/src/main/cpp/CasCommon.h | 1 + cloudphone/src/main/cpp/CasController.cpp | 70 +++++++++++-------- cloudphone/src/main/cpp/CasController.h | 4 +- 5 files changed, 51 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java index 00c7e40..7d96d77 100644 --- a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java +++ b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java @@ -306,17 +306,15 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl } }); - if (!isSupportH265()) { - if (mMediaConfig == null) { - mMediaConfig = new HashMap(); - } - mMediaConfig.put(FRAME_TYPE, "h264"); + if (mMediaConfig == null || mMediaConfig.size() == 0) { + mMediaConfig = new HashMap(); } - - if (mMediaConfig != null && mMediaConfig.size() != 0) { - mCloudPhone.setMediaConfig(mMediaConfig); + if (isSupportH265()) { + mMediaConfig.put(FRAME_TYPE, "h265"); + } else { + mMediaConfig.put(FRAME_TYPE, "h264"); } - + mCloudPhone.setMediaConfig(mMediaConfig); mCloudPhone.startCloudPhone(this, mFrameLayout, parasMap); } catch (IllegalArgumentException e) { showDialog(getResources().getString(R.string.cas_phone_input_param_invalid)); diff --git a/build.gradle b/build.gradle index 815c69d..79c017c 100644 --- a/build.gradle +++ b/build.gradle @@ -21,6 +21,7 @@ allprojects { repositories { google() jcenter() + maven { url 'https://jitpack.io' } } } diff --git a/cloudphone/src/main/cpp/CasCommon.h b/cloudphone/src/main/cpp/CasCommon.h index 3b75466..7ac8ad2 100644 --- a/cloudphone/src/main/cpp/CasCommon.h +++ b/cloudphone/src/main/cpp/CasCommon.h @@ -75,6 +75,7 @@ enum { CAS_ENCODE_ERROR = 0x1100, CAS_ENGINE_START_FAILED = 0x1101, + CAS_H265_NOT_SUPPORT = 0x1102, CAS_SWITCH_BACKGROUND_SUCCESS = 0x1200, CAS_SWITCH_BACKGROUND_ERROR = 0x1301, diff --git a/cloudphone/src/main/cpp/CasController.cpp b/cloudphone/src/main/cpp/CasController.cpp index 8ea1aed..da8b3bf 100644 --- a/cloudphone/src/main/cpp/CasController.cpp +++ b/cloudphone/src/main/cpp/CasController.cpp @@ -161,10 +161,6 @@ bool CasController::Start(ANativeWindow *nativeWindow, bool isHome) m_clientType = CLIENT_TYPE; m_maxDisconnectDuration = CalcMaxDisconnectDuration(m_conf.backgroundTimeout); - std::string mediaConfigStr = ""; - if (IsValidMediaConfig(m_mediaConfig)) { - mediaConfigStr = CasAppCtrlCmdUtils::MakeCommand(m_mediaConfig, SUB_COMMAND_SEPARATOR); - } if (m_mediaConfig.find(KEY_FRAME_TYPE) != m_mediaConfig.end()) { m_frameType = m_mediaConfig[KEY_FRAME_TYPE] == "h264" ? FrameType::H264 : FrameType::H265; } @@ -178,7 +174,6 @@ bool CasController::Start(ANativeWindow *nativeWindow, bool isHome) res = CreateWorkers(); if (!res) { DestroyWorkers(); - StopDecWorker(false); CloseDataStream(); return false; } @@ -187,29 +182,13 @@ bool CasController::Start(ANativeWindow *nativeWindow, bool isHome) if (!res) { ERR("Failed to build connection"); DestroyWorkers(); - StopDecWorker(false); CloseDataStream(); return false; } StartWorkers(); - std::string startCmd = CMD_START_APP; - map parameters = { { KEY_COMMAND, startCmd }, - { KEY_TICKET, m_ticket }, - { KEY_AUTH_TS, m_authTs }, - { KEY_VERIFY_DATA, m_verifyData }, - { KEY_ENCRYPTED_DATA, m_encryptedData }, - { KEY_SESSION_ID, m_sessionId }, - { KEY_AES_IV, m_aesIv }, - { KEY_SDK_VERSION, m_conf.sdkVersion }, - { KEY_PROTOCOL_VERSION, m_conf.protocolVersion }, - { KEY_CLIENT_TYPE, m_clientType }, - { KEY_MEDIA_CONFIG, mediaConfigStr }, - { KEY_MAX_DISCONNECT_DURATION, m_maxDisconnectDuration } }; - - res = SendCommand(parameters); - if (!res) { + if (!SendStartCmd()) { ERR("Failed to send start command"); return false; } @@ -824,7 +803,7 @@ void CasController::IsNeedRotation(int orientation) } std::lock_guard lockGuard(this->m_decoderLock); - ResetDecoder(); + ResetDecoder(m_isNotifyFirstFrame); ForceIFrame(); m_orientation = orientation; } @@ -960,19 +939,48 @@ void CasController::NotifyFirstVideoFrame() void CasController::OnCmdRecv(int code, string msg) { - NotifyCommand(code, msg); - std::lock_guard lockGuard(this->m_decoderLock); - if (code == CAS_START_SUCCESS) { - m_frameType = msg.find("h265") != string::npos ? FrameType::H265 : FrameType::H264; - ResetDecoder(); - ForceIFrame(); + if (code == CAS_H265_NOT_SUPPORT) { + m_frameType = FrameType::H264; + m_mediaConfig[KEY_FRAME_TYPE] = "h264"; + if (!SendStartCmd()) { + this->SetState(START_FAILURE); + NotifyCommand(CAS_ENGINE_START_FAILED, CasMsgCode::GetMsg(CAS_ENGINE_START_FAILED)); + ERR("Failed to send start command"); + } + } else { + NotifyCommand(code, msg); } } -void CasController::ResetDecoder() +void CasController::ResetDecoder(bool isClearStream) { StopDecWorker(false); - ClearDataStream(); + if (isClearStream) { + ClearDataStream(); + } CreateDecWorker(m_nativeWindow, m_needVideoDecode); StartDecWorker(false); +} + +bool CasController::SendStartCmd() +{ + std::string mediaConfigStr = ""; + if (IsValidMediaConfig(m_mediaConfig)) { + mediaConfigStr = CasAppCtrlCmdUtils::MakeCommand(m_mediaConfig, SUB_COMMAND_SEPARATOR); + } + std::string startCmd = CMD_START_APP; + map parameters = { { KEY_COMMAND, startCmd }, + { KEY_TICKET, m_ticket }, + { KEY_AUTH_TS, m_authTs }, + { KEY_VERIFY_DATA, m_verifyData }, + { KEY_ENCRYPTED_DATA, m_encryptedData }, + { KEY_SESSION_ID, m_sessionId }, + { KEY_AES_IV, m_aesIv }, + { KEY_SDK_VERSION, m_conf.sdkVersion }, + { KEY_PROTOCOL_VERSION, m_conf.protocolVersion }, + { KEY_CLIENT_TYPE, m_clientType }, + { KEY_MEDIA_CONFIG, mediaConfigStr }, + { KEY_MAX_DISCONNECT_DURATION, m_maxDisconnectDuration } }; + + return SendCommand(parameters); } \ No newline at end of file diff --git a/cloudphone/src/main/cpp/CasController.h b/cloudphone/src/main/cpp/CasController.h index 7fbe82a..6698ed3 100644 --- a/cloudphone/src/main/cpp/CasController.h +++ b/cloudphone/src/main/cpp/CasController.h @@ -83,7 +83,9 @@ private: void IsNeedRotation(int orientation); - void ResetDecoder(); + void ResetDecoder(bool isClearStream); + + bool SendStartCmd(); bool CreateWorkers(); -- Gitee From 5a45fa316cf718df7e6dab9366a7d75347a77d66 Mon Sep 17 00:00:00 2001 From: wangshuo <584363327@qq.com> Date: Thu, 20 Jul 2023 20:18:33 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=B5=81=E7=A8=8B-=E5=88=A4=E7=A9=BA=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java index 7d96d77..9f9c3e0 100644 --- a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java +++ b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java @@ -306,7 +306,7 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl } }); - if (mMediaConfig == null || mMediaConfig.size() == 0) { + if (mMediaConfig == null) { mMediaConfig = new HashMap(); } if (isSupportH265()) { -- Gitee