};
bool _isValidKeyLength(int keyLen);
-void setConnectionParam(std::string key, std::string value, connectionParam* connectionParam);
-std::string getConnectionParam(const connectionParam& connectionParam, const std::string& key);
+void setConnectionParam(std::string key, std::string value, connectionParam* param);
+std::string getConnectionParam(const connectionParam& param, const std::string& key);
}; // srt
+namespace rtsp {
+ struct connectionParam {
+ std::string certPath;
+ /* auth param could be added after */
+ };
+
+ void setConnectionParam(std::string key, std::string value, connectionParam* param);
+ std::string getConnectionParam(const connectionParam& param, const std::string& key);
+} // rtsp
+
}; // param
} // tizen_media_transporter
void startPipeline() override;
void stopPipeline() override;
+ void setConnection(std::string name, std::string value) override;
+ std::string getConnection(std::string name) override;
+
void setSenderAddress(std::string address) override;
std::string getSenderAddress() override { return _senderAddress; }
static void _decodebinPadAddedCallback(GstElement* decodebin, GstPad* new_pad, gpointer userData);
static void _decodebinNoMorePadsCallback(GstElement* decodebin, gpointer userData);
+ param::rtsp::connectionParam _connectionParam;
std::string _senderAddress;
};
void startPipeline() override;
void stopPipeline() override;
+ void setConnection(std::string name, std::string value) override;
+ std::string getConnection(std::string name) override;
+
void setReceiverAddress(std::string address) override;
std::string getReceiverAddress() override { return _receiverAddress; }
mtprConnectionType type() override { return MTPR_CONNECTION_TYPE_RTSP_SENDER_TO_SERVER; }
private:
+ param::rtsp::connectionParam _connectionParam;
std::string _receiverAddress; // rtsp server address to upload data
+
GstElement* _rtspSink { nullptr };
};
*/
#define MTPR_CONNECTION_PARAM_RIST_SENDER_BUFFER "sender-buffer"
+/**
+ * @brief Definition for certificate path for RTSP TLS
+ * @since_tizen 7.5
+ * @see mtpr_set_connection_param()
+ * @see mtpr_get_connection_param()
+ */
+#define MTPR_CONNECTION_PARAM_RTSP_CERTIFICATE_PATH "cert-path"
+
/**
* @brief Called when an error occurs.
* @details The following error codes can be received:\n
Name: capi-media-transporter
Summary: A Media Transporter library in Tizen Native API
-Version: 1.0.15
+Version: 1.0.16
Release: 0
Group: Multimedia/API
License: Apache-2.0
}
}
-void param::srt::setConnectionParam(std::string key, std::string value, param::srt::connectionParam* connectionParam)
+void param::srt::setConnectionParam(std::string key, std::string value, param::srt::connectionParam* param)
{
SECURE_LOG_INFO("%s : %s", key.c_str(), value.c_str());
LOG_ERROR("invalid srt mode value %d", val);
throw MediaTransporterException(MTPR_ERROR_INVALID_PARAMETER, "invalid srt mode value");
}
- connectionParam->mode = static_cast<connectionMode>(val);
+ param->mode = static_cast<connectionMode>(val);
} else if (key.compare(MTPR_CONNECTION_PARAM_SRT_STREAMID) == 0) {
- connectionParam->streamId = value;
+ param->streamId = value;
} else if (key.compare(MTPR_CONNECTION_PARAM_SRT_PASSPHRASE) == 0) {
if (!value.empty() && (value.length() < SRT_MIN_PASSPHRASE || value.length() > SRT_MAX_PASSPHRASE))
throw MediaTransporterException(MTPR_ERROR_INVALID_PARAMETER, "wrong passphrase");
- connectionParam->passPhrase = value;
+ param->passPhrase = value;
} else if (key.compare(MTPR_CONNECTION_PARAM_SRT_PBKEYLEN) == 0) {
size_t size;
int val = stoi(value, &size);
LOG_ERROR("invalid pbkeylen value %d", val);
throw MediaTransporterException(MTPR_ERROR_INVALID_PARAMETER, "invalid pbkeylen value");
}
- connectionParam->pbKeyLen = static_cast<connectionKeyLength>(val);
+ param->pbKeyLen = static_cast<connectionKeyLength>(val);
} else {
LOG_ERROR("invalid param name %s", key.c_str());
}
}
-std::string param::srt::getConnectionParam(const param::srt::connectionParam& connectionParam, const std::string& key)
+std::string param::srt::getConnectionParam(const param::srt::connectionParam& param, const std::string& key)
{
if (key == MTPR_CONNECTION_PARAM_SRT_STREAMID)
- return connectionParam.streamId;
+ return param.streamId;
if (key == MTPR_CONNECTION_PARAM_SRT_PASSPHRASE)
- return connectionParam.passPhrase;
+ return param.passPhrase;
if (key == MTPR_CONNECTION_PARAM_SRT_PBKEYLEN)
- return std::to_string(static_cast<int>(connectionParam.pbKeyLen));
+ return std::to_string(static_cast<int>(param.pbKeyLen));
if (key == MTPR_CONNECTION_PARAM_SRT_MODE)
- return std::to_string(static_cast<int>(connectionParam.mode));
+ return std::to_string(static_cast<int>(param.mode));
+
+ throw MediaTransporterException(MTPR_ERROR_INVALID_PARAMETER, "invalid param name");
+}
+
+void param::rtsp::setConnectionParam(std::string key, std::string value, param::rtsp::connectionParam* param)
+{
+ try {
+ if (key.compare(MTPR_CONNECTION_PARAM_RTSP_CERTIFICATE_PATH) == 0) {
+ param->certPath = value;
+ } 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");
+ }
+}
+
+std::string param::rtsp::getConnectionParam(const param::rtsp::connectionParam& param, const std::string& key)
+{
+ if (key == MTPR_CONNECTION_PARAM_RTSP_CERTIFICATE_PATH)
+ return param.certPath;
throw MediaTransporterException(MTPR_ERROR_INVALID_PARAMETER, "invalid param name");
}
#include <cassert>
#include <string>
#include <algorithm>
+#include <gst/rtsp/rtsp.h>
#include "MediaTransporterBase.h"
#include "MediaTransporterException.h"
#include "MediaTransporterUtil.h"
using namespace tizen_media_transporter;
+using namespace tizen_media_transporter::param::rtsp;
MediaTransporterReceiverRtsp::MediaTransporterReceiverRtsp()
{
"latency", 10,
NULL);
+ if (!_connectionParam.certPath.empty()) {
+ GError* error = NULL;
+ GTlsDatabase* tlsDatabase = NULL;
+
+ SECURE_LOGD("Cert Path = %s", _connectionParam.certPath.c_str());
+
+ tlsDatabase = g_tls_file_database_new(_connectionParam.certPath.c_str(), &error);
+ if (error) {
+ LOG_ERROR("failed setting tls database: %s", error->message);
+ g_error_free (error);
+
+ throw MediaTransporterException(MTPR_ERROR_INVALID_OPERATION, "failed setting tls db");
+ }
+
+ g_object_set(G_OBJECT(src),
+ "protocols", (GST_RTSP_LOWER_TRANS_TCP | GST_RTSP_LOWER_TRANS_TLS),
+ "tls-database", tlsDatabase, NULL);
+
+ g_clear_object(&tlsDatabase);
+ }
+
gst::_connectAndAppendSignal(&_gst.signals, G_OBJECT(src), "pad-added",
G_CALLBACK(_srcPadAddedCallback), this);
gst::_connectAndAppendSignal(&_gst.signals, G_OBJECT(src), "no-more-pads",
MediaTransporterIni::get().general().timeout);
}
+void MediaTransporterReceiverRtsp::setConnection(std::string name, std::string val)
+{
+ setConnectionParam(name, val, &_connectionParam);
+}
+
+std::string MediaTransporterReceiverRtsp::getConnection(std::string name)
+{
+ return getConnectionParam(_connectionParam, name);
+}
+
void MediaTransporterReceiverRtsp::setSenderAddress(std::string address)
{
_senderAddress = address;
* limitations under the License.
*/
+#include <gst/rtsp/rtsp.h>
+
#include "MediaTransporterBase.h"
#include "MediaTransporterException.h"
#include "MediaTransporterSenderToServerRtsp.h"
#include "MediaTransporterParseIni.h"
using namespace tizen_media_transporter;
+using namespace tizen_media_transporter::param::rtsp;
MediaTransporterSenderToServerRtsp::MediaTransporterSenderToServerRtsp()
{
g_object_set(G_OBJECT(sink),
"location", util::addProtocolPrefix(_receiverAddress, "rtsp").c_str(), NULL);
+ if (!_connectionParam.certPath.empty()) {
+ GError* error = NULL;
+ GTlsDatabase* tlsDatabase = NULL;
+
+ SECURE_LOGD("Cert Path = %s", _connectionParam.certPath.c_str());
+
+ tlsDatabase = g_tls_file_database_new(_connectionParam.certPath.c_str(), &error);
+ if (error) {
+ LOG_ERROR("failed setting tls database: %s", error->message);
+ g_error_free (error);
+
+ throw MediaTransporterException(MTPR_ERROR_INVALID_OPERATION, "failed setting tls db");
+ }
+
+ g_object_set(G_OBJECT(sink),
+ "protocols", (GST_RTSP_LOWER_TRANS_TCP | GST_RTSP_LOWER_TRANS_TLS),
+ "tls-database", tlsDatabase, NULL);
+
+ g_clear_object(&tlsDatabase);
+ }
+
gst_bin_add_many(GST_BIN(_gst.pipeline), mux, sink, NULL);
if (!gst_element_link(mux, sink)) {
LOG_ERROR("failed to gst_element_link()");
MediaTransporterIni::get().general().timeout);
}
+void MediaTransporterSenderToServerRtsp::setConnection(std::string name, std::string val)
+{
+ setConnectionParam(name, val, &_connectionParam);
+}
+
+std::string MediaTransporterSenderToServerRtsp::getConnection(std::string name)
+{
+ return getConnectionParam(_connectionParam, name);
+}
+
void MediaTransporterSenderToServerRtsp::setReceiverAddress(std::string address)
{
_receiverAddress = address;
ASSERT_EQ(ret, MTPR_ERROR_INVALID_PARAMETER);
}
+TEST_F(MediaTransporterTestRtspSenderToServer, set_get_connection_param_p)
+{
+ char* value = NULL;
+ int ret = mtpr_set_connection_param(_mtpr, MTPR_CONNECTION_PARAM_RTSP_CERTIFICATE_PATH, "/tmp/test.pem");
+ ASSERT_EQ(ret, MTPR_ERROR_NONE);
+
+ ret = mtpr_get_connection_param(_mtpr, MTPR_CONNECTION_PARAM_RTSP_CERTIFICATE_PATH, &value);
+ ASSERT_EQ(ret, MTPR_ERROR_NONE);
+ ASSERT_STREQ(value, "/tmp/test.pem");
+ g_free(value);
+}
+
TEST_F(MediaTransporterTestRtspSenderToServer, set_connection_param_n)
{
int ret = MTPR_ERROR_NONE;
ret = mtpr_set_connection_param(_mtpr, MTPR_CONNECTION_PARAM_SRT_MODE, "2");
- ASSERT_EQ(ret, MTPR_ERROR_INVALID_OPERATION);
+ ASSERT_EQ(ret, MTPR_ERROR_INVALID_PARAMETER);
ret = mtpr_set_connection_param(_mtpr, MTPR_CONNECTION_PARAM_RIST_MAX_RTCP_BANDWIDTH, "0.02");
- ASSERT_EQ(ret, MTPR_ERROR_INVALID_OPERATION);
+ ASSERT_EQ(ret, MTPR_ERROR_INVALID_PARAMETER);
}
TEST_F(MediaTransporterTestRtspSenderToServer, get_connection_param_n)
gchar* value = NULL;
ret = mtpr_get_connection_param(_mtpr, MTPR_CONNECTION_PARAM_SRT_MODE, &value);
- ASSERT_EQ(ret, MTPR_ERROR_INVALID_OPERATION);
+ ASSERT_EQ(ret, MTPR_ERROR_INVALID_PARAMETER);
ret = mtpr_get_connection_param(_mtpr, MTPR_CONNECTION_PARAM_RIST_MAX_RTCP_BANDWIDTH, &value);
- ASSERT_EQ(ret, MTPR_ERROR_INVALID_OPERATION);
+ ASSERT_EQ(ret, MTPR_ERROR_INVALID_PARAMETER);
}
// MediaTransporterTestRtspSenderToServerRun