diff --git a/trunk/research/api-server/static-dir/favicon.ico b/trunk/research/api-server/static-dir/favicon.ico index 62fd6c026..8c68afab8 100644 Binary files a/trunk/research/api-server/static-dir/favicon.ico and b/trunk/research/api-server/static-dir/favicon.ico differ diff --git a/trunk/src/app/srs_app_rtc_source.cpp b/trunk/src/app/srs_app_rtc_source.cpp index be1c15adf..065c00ecc 100644 --- a/trunk/src/app/srs_app_rtc_source.cpp +++ b/trunk/src/app/srs_app_rtc_source.cpp @@ -1715,19 +1715,19 @@ bool SrsRtmpFromRtcBridger::check_frame_complete(const uint16_t start, const uin for (uint16_t i = 0; i < cnt; ++i) { int index = cache_index((start + i)); SrsRtpPacket* pkt = cache_video_pkts_[index].pkt; - if (!pkt) { - // fix crash when pkt->payload() if pkt is nullptr; - continue; - } - SrsRtpFUAPayload2* fua_payload = dynamic_cast(pkt->payload()); - if (fua_payload) { - if (fua_payload->start) { - ++fu_s_c; - } - if (fua_payload->end) { - ++fu_e_c; - } + // fix crash when pkt->payload() if pkt is nullptr; + if (!pkt) continue; + + SrsRtpFUAPayload2* fua_payload = dynamic_cast(pkt->payload()); + if (!fua_payload) continue; + + if (fua_payload->start) { + ++fu_s_c; + } + + if (fua_payload->end) { + ++fu_e_c; } } diff --git a/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp b/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp index 1c9f14c76..7f3120423 100644 --- a/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp +++ b/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp @@ -1161,6 +1161,7 @@ srs_error_t SrsRtcpTWCC::do_encode(SrsBuffer *buffer) if(srs_success != (err = encode_header(buffer))) { return srs_error_wrap(err, "encode header"); } + buffer->write_4bytes(media_ssrc_); buffer->write_2bytes(base_sn_); buffer->write_2bytes(packet_count); @@ -1171,13 +1172,16 @@ srs_error_t SrsRtcpTWCC::do_encode(SrsBuffer *buffer) if(!buffer->require(required_size)) { return srs_error_new(ERROR_RTC_RTCP, "encoded_chucks_[%d] requires %d bytes", (int)encoded_chucks_.size(), required_size); } + for(vector::iterator it = encoded_chucks_.begin(); it != encoded_chucks_.end(); ++it) { buffer->write_2bytes(*it); } + required_size = pkt_deltas_.size() * 2; if(!buffer->require(required_size)) { return srs_error_new(ERROR_RTC_RTCP, "pkt_deltas_[%d] requires %d bytes", (int)pkt_deltas_.size(), required_size); } + for(vector::iterator it = pkt_deltas_.begin(); it != pkt_deltas_.end(); ++it) { if(0 <= *it && 0xFF >= *it) { // small delta @@ -1188,6 +1192,7 @@ srs_error_t SrsRtcpTWCC::do_encode(SrsBuffer *buffer) buffer->write_2bytes(*it); } } + while((pkt_len % 4) != 0) { buffer->write_1bytes(0); pkt_len++;