From 4ccc2f526f7fcf80ae4331f3f5b60c2981b48b36 Mon Sep 17 00:00:00 2001 From: Andrea Bondavalli Date: Mon, 27 Apr 2020 21:15:37 +0200 Subject: [PATCH] Fix for issue Daemon fails to parse AVIO SDP file - use correct delimiter ('=') and unsigned integer when extracing RTP timestamp offset from mediaclk:direct SDP audio attribute - use session connection information (c=) when audio specific connection information is missing --- daemon/session_manager.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/daemon/session_manager.cpp b/daemon/session_manager.cpp index 20f69f3..592091c 100644 --- a/daemon/session_manager.cpp +++ b/daemon/session_manager.cpp @@ -151,7 +151,7 @@ bool SessionManager::parse_sdp(const std::string sdp, StreamInfo& info) const { strncpy(info.stream.m_cCodec, fields[1].c_str(), sizeof(info.stream.m_cCodec) - 1); info.stream.m_byWordLength = get_codec_word_lenght(fields[1]); - info.stream.m_ui32SamplingRate = std::stoi(fields[2]); + info.stream.m_ui32SamplingRate = std::stoul(fields[2]); if (info.stream.m_byNbOfChannels != std::stoi(fields[3])) { BOOST_LOG_TRIVIAL(warning) << "session_manager:: invalid audio channel " @@ -163,7 +163,7 @@ bool SessionManager::parse_sdp(const std::string sdp, StreamInfo& info) const { } } else if (name == "sync-time") { /* a=sync-time:0 */ - info.stream.m_ui32RTPTimestampOffset = std::stoi(value); + info.stream.m_ui32RTPTimestampOffset = std::stoul(value); } else if (name == "framecount") { /* a=framecount:64-192 */ } else if (name == "ptime") { @@ -176,9 +176,9 @@ bool SessionManager::parse_sdp(const std::string sdp, StreamInfo& info) const { /* a=mediaclk:direct=0 */ std::vector fields; boost::split(fields, value, - [line](char c) { return c == ':'; }); + [line](char c) { return c == '='; }); if (fields.size() == 2 && fields[0] == "direct") { - info.stream.m_ui32RTPTimestampOffset = std::stoi(fields[1]); + info.stream.m_ui32RTPTimestampOffset = std::stoul(fields[1]); } } else if (name == "ts-refclk" && !info.ignore_refclk_gmid) { /* a=ts-refclk:ptp=IEEE1588-2008:00-0C-29-FF-FE-0E-90-C8:0 */ @@ -221,7 +221,9 @@ bool SessionManager::parse_sdp(const std::string sdp, StreamInfo& info) const { case 'c': /* c=IN IP4 239.1.0.12/15 */ /* connection info of audio media */ - if (status == sdp_parser_status::media) { + if (status == sdp_parser_status::media || + /* generic connection info */ + status == sdp_parser_status::init) { std::vector fields; boost::split(fields, val, [line](char c) { return c == ' ' || c == '/'; });