修复sdp解析的bug
This commit is contained in:
parent
6e03e5a845
commit
c9950dda99
|
|
@ -82,7 +82,7 @@ Sdp::Ptr Factory::getSdpByTrack(const Track::Ptr &track) {
|
||||||
|
|
||||||
Track::Ptr Factory::getTrackBySdp(const SdpTrack::Ptr &track) {
|
Track::Ptr Factory::getTrackBySdp(const SdpTrack::Ptr &track) {
|
||||||
if (strcasestr(track->_codec.data(), "mpeg4-generic") != nullptr) {
|
if (strcasestr(track->_codec.data(), "mpeg4-generic") != nullptr) {
|
||||||
string aac_cfg_str = FindField(track->_fmtp.c_str(), "config=", "\r\n");
|
string aac_cfg_str = FindField(track->_fmtp.c_str(), "config=", nullptr);
|
||||||
if (aac_cfg_str.size() != 4) {
|
if (aac_cfg_str.size() != 4) {
|
||||||
aac_cfg_str = FindField(track->_fmtp.c_str(), "config=", ";");
|
aac_cfg_str = FindField(track->_fmtp.c_str(), "config=", ";");
|
||||||
}
|
}
|
||||||
|
|
@ -106,7 +106,7 @@ Track::Ptr Factory::getTrackBySdp(const SdpTrack::Ptr &track) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcasestr(track->_codec.data(), "h264") != nullptr) {
|
if (strcasestr(track->_codec.data(), "h264") != nullptr) {
|
||||||
string sps_pps = FindField(track->_fmtp.c_str(), "sprop-parameter-sets=", "\r\n");
|
string sps_pps = FindField(track->_fmtp.c_str(), "sprop-parameter-sets=", nullptr);
|
||||||
if(sps_pps.empty()){
|
if(sps_pps.empty()){
|
||||||
return std::make_shared<H264Track>();
|
return std::make_shared<H264Track>();
|
||||||
}
|
}
|
||||||
|
|
@ -124,14 +124,20 @@ Track::Ptr Factory::getTrackBySdp(const SdpTrack::Ptr &track) {
|
||||||
if (strcasestr(track->_codec.data(), "h265") != nullptr) {
|
if (strcasestr(track->_codec.data(), "h265") != nullptr) {
|
||||||
//a=fmtp:96 sprop-sps=QgEBAWAAAAMAsAAAAwAAAwBdoAKAgC0WNrkky/AIAAADAAgAAAMBlQg=; sprop-pps=RAHA8vA8kAA=
|
//a=fmtp:96 sprop-sps=QgEBAWAAAAMAsAAAAwAAAwBdoAKAgC0WNrkky/AIAAADAAgAAAMBlQg=; sprop-pps=RAHA8vA8kAA=
|
||||||
int pt;
|
int pt;
|
||||||
char sprop_sps[128] = {0},sprop_pps[128] = {0};
|
char sprop_vps[128] = {0},sprop_sps[128] = {0},sprop_pps[128] = {0};
|
||||||
if (3 != sscanf(track->_fmtp.c_str(), "%d sprop-sps=%127[^;]; sprop-pps=%127[^;]", &pt, sprop_sps, sprop_pps)) {
|
if (4 == sscanf(track->_fmtp.c_str(), "%d sprop-vps=%127[^;]; sprop-sps=%127[^;]; sprop-pps=%127[^;]", &pt, sprop_vps,sprop_sps, sprop_pps)) {
|
||||||
return std::make_shared<H265Track>();
|
auto vps = decodeBase64(sprop_vps);
|
||||||
|
auto sps = decodeBase64(sprop_sps);
|
||||||
|
auto pps = decodeBase64(sprop_pps);
|
||||||
|
return std::make_shared<H265Track>(vps,sps,pps,0,0,0);
|
||||||
}
|
}
|
||||||
|
if (3 == sscanf(track->_fmtp.c_str(), "%d sprop-sps=%127[^;]; sprop-pps=%127[^;]", &pt,sprop_sps, sprop_pps)) {
|
||||||
auto sps = decodeBase64(sprop_sps);
|
auto sps = decodeBase64(sprop_sps);
|
||||||
auto pps = decodeBase64(sprop_pps);
|
auto pps = decodeBase64(sprop_pps);
|
||||||
return std::make_shared<H265Track>("",sps,pps,0,0,0);
|
return std::make_shared<H265Track>("",sps,pps,0,0,0);
|
||||||
}
|
}
|
||||||
|
return std::make_shared<H265Track>();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
WarnL << "暂不支持该sdp:" << track->_codec << " " << track->_fmtp;
|
WarnL << "暂不支持该sdp:" << track->_codec << " " << track->_fmtp;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue