1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

RTC: Refine SDP, parse H264 param

This commit is contained in:
winlin 2020-08-13 17:37:04 +08:00
parent 314e3159f0
commit 7069233783

View file

@ -1194,13 +1194,19 @@ SrsMediaPayloadType SrsVideoPayload::generate_media_payload_type()
srs_error_t SrsVideoPayload::set_h264_param_desc(std::string fmtp) srs_error_t SrsVideoPayload::set_h264_param_desc(std::string fmtp)
{ {
// TODO: FIXME: Refine code.
// for example: level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
srs_error_t err = srs_success; srs_error_t err = srs_success;
std::vector<std::string> vec = split_str(fmtp, ";");
for (size_t i = 0; i < vec.size(); ++i) { // For example: level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
std::vector<std::string> kv = split_str(vec[i], "="); std::vector<std::string> attributes = split_str(fmtp, ";");
if (kv.size() == 2) {
for (size_t i = 0; i < attributes.size(); ++i) {
std::string attribute = attributes.at(i);
std::vector<std::string> kv = split_str(attribute, "=");
if (kv.size() != 2) {
return srs_error_new(ERROR_RTC_SDP_DECODE, "invalid h264 param=%s", attribute.c_str());
}
if (kv[0] == "profile-level-id") { if (kv[0] == "profile-level-id") {
h264_param_.profile_level_id = kv[1]; h264_param_.profile_level_id = kv[1];
} else if (kv[0] == "packetization-mode") { } else if (kv[0] == "packetization-mode") {
@ -1218,9 +1224,6 @@ srs_error_t SrsVideoPayload::set_h264_param_desc(std::string fmtp)
} else { } else {
return srs_error_new(ERROR_RTC_SDP_DECODE, "invalid h264 param=%s", kv[0].c_str()); return srs_error_new(ERROR_RTC_SDP_DECODE, "invalid h264 param=%s", kv[0].c_str());
} }
} else {
return srs_error_new(ERROR_RTC_SDP_DECODE, "invalid h264 param=%s", vec[i].c_str());
}
} }
return err; return err;