[0.0.9] add srt receiver param 02/280802/7
authorEunhye Choi <eunhae1.choi@samsung.com>
Mon, 5 Sep 2022 08:22:21 +0000 (17:22 +0900)
committerEunhye Choi <eunhae1.choi@samsung.com>
Tue, 6 Sep 2022 05:15:37 +0000 (14:15 +0900)
- add srt connection param for srtsrc in receiver
  as srtsink in sender

Change-Id: I8b8b828dfc2a2952bd8349b223276812fd5b661b

include/MediaTransporterParam.h
include/MediaTransporterReceiverSrt.h
include/MediaTransporterSenderSrt.h
packaging/capi-media-transporter.spec
src/MediaTransporterParam.cpp
src/MediaTransporterReceiverSrt.cpp
src/MediaTransporterSenderSrt.cpp

index 2b508532dc979d95342e9ef1f36a35671ad48659..7c16d7da898f2eae283a17867992807fcd463c71 100644 (file)
@@ -26,23 +26,54 @@ namespace tizen_media_transporter {
 namespace param {
 
 struct videoInfo {
-  int width { -1 };
-  int height { -1 };
-  int frameRate { -1 };
+       int width { -1 };
+       int height { -1 };
+       int frameRate { -1 };
 };
 
 struct audioInfo {
-  int channel { -1 };
-  int rate { -1 };
-  std::string format;
+       int channel { -1 };
+       int rate { -1 };
+       std::string format;
 };
 
 struct encodingInfo {
-  int bitrate = 0;
+       int bitrate { 0 };
 };
 
 void parseSourceParam(bundle* params, videoInfo* vInfo, encodingInfo* eInfo);
 void parseSourceParam(bundle* params, audioInfo* aInfo, encodingInfo * eInfo);
+
+namespace srt {
+
+enum connectionMode {
+       MTPR_CONNECTION_SRT_MODE_NONE = 0,    /**< not connected, default type */
+       MTPR_CONNECTION_SRT_MODE_CALLER,      /**< The mode to send the connection request like a client (default) */
+       MTPR_CONNECTION_SRT_MODE_LISTENER,    /**< The mode to wait for being connected by peer caller */
+       MTPR_CONNECTION_SRT_MODE_RENDEZVOUS,  /**< The mode to support one-to-one only connection */
+};
+
+enum connectionKeyLength {
+       MTPR_CONNECTION_SRT_NO_KEY = 0,       /**< no encryption, default value */
+       MTPR_CONNECTION_SRT_KEY_LEN_0 = 0,    /**< no encryption */
+       MTPR_CONNECTION_SRT_KEY_LEN_16 = 16,  /**< 16 bytes (128-bit) length */
+       MTPR_CONNECTION_SRT_KEY_LEN_24 = 24,  /**< 24 bytes (192-bit) length */
+       MTPR_CONNECTION_SRT_KEY_LEN_32 = 32,  /**< 32 bytes (256-bit) length */
+};
+
+struct connectionParam {
+       connectionMode mode { MTPR_CONNECTION_SRT_MODE_NONE };
+       std::string streamId;
+       std::string passPhrase;
+       connectionKeyLength pbKeyLen { MTPR_CONNECTION_SRT_NO_KEY };
+};
+
+bool _isValidKeyLength(int keyLen);
+void setConnectionParam(std::string key, std::string value, connectionParam* connectionParam);
+void setConnectionParamList(bundle* paramList, connectionParam* connectionParam);
+void getConnectionParamList(const connectionParam& connectionParam, bundle* paramList);
+}; // srt
+
 }; // param
 
 } // tizen_media_transporter
index fee33265508a3c331e0f64e26449788c90860f57..c7663525f6a8e2f3738992d8b154c0a416787a7b 100644 (file)
@@ -25,6 +25,7 @@
 #include "MediaTransporterBase.h"
 #include "MediaTransporterReceiver.h"
 #include "MediaTransporterGst.h"
+#include "MediaTransporterParam.h"
 
 namespace tizen_media_transporter {
 
@@ -38,9 +39,9 @@ public:
        void startPipeline() override;
        void stopPipeline() override;
 
-       void setConnection(std::string name, std::string value) override {}
-       void setConnection(bundle* params) override {}
-       void getConnection(bundle* params) override {}
+       void setConnection(std::string name, std::string value) override;
+       void setConnection(bundle* paramList) override;
+       void getConnection(bundle* paramList) override;
 
        void setSenderAddress(std::string address) override;
        std::string getSenderAddress() override { return _senderAddress; }
@@ -51,6 +52,7 @@ private:
        static void _demuxPadAddedCallback(GstElement* demux, GstPad* new_pad, gpointer userData);
        static void _demuxNoMorePadsCallback(GstElement* demux, gpointer userData);
 
+       param::srt::connectionParam _connectionParam;
        std::string _senderAddress;
 };
 
index eec4b558778b6574448208ad4752bf52ad398b46..08534d75842e8d05f949b65691957d627ef096ef 100644 (file)
@@ -24,6 +24,7 @@
 #include "MediaTransporter.h"
 #include "MediaTransporterSender.h"
 #include "MediaTransporterGst.h"
+#include "MediaTransporterParam.h"
 
 namespace tizen_media_transporter {
 
@@ -38,8 +39,8 @@ public:
        void stopPipeline() override;
 
        void setConnection(std::string name, std::string value) override;
-       void setConnection(bundle* params) override;
-       void getConnection(bundle* params) override;
+       void setConnection(bundle* paramList) override;
+       void getConnection(bundle* paramList) override;
 
        void setSenderAddress(std::string address) override;
        std::string getSenderAddress() override { return _senderAddress; }
@@ -47,32 +48,7 @@ public:
        mtprConnectionType type() override { return MTPR_CONNECTION_TYPE_SRT_SENDER; }
 
 private:
-       bool _isValidKeyLength(int val);
-
-       enum connectionMode {
-               MTPR_CONNECTION_SRT_MODE_NONE = 0,    /**< not connected, default type */
-               MTPR_CONNECTION_SRT_MODE_CALLER,      /**< The mode to send the connection request like a client (default) */
-               MTPR_CONNECTION_SRT_MODE_LISTENER,    /**< The mode to wait for being connected by peer caller */
-               MTPR_CONNECTION_SRT_MODE_RENDEZVOUS,  /**< The mode to support one-to-one only connection */
-       };
-
-       enum connectionKeyLength {
-               MTPR_CONNECTION_SRT_NO_KEY = 0,       /**< no encryption, default value */
-               MTPR_CONNECTION_SRT_KEY_LEN_0 = 0,    /**< no encryption */
-               MTPR_CONNECTION_SRT_KEY_LEN_16 = 16,  /**< 16 bytes (128-bit) length */
-               MTPR_CONNECTION_SRT_KEY_LEN_24 = 24,  /**< 24 bytes (192-bit) length */
-               MTPR_CONNECTION_SRT_KEY_LEN_32 = 32,  /**< 32 bytes (256-bit) length */
-       };
-
-       struct MtprConnectionParamSrt {
-               connectionMode mode = MTPR_CONNECTION_SRT_MODE_NONE;
-               std::string streamId;
-               std::string passPhrase;
-               connectionKeyLength pbKeyLen = MTPR_CONNECTION_SRT_NO_KEY;
-       };
-
-       MtprConnectionParamSrt _connectionParam;
-
+       param::srt::connectionParam _connectionParam;
        std::string _senderAddress;
 
        GstElement* _srtSink { nullptr };
index 50ff5b24e4a3ced9acfa3ede1fd29cc4223d042b..da6b952654a0bc28db7fb2b0746069389423fa2e 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-transporter
 Summary:    A Media Transporter library in Tizen Native API
-Version:    0.0.8
+Version:    0.0.9
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 2d06476148469919c6fcf20bee1a36c157b96649..047fc6abb61be7172227a7f17b47dc52cb753926 100644 (file)
@@ -23,6 +23,7 @@
 #include "MediaTransporterLog.h"
 
 using namespace tizen_media_transporter;
+using namespace tizen_media_transporter::param::srt;
 
 void param::parseSourceParam(bundle* params, param::videoInfo* vInfo, param::encodingInfo* eInfo)
 {
@@ -100,3 +101,91 @@ void param::parseSourceParam(bundle* params, param::audioInfo* aInfo, param::enc
        if (written_count == 0)
                throw MediaTransporterException(MTPR_ERROR_INVALID_OPERATION, "Failed to parse Source Param");
 }
+
+bool param::srt::_isValidKeyLength(int keyLen)
+{
+       switch (keyLen)
+       {
+       case MTPR_CONNECTION_SRT_NO_KEY:
+       case MTPR_CONNECTION_SRT_KEY_LEN_16:
+       case MTPR_CONNECTION_SRT_KEY_LEN_24:
+       case MTPR_CONNECTION_SRT_KEY_LEN_32:
+               return true;
+       default:
+               return false;
+       }
+}
+
+void param::srt::setConnectionParam(std::string key, std::string value, param::srt::connectionParam* connectionParam)
+{
+       SECURE_LOG_INFO("%s : %s", key.c_str(), value.c_str());
+
+       try {
+               if (key.compare(MTPR_CONNECTION_PARAM_SRT_MODE) == 0) {
+                       size_t size;
+                       int val = stoi(value, &size);
+                       if ((value.size() != size) ||
+                               (val < MTPR_CONNECTION_SRT_MODE_NONE) || (val > MTPR_CONNECTION_SRT_MODE_RENDEZVOUS)) {
+                               LOG_ERROR("invalid srt mode value %d", val);
+                               throw MediaTransporterException(MTPR_ERROR_INVALID_PARAMETER, "invalid srt mode value");
+                       }
+                       connectionParam->mode = static_cast<connectionMode>(val);
+
+               } else if (key.compare(MTPR_CONNECTION_PARAM_SRT_STREAMID) == 0) {
+                       connectionParam->streamId = value;
+
+               } else if (key.compare(MTPR_CONNECTION_PARAM_SRT_PASSPHRASE) == 0) {
+                       connectionParam->passPhrase = value;
+
+               } else if (key.compare(MTPR_CONNECTION_PARAM_SRT_PBKEYLEN) == 0) {
+                       size_t size;
+                       int val = stoi(value, &size);
+                       if (value.size() != size || !_isValidKeyLength(val)) {
+                               LOG_ERROR("invalid pbkeylen value %d", val);
+                               throw MediaTransporterException(MTPR_ERROR_INVALID_PARAMETER, "invalid pbkeylen value");
+                       }
+                       connectionParam->pbKeyLen = static_cast<connectionKeyLength>(val);
+
+               } else {
+                       LOG_ERROR("invalid param name %s", key.c_str());
+                       throw MediaTransporterException(MTPR_ERROR_INVALID_PARAMETER, "invalid param name");
+               }
+       } catch (const std::exception& e) {
+               LOG_ERROR("error : %s, throw invalid param", e.what());
+               throw MediaTransporterException(MTPR_ERROR_INVALID_PARAMETER, "invalid parameter");
+       }
+}
+
+void param::srt::setConnectionParamList(bundle* paramList, param::srt::connectionParam* connectionParam)
+{
+       char* string_val = NULL;
+
+       if (bundle_get_str(paramList, MTPR_CONNECTION_PARAM_SRT_MODE, &string_val) != BUNDLE_ERROR_KEY_NOT_AVAILABLE)
+               setConnectionParam(std::string{MTPR_CONNECTION_PARAM_SRT_MODE}, string_val, connectionParam);
+
+       if (bundle_get_str(paramList, MTPR_CONNECTION_PARAM_SRT_STREAMID, &string_val) != BUNDLE_ERROR_KEY_NOT_AVAILABLE)
+               connectionParam->streamId = string_val;
+
+       if (bundle_get_str(paramList, MTPR_CONNECTION_PARAM_SRT_PASSPHRASE, &string_val) != BUNDLE_ERROR_KEY_NOT_AVAILABLE)
+               connectionParam->passPhrase = string_val;
+
+       if (bundle_get_str(paramList, MTPR_CONNECTION_PARAM_SRT_PBKEYLEN, &string_val) != BUNDLE_ERROR_KEY_NOT_AVAILABLE)
+               setConnectionParam(std::string{MTPR_CONNECTION_PARAM_SRT_PBKEYLEN}, string_val, connectionParam);
+}
+
+void param::srt::getConnectionParamList(const param::srt::connectionParam& connectionParam, bundle *paramList)
+{
+       bundle_add_str(paramList,
+               MTPR_CONNECTION_PARAM_SRT_MODE,
+               std::to_string(static_cast<int>(connectionParam.mode)).c_str());
+
+       if (!connectionParam.streamId.empty())
+               bundle_add_str(paramList, MTPR_CONNECTION_PARAM_SRT_STREAMID, connectionParam.streamId.c_str());
+
+       if (!connectionParam.passPhrase.empty())
+               bundle_add_str(paramList, MTPR_CONNECTION_PARAM_SRT_PASSPHRASE, connectionParam.passPhrase.c_str());
+
+       bundle_add_str(paramList,
+               MTPR_CONNECTION_PARAM_SRT_PBKEYLEN,
+               std::to_string(static_cast<int>(connectionParam.pbKeyLen)).c_str());
+}
index fb8cea8bee2b121287cce2ad609029d670f36437..7d229244296db01f80dcd38819cc029399c72ffa 100644 (file)
@@ -23,6 +23,7 @@
 #include <cassert>
 
 using namespace tizen_media_transporter;
+using namespace tizen_media_transporter::param::srt;
 
 void MediaTransporterReceiverSrt::_demuxNoMorePadsCallback(GstElement *demux, gpointer userData)
 {
@@ -75,6 +76,22 @@ void MediaTransporterReceiverSrt::buildPipeline()
                src = gst::_createElement(gst::DEFAULT_ELEMENT_SRTSRC);
                g_object_set(G_OBJECT(src), "uri", _senderAddress.c_str(), "latency", 10, NULL);
 
+               if (_connectionParam.mode != MTPR_CONNECTION_SRT_MODE_NONE)
+                       g_object_set(G_OBJECT(src),
+                               "mode", static_cast<int>(_connectionParam.mode), NULL);
+
+               if (_connectionParam.pbKeyLen != MTPR_CONNECTION_SRT_NO_KEY)
+                       g_object_set(G_OBJECT(src),
+                               "pbkeylen", static_cast<int>(_connectionParam.pbKeyLen), NULL);
+
+               if (!_connectionParam.passPhrase.empty())
+                       g_object_set(G_OBJECT(src),
+                               "passphrase", _connectionParam.passPhrase.c_str(), NULL);
+
+               if (!_connectionParam.streamId.empty())
+                       g_object_set(G_OBJECT(src),
+                               "streamid", _connectionParam.streamId.c_str(), NULL);
+
                queue = gst::_createElement(gst::DEFAULT_ELEMENT_QUEUE);
 
                tsdemux = gst::_createElement(gst::DEFAULT_ELEMENT_TSDEMUX);
@@ -88,7 +105,6 @@ void MediaTransporterReceiverSrt::buildPipeline()
                gst::_connectAndAppendSignal(&_gst.signals, G_OBJECT(tsdemux), "pad-added", G_CALLBACK(_demuxPadAddedCallback), this);
                gst::_connectAndAppendSignal(&_gst.signals, G_OBJECT(tsdemux), "no-more-pads", G_CALLBACK(_demuxNoMorePadsCallback), this);
                LOG_INFO("linked mux and sink");
-
        } catch (const MediaTransporterException& e) {
                LOG_ERROR("%s", e.what());
 
@@ -112,6 +128,21 @@ void MediaTransporterReceiverSrt::stopPipeline()
                                                        MediaTransporterIni::get().general().timeout);
 }
 
+void MediaTransporterReceiverSrt::setConnection(std::string name, std::string string_val)
+{
+       setConnectionParam(name, string_val, &_connectionParam);
+}
+
+void MediaTransporterReceiverSrt::setConnection(bundle* paramList)
+{
+       setConnectionParamList(paramList, &_connectionParam);
+}
+
+void MediaTransporterReceiverSrt::getConnection(bundle* paramList)
+{
+       getConnectionParamList(_connectionParam, paramList);
+}
+
 void MediaTransporterReceiverSrt::setSenderAddress(std::string address)
 {
        _senderAddress = address;
index 443b9533caf4b3acdeb44a29938c0708ea2a94df..ab00a14f6b63cbff93a0583a14e5fd62c1454c8a 100644 (file)
@@ -24,6 +24,7 @@
 #include "MediaTransporterParseIni.h"
 
 using namespace tizen_media_transporter;
+using namespace tizen_media_transporter::param::srt;
 
 static void __callerAddedCb(GstElement* element, gint socket, GSocketAddress* address, gpointer userData)
 {
@@ -74,11 +75,12 @@ void MediaTransporterSenderSrt::buildPipeline()
                        LOG_ERROR("failed to gst_element_link()");
                        throw MediaTransporterException(MTPR_ERROR_INVALID_OPERATION, "failed to gst_element_link()");
                }
+
                if (_connectionParam.mode != MTPR_CONNECTION_SRT_MODE_NONE)
                        g_object_set(G_OBJECT(sink),
                                "mode", static_cast<int>(_connectionParam.mode), NULL);
 
-               if (!_connectionParam.pbKeyLen != MTPR_CONNECTION_SRT_NO_KEY)
+               if (_connectionParam.pbKeyLen != MTPR_CONNECTION_SRT_NO_KEY)
                        g_object_set(G_OBJECT(sink),
                                "pbkeylen", static_cast<int>(_connectionParam.pbKeyLen), NULL);
 
@@ -95,9 +97,6 @@ void MediaTransporterSenderSrt::buildPipeline()
                gst::_connectAndAppendSignal(&_gst.signals, G_OBJECT(sink), "caller-rejected", G_CALLBACK(__callerRejectedCb), &_gst);
                gst::_connectAndAppendSignal(&_gst.signals, G_OBJECT(sink), "caller-connecting", G_CALLBACK(__callerConnectingCb), &_gst);
 
-               LOG_ERROR("pp %s, ref %d",
-                       GST_ELEMENT_NAME(_gst.pipeline), GST_OBJECT_REFCOUNT_VALUE(_gst.pipeline));
-
                linkMediaSourceToMuxer(mux);
 
                _srtSink = sink;
@@ -126,96 +125,19 @@ void MediaTransporterSenderSrt::stopPipeline()
                                                                MediaTransporterIni::get().general().timeout);
 }
 
-bool MediaTransporterSenderSrt::_isValidKeyLength(int val)
-{
-       switch(val)
-       {
-       case MTPR_CONNECTION_SRT_NO_KEY:
-       case MTPR_CONNECTION_SRT_KEY_LEN_16:
-       case MTPR_CONNECTION_SRT_KEY_LEN_24:
-       case MTPR_CONNECTION_SRT_KEY_LEN_32:
-               return true;
-       default:
-               return false;
-       }
-}
-
 void MediaTransporterSenderSrt::setConnection(std::string name, std::string string_val)
 {
-       SECURE_LOG_INFO("%s : %s", name.c_str(), string_val.c_str());
-
-       try {
-               if (name.compare(MTPR_CONNECTION_PARAM_SRT_MODE) == 0) {
-                       size_t size;
-                       int val = stoi(string_val, &size);
-                       if ((string_val.size() != size) ||
-                               (val < MTPR_CONNECTION_SRT_MODE_NONE) || (val > MTPR_CONNECTION_SRT_MODE_RENDEZVOUS)) {
-                               LOG_ERROR("invalid srt mode value %d", val);
-                               throw MediaTransporterException(MTPR_ERROR_INVALID_PARAMETER, "invalid srt mode value");
-                       }
-                       _connectionParam.mode = static_cast<connectionMode>(val);
-
-               } else if (name.compare(MTPR_CONNECTION_PARAM_SRT_STREAMID) == 0) {
-                       _connectionParam.streamId = string_val;
-
-               } else if (name.compare(MTPR_CONNECTION_PARAM_SRT_PASSPHRASE) == 0) {
-                       _connectionParam.passPhrase = string_val;
-
-               } else if (name.compare(MTPR_CONNECTION_PARAM_SRT_PBKEYLEN) == 0) {
-                       size_t size;
-                       int val = stoi(string_val, &size);
-                       if (string_val.size() != size || !_isValidKeyLength(val)) {
-                               LOG_ERROR("invalid pbkeylen value %d", val);
-                               throw MediaTransporterException(MTPR_ERROR_INVALID_PARAMETER, "invalid pbkeylen value");
-                       }
-                       _connectionParam.pbKeyLen = static_cast<connectionKeyLength>(val);
-
-               } else {
-                       LOG_ERROR("invalid param name %s", name.c_str());
-                       throw MediaTransporterException(MTPR_ERROR_INVALID_PARAMETER, "invalid param name");
-               }
-       } catch (const std::exception& e) {
-               LOG_ERROR("error : %s, throw invalid param", e.what());
-               throw MediaTransporterException(MTPR_ERROR_INVALID_PARAMETER, "invalid parameter");
-       }
+       setConnectionParam(name, string_val, &_connectionParam);
 }
 
-void MediaTransporterSenderSrt::setConnection(bundle* params)
+void MediaTransporterSenderSrt::setConnection(bundle* paramList)
 {
-       char* string_val = NULL;
-
-       if (bundle_get_str(params, MTPR_CONNECTION_PARAM_SRT_MODE, &string_val) != BUNDLE_ERROR_KEY_NOT_AVAILABLE) {
-               setConnection(MTPR_CONNECTION_PARAM_SRT_MODE, string_val);
-       }
-
-       if (bundle_get_str(params, MTPR_CONNECTION_PARAM_SRT_STREAMID, &string_val) != BUNDLE_ERROR_KEY_NOT_AVAILABLE) {
-               _connectionParam.streamId = std::string {string_val};
-       }
-
-       if (bundle_get_str(params, MTPR_CONNECTION_PARAM_SRT_PASSPHRASE, &string_val) != BUNDLE_ERROR_KEY_NOT_AVAILABLE) {
-               _connectionParam.passPhrase = std::string {string_val};
-       }
-
-       if (bundle_get_str(params, MTPR_CONNECTION_PARAM_SRT_PBKEYLEN, &string_val) != BUNDLE_ERROR_KEY_NOT_AVAILABLE) {
-               setConnection(MTPR_CONNECTION_PARAM_SRT_PBKEYLEN, string_val);
-       }
+       setConnectionParamList(paramList, &_connectionParam);
 }
 
-void MediaTransporterSenderSrt::getConnection(bundle* params)
+void MediaTransporterSenderSrt::getConnection(bundle* paramList)
 {
-       bundle_add_str(params,
-               MTPR_CONNECTION_PARAM_SRT_MODE,
-               std::to_string(static_cast<int>(_connectionParam.mode)).c_str());
-
-       if (!_connectionParam.streamId.empty())
-               bundle_add_str(params, MTPR_CONNECTION_PARAM_SRT_STREAMID, _connectionParam.streamId.c_str());
-
-       if (!_connectionParam.passPhrase.empty())
-               bundle_add_str(params, MTPR_CONNECTION_PARAM_SRT_PASSPHRASE, _connectionParam.passPhrase.c_str());
-
-       bundle_add_str(params,
-               MTPR_CONNECTION_PARAM_SRT_PBKEYLEN,
-               std::to_string(static_cast<int>(_connectionParam.pbKeyLen)).c_str());
+       getConnectionParamList(_connectionParam, paramList);
 }
 
 void MediaTransporterSenderSrt::setSenderAddress(std::string address)