diff --git a/src/Pusher/PusherBase.cpp b/src/Pusher/PusherBase.cpp index 63b2011d..831f62df 100644 --- a/src/Pusher/PusherBase.cpp +++ b/src/Pusher/PusherBase.cpp @@ -20,6 +20,32 @@ using namespace toolkit; namespace mediakit { +static bool checkMediaSourceAndUrlMatch(const MediaSource::Ptr &src, const std::string &url) { + std::string prefix = findSubString(url.data(), NULL, "://"); + + if (strcasecmp("rtsps", prefix.data()) == 0 || strcasecmp("rtsp", prefix.data()) == 0) { + auto rtsp_src = std::dynamic_pointer_cast(src); + if (!rtsp_src) { + return false; + } + } + + if (strcasecmp("rtmp", prefix.data()) == 0 || strcasecmp("rtmps", prefix.data()) == 0) { + auto rtmp_src = std::dynamic_pointer_cast(src); + if (!rtmp_src) { + return false; + } + } + + if (strcasecmp("srt", prefix.data()) == 0) { + auto ts_src = std::dynamic_pointer_cast(src); + if (!ts_src) { + return false; + } + } + return true; +} + PusherBase::Ptr PusherBase::createPusher(const EventPoller::Ptr &in_poller, const MediaSource::Ptr &src, const std::string & url) { @@ -35,6 +61,10 @@ PusherBase::Ptr PusherBase::createPusher(const EventPoller::Ptr &in_poller, delete ptr; } }; + if (!checkMediaSourceAndUrlMatch(src, url)) { + throw std::invalid_argument(" media source (schema) and push url not match"); + } + std::string prefix = findSubString(url.data(), NULL, "://"); if (strcasecmp("rtsps",prefix.data()) == 0) { diff --git a/srt/SrtTransportImp.cpp b/srt/SrtTransportImp.cpp index d0323483..f470dc8e 100644 --- a/srt/SrtTransportImp.cpp +++ b/srt/SrtTransportImp.cpp @@ -117,6 +117,7 @@ bool SrtTransportImp::parseStreamid(std::string &streamid) { _media_info.app = app; _media_info.stream = stream_name; + _media_info.full_url = _media_info.getUrl() + "?" + _media_info.params; TraceL << " mediainfo=" << _media_info.shortUrl() << " params=" << _media_info.params;