From d8de1e226cd16c0cd88b0757b9f7c1a4f2d6afce Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Thu, 5 Sep 2019 14:56:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=AF=B9H265=E7=9A=84sdp?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Extension/Factory.cpp | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/src/Extension/Factory.cpp b/src/Extension/Factory.cpp index 36dbc772..b4889f33 100644 --- a/src/Extension/Factory.cpp +++ b/src/Extension/Factory.cpp @@ -30,6 +30,7 @@ #include "H264Rtp.h" #include "AACRtp.h" #include "H265Rtp.h" +#include "Common/Parser.h" namespace mediakit{ @@ -76,26 +77,14 @@ Track::Ptr Factory::getTrackBySdp(const SdpTrack::Ptr &track) { if (strcasecmp(track->_codec.data(), "h265") == 0) { //a=fmtp:96 sprop-sps=QgEBAWAAAAMAsAAAAwAAAwBdoAKAgC0WNrkky/AIAAADAAgAAAMBlQg=; sprop-pps=RAHA8vA8kAA= - int pt, id; - char sprop_vps[128] = {0},sprop_sps[128] = {0},sprop_pps[128] = {0}; - if (5 == sscanf(track->_fmtp.data(), "%d profile-id=%d; sprop-sps=%127[^;]; sprop-pps=%127[^;]; sprop-vps=%127[^;]", &pt, &id, sprop_sps,sprop_pps, sprop_vps)) { - auto vps = decodeBase64(sprop_vps); - auto sps = decodeBase64(sprop_sps); - auto pps = decodeBase64(sprop_pps); - return std::make_shared(vps,sps,pps,0,0,0); + auto map = Parser::parseArgs(track->_fmtp," ","="); + for(auto &pr : map){ + trim(pr.second," ;"); } - if (4 == sscanf(track->_fmtp.data(), "%d sprop-vps=%127[^;]; sprop-sps=%127[^;]; sprop-pps=%127[^;]", &pt, sprop_vps,sprop_sps, sprop_pps)) { - auto vps = decodeBase64(sprop_vps); - auto sps = decodeBase64(sprop_sps); - auto pps = decodeBase64(sprop_pps); - return std::make_shared(vps,sps,pps,0,0,0); - } - if (3 == sscanf(track->_fmtp.data(), "%d sprop-sps=%127[^;]; sprop-pps=%127[^;]", &pt,sprop_sps, sprop_pps)) { - auto sps = decodeBase64(sprop_sps); - auto pps = decodeBase64(sprop_pps); - return std::make_shared("",sps,pps,0,0,0); - } - return std::make_shared(); + auto vps = decodeBase64(map["sprop-vps"]); + auto sps = decodeBase64(map["sprop-sps"]); + auto pps = decodeBase64(map["sprop-pps"]); + return std::make_shared(vps,sps,pps,0,0,0); }