From e980450aa7f34f201c643280920350f2dae087d3 Mon Sep 17 00:00:00 2001 From: liqiao49 Date: Tue, 26 Sep 2023 09:35:45 +0800 Subject: [PATCH] add double data session channels for audio Signed-off-by: liqiao49 --- .../av_receiver/include/av_receiver_engine.h | 1 + .../av_receiver/src/av_receiver_engine.cpp | 7 +++++++ .../av_trans_engine/av_sender/include/av_sender_engine.h | 1 + .../av_trans_engine/av_sender/src/av_sender_engine.cpp | 7 +++++++ .../av_transport_input/av_transport_input_filter.cpp | 3 +++ .../av_transport_output/av_transport_output_filter.cpp | 3 +++ .../dsoftbus_input_audio/dsoftbus_input_audio_plugin.cpp | 6 +++++- .../dsoftbus_input_audio/dsoftbus_input_audio_plugin.h | 1 + .../dsoftbus_output_audio_plugin.cpp | 8 ++++++-- .../dsoftbus_output_audio/dsoftbus_output_audio_plugin.h | 1 + av_transport/common/include/av_trans_types.h | 1 + 11 files changed, 36 insertions(+), 3 deletions(-) diff --git a/av_transport/av_trans_engine/av_receiver/include/av_receiver_engine.h b/av_transport/av_trans_engine/av_receiver/include/av_receiver_engine.h index 6b6d6be3..6975b147 100644 --- a/av_transport/av_trans_engine/av_receiver/include/av_receiver_engine.h +++ b/av_transport/av_trans_engine/av_receiver/include/av_receiver_engine.h @@ -98,6 +98,7 @@ private: void SetStopAvSync(const std::string &value); void SetSharedMemoryFd(const std::string &value); void SetEngineReady(const std::string &value); + void SetAudioSessionNameMid(const std::string &value); StateId GetCurrentState() { diff --git a/av_transport/av_trans_engine/av_receiver/src/av_receiver_engine.cpp b/av_transport/av_trans_engine/av_receiver/src/av_receiver_engine.cpp index 71daee5f..b1a3a5c5 100644 --- a/av_transport/av_trans_engine/av_receiver/src/av_receiver_engine.cpp +++ b/av_transport/av_trans_engine/av_receiver/src/av_receiver_engine.cpp @@ -254,6 +254,7 @@ void AVReceiverEngine::RegRespFunMap() funcMap_[AVTransTag::STOP_AV_SYNC] = &AVReceiverEngine::SetStopAvSync; funcMap_[AVTransTag::SHARED_MEMORY_FD] = &AVReceiverEngine::SetSharedMemoryFd; funcMap_[AVTransTag::ENGINE_READY] = &AVReceiverEngine::SetEngineReady; + funcMap_[AVTransTag::AUDIO_SESSION_NAME_MID] = &AVReceiverEngine::SetAudioSessionNameMid; } void AVReceiverEngine::SetVideoWidth(const std::string &value) @@ -378,6 +379,12 @@ void AVReceiverEngine::SetEngineReady(const std::string &value) TRUE_LOG_MSG(ret != DH_AVT_SUCCESS, "SetParameter ENGINE_READY failed"); } +void AVReceiverEngine::SetAudioSessionNameMid(const std::string &value) +{ + avInput_->SetParameter(static_cast(Plugin::Tag::MEDIA_TITLE), value); + AVTRANS_LOGI("SetParameter audio session name mid success,audio session mid name = %s", value.c_str()); +} + int32_t AVReceiverEngine::SendMessage(const std::shared_ptr &message) { TRUE_RETURN_V_MSG_E(message == nullptr, ERR_DH_AVT_INVALID_PARAM, "input message is nullptr."); diff --git a/av_transport/av_trans_engine/av_sender/include/av_sender_engine.h b/av_transport/av_trans_engine/av_sender/include/av_sender_engine.h index be806b87..25c33823 100644 --- a/av_transport/av_trans_engine/av_sender/include/av_sender_engine.h +++ b/av_transport/av_trans_engine/av_sender/include/av_sender_engine.h @@ -98,6 +98,7 @@ private: void SetEngineReady(const std::string &value); void SetEnginePause(const std::string &value); void SetEngineResume(const std::string &value); + void SetAudioSessionNameMid(const std::string &value); StateId GetCurrentState() { diff --git a/av_transport/av_trans_engine/av_sender/src/av_sender_engine.cpp b/av_transport/av_trans_engine/av_sender/src/av_sender_engine.cpp index d8d57abb..553555d5 100644 --- a/av_transport/av_trans_engine/av_sender/src/av_sender_engine.cpp +++ b/av_transport/av_trans_engine/av_sender/src/av_sender_engine.cpp @@ -234,6 +234,7 @@ void AVSenderEngine::RegRespFunMap() funcMap_[AVTransTag::ENGINE_READY] = &AVSenderEngine::SetEngineReady; funcMap_[AVTransTag::ENGINE_PAUSE] = &AVSenderEngine::SetEnginePause; funcMap_[AVTransTag::ENGINE_RESUME] = &AVSenderEngine::SetEngineResume; + funcMap_[AVTransTag::AUDIO_SESSION_NAME_MID] = &AVSenderEngine::SetAudioSessionNameMid; } void AVSenderEngine::SetVideoWidth(const std::string &value) @@ -383,6 +384,12 @@ void AVSenderEngine::SetEngineResume(const std::string &value) TRUE_LOG_MSG(ret != ErrorCode::SUCCESS, "pipeline resume failed"); } +void AVSenderEngine::SetAudioSessionNameMid(const std::string &value) +{ + avOutput_->SetParameter(static_cast(Plugin::Tag::MEDIA_TITLE), value); + AVTRANS_LOGI("SetParameter audio session name mid success,audio session mid name = %s", value.c_str()); +} + int32_t AVSenderEngine::PushData(const std::shared_ptr &buffer) { StateId currentState = GetCurrentState(); diff --git a/av_transport/av_trans_engine/filters/av_transport_input/av_transport_input_filter.cpp b/av_transport/av_trans_engine/filters/av_transport_input/av_transport_input_filter.cpp index e0876194..df8c6d92 100644 --- a/av_transport/av_trans_engine/filters/av_transport_input/av_transport_input_filter.cpp +++ b/av_transport/av_trans_engine/filters/av_transport_input/av_transport_input_filter.cpp @@ -513,6 +513,9 @@ ErrorCode AVInputFilter::SetPluginParams() if (paramsMap_.find(Tag::MEDIA_DESCRIPTION) != paramsMap_.end()) { plugin_->SetParameter(Tag::MEDIA_DESCRIPTION, paramsMap_[Tag::MEDIA_DESCRIPTION]); } + if (paramsMap_.find(Tag::MEDIA_TITLE) != paramsMap_.end()) { + plugin_->SetParameter(Tag::MEDIA_TITLE, paramsMap_[Tag::MEDIA_TITLE]); + } return ErrorCode::SUCCESS; } diff --git a/av_transport/av_trans_engine/filters/av_transport_output/av_transport_output_filter.cpp b/av_transport/av_trans_engine/filters/av_transport_output/av_transport_output_filter.cpp index 4c46b491..b236c8f1 100644 --- a/av_transport/av_trans_engine/filters/av_transport_output/av_transport_output_filter.cpp +++ b/av_transport/av_trans_engine/filters/av_transport_output/av_transport_output_filter.cpp @@ -309,6 +309,9 @@ ErrorCode AVOutputFilter::SetPluginParams() if (paramsMap_.find(Tag::MEDIA_DESCRIPTION) != paramsMap_.end()) { plugin_->SetParameter(Tag::MEDIA_DESCRIPTION, paramsMap_[Tag::MEDIA_DESCRIPTION]); } + if (paramsMap_.find(Tag::MEDIA_TITLE) != paramsMap_.end()) { + plugin_->SetParameter(Tag::MEDIA_TITLE, paramsMap_[Tag::MEDIA_TITLE]); + } if (paramsMap_.find(Tag::AUDIO_CHANNELS) != paramsMap_.end()) { plugin_->SetParameter(Tag::AUDIO_CHANNELS, paramsMap_[Tag::AUDIO_CHANNELS]); } diff --git a/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input_audio/dsoftbus_input_audio_plugin.cpp b/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input_audio/dsoftbus_input_audio_plugin.cpp index b117ba4e..539dd422 100644 --- a/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input_audio/dsoftbus_input_audio_plugin.cpp +++ b/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input_audio/dsoftbus_input_audio_plugin.cpp @@ -65,6 +65,7 @@ Status DsoftbusInputAudioPlugin::Init() AVTRANS_LOGI("Init"); Media::OSAL::ScopedLock lock(operationMutes_); state_ = State::INITIALIZED; + sessionNameMid_ = ""; return Status::OK; } @@ -83,7 +84,7 @@ Status DsoftbusInputAudioPlugin::Prepare() return Status::ERROR_WRONG_STATE; } - sessionName_ = ownerName_ + "_" + RECEIVER_DATA_SESSION_NAME_SUFFIX; + sessionName_ = ownerName_ + "_" + sessionNameMid_ + RECEIVER_DATA_SESSION_NAME_SUFFIX; int32_t ret = SoftbusChannelAdapter::GetInstance().CreateChannelServer(TransName2PkgName(ownerName_), sessionName_); if (ret != DH_AVT_SUCCESS) { AVTRANS_LOGE("Create Session Server failed ret: %d.", ret); @@ -177,6 +178,9 @@ Status DsoftbusInputAudioPlugin::SetParameter(Tag tag, const ValueType &value) if (tag == Tag::MEDIA_DESCRIPTION) { ParseChannelDescription(Plugin::AnyCast(value), ownerName_, peerDevId_); } + if (tag == Tag::MEDIA_TITLE) { + sessionNameMid_ = Plugin::AnyCast(value); + } paramsMap_.insert(std::pair(tag, value)); return Status::OK; } diff --git a/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input_audio/dsoftbus_input_audio_plugin.h b/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input_audio/dsoftbus_input_audio_plugin.h index 0828187e..ae8294cd 100644 --- a/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input_audio/dsoftbus_input_audio_plugin.h +++ b/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input_audio/dsoftbus_input_audio_plugin.h @@ -79,6 +79,7 @@ private: private: std::string ownerName_; std::string sessionName_; + std::string sessionNameMid_; std::string peerDevId_; std::condition_variable dataCond_; std::shared_ptr bufferPopTask_; diff --git a/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output_audio/dsoftbus_output_audio_plugin.cpp b/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output_audio/dsoftbus_output_audio_plugin.cpp index 777232a1..fd97c1dd 100644 --- a/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output_audio/dsoftbus_output_audio_plugin.cpp +++ b/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output_audio/dsoftbus_output_audio_plugin.cpp @@ -65,6 +65,7 @@ Status DsoftbusOutputAudioPlugin::Init() AVTRANS_LOGI("Init."); Media::OSAL::ScopedLock lock(operationMutes_); state_ = State::INITIALIZED; + sessionNameMid_ = ""; return Status::OK; } @@ -83,7 +84,7 @@ Status DsoftbusOutputAudioPlugin::Prepare() return Status::ERROR_WRONG_STATE; } - sessionName_ = ownerName_ + "_" + SENDER_DATA_SESSION_NAME_SUFFIX; + sessionName_ = ownerName_ + "_" + sessionNameMid_ + SENDER_DATA_SESSION_NAME_SUFFIX; int32_t ret = SoftbusChannelAdapter::GetInstance().CreateChannelServer(TransName2PkgName(ownerName_), sessionName_); if (ret != DH_AVT_SUCCESS) { AVTRANS_LOGE("Create Session Server failed ret: %d.", ret); @@ -181,6 +182,9 @@ Status DsoftbusOutputAudioPlugin::SetParameter(Tag tag, const ValueType &value) if (tag == Tag::MEDIA_DESCRIPTION) { ParseChannelDescription(Plugin::AnyCast(value), ownerName_, peerDevId_); } + if (tag == Tag::MEDIA_TITLE) { + sessionNameMid_ = Plugin::AnyCast(value); + } paramsMap_.insert(std::pair(tag, value)); return Status::OK; } @@ -199,7 +203,7 @@ Status DsoftbusOutputAudioPlugin::SetCallback(Callback *cb) Status DsoftbusOutputAudioPlugin::OpenSoftbusChannel() { - std::string peerSessName_ = ownerName_ + "_" + RECEIVER_DATA_SESSION_NAME_SUFFIX; + std::string peerSessName_ = ownerName_ + "_" + sessionNameMid_ + RECEIVER_DATA_SESSION_NAME_SUFFIX; int32_t ret = SoftbusChannelAdapter::GetInstance().OpenSoftbusChannel(sessionName_, peerSessName_, peerDevId_); if ((ret != DH_AVT_SUCCESS) && (ret != ERR_DH_AVT_SESSION_HAS_OPENED)) { AVTRANS_LOGE("Open softbus channel failed ret: %d.", ret); diff --git a/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output_audio/dsoftbus_output_audio_plugin.h b/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output_audio/dsoftbus_output_audio_plugin.h index 77ee3492..18ed3ab0 100644 --- a/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output_audio/dsoftbus_output_audio_plugin.h +++ b/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output_audio/dsoftbus_output_audio_plugin.h @@ -79,6 +79,7 @@ private: private: std::string ownerName_; std::string sessionName_; + std::string sessionNameMid_; std::string peerDevId_; std::condition_variable dataCond_; std::mutex dataQueueMtx_; diff --git a/av_transport/common/include/av_trans_types.h b/av_transport/common/include/av_trans_types.h index 58dc8c68..f3d4edfc 100644 --- a/av_transport/common/include/av_trans_types.h +++ b/av_transport/common/include/av_trans_types.h @@ -124,6 +124,7 @@ enum struct AVTransTag : uint32_t { AUDIO_CONTENT_TYPE, AUDIO_CHANNEL_LAYOUT, AUDIO_BIT_RATE, + AUDIO_SESSION_NAME_MID, /* -------------------- d_video tag -------------------- */ VIDEO_WIDTH = SECTION_D_VIDEO_START + 1, -- Gitee