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

RTC: Fix RTCP app bug. Add is_rtcp_app API.

This commit is contained in:
winlin 2020-08-06 17:18:45 +08:00
parent e2bf5eaf47
commit 2f1e77aeaf
2 changed files with 32 additions and 4 deletions

View file

@ -84,12 +84,32 @@ srs_error_t SrsRtcpCommon::encode(SrsBuffer *buffer)
SrsRtcpApp::SrsRtcpApp():ssrc_(0)
{
header_.padding = 0;
header_.type = SrsRtcpType_app;
header_.rc = 0;
header_.version = kRtcpVersion;
}
SrsRtcpApp::~SrsRtcpApp()
{
}
bool SrsRtcpApp::is_rtcp_app(uint8_t *data, int nb_data)
{
if (!data || nb_data <12) {
return false;
}
SrsRtcpHeader *header = (SrsRtcpHeader*)data;
if (header->version == kRtcpVersion
&& header->type == SrsRtcpType_app
&& ntohs(header->length) >= 2) {
return true;
}
return false;
}
uint8_t SrsRtcpApp::type() const
{
return SrsRtcpType_app;
@ -147,8 +167,12 @@ srs_error_t SrsRtcpApp::set_payload(uint8_t* payload, int len)
return srs_error_new(ERROR_RTC_RTCP, "invalid payload length %d", len);
}
payload_len_ = len;
payload_len_ = (len + 3)/ 4 * 4;;
memcpy(payload_, payload, len);
if (payload_len_ > len) {
memset(&payload_[len], 0, payload_len_ - len); //padding
}
header_.length = payload_len_/4 + 3 - 1;
return srs_success;
}
@ -166,6 +190,10 @@ srs_error_t SrsRtcpApp::decode(SrsBuffer *buffer)
return srs_error_wrap(err, "decode header");
}
if (header_.type != SrsRtcpType_app || !buffer->require(8)) {
return srs_error_new(ERROR_RTC_RTCP, "not rtcp app");
}
ssrc_ = buffer->read_4bytes();
buffer->read_bytes((char *)name_, sizeof(name_));