Add rtcp module

This commit is contained in:
dijunkun
2023-09-11 17:23:32 +08:00
parent 3a291fe171
commit 8c545f7544
7 changed files with 205 additions and 18 deletions

View File

@@ -4,12 +4,12 @@
#include "log.h"
#define RTP_VERSION 1
#define RTP_VERSION 2
#define NALU 1
#define FU_A 28
#define FU_B 29
RtpCodec ::RtpCodec(PAYLOAD_TYPE payload_type)
RtpCodec ::RtpCodec(RtpPacket::PAYLOAD_TYPE payload_type)
: version_(RTP_VERSION),
has_padding_(false),
has_extension_(false),
@@ -41,7 +41,7 @@ void RtpCodec::Encode(uint8_t* buffer, size_t size,
rtp_packet.SetHasPadding(has_padding_);
rtp_packet.SetHasExtension(has_extension_);
rtp_packet.SetMarker(1);
rtp_packet.SetPayloadType(PAYLOAD_TYPE(payload_type_));
rtp_packet.SetPayloadType(RtpPacket::PAYLOAD_TYPE(payload_type_));
rtp_packet.SetSequenceNumber(sequence_number_++);
timestamp_ =
@@ -76,7 +76,7 @@ void RtpCodec::Encode(uint8_t* buffer, size_t size,
rtp_packet.SetHasPadding(has_padding_);
rtp_packet.SetHasExtension(has_extension_);
rtp_packet.SetMarker(index == packet_num ? 1 : 0);
rtp_packet.SetPayloadType(PAYLOAD_TYPE(payload_type_));
rtp_packet.SetPayloadType(RtpPacket::PAYLOAD_TYPE(payload_type_));
rtp_packet.SetSequenceNumber(sequence_number_++);
timestamp_ =

View File

@@ -9,7 +9,7 @@
class RtpCodec {
public:
RtpCodec(PAYLOAD_TYPE payload_type);
RtpCodec(RtpPacket::PAYLOAD_TYPE payload_type);
~RtpCodec();
public:

View File

@@ -63,10 +63,12 @@
#define DEFAULT_MTU 1500
#define MAX_NALU_LEN 1400
typedef enum { H264 = 96, OPUS = 97, USER_DEFINED = 127 } PAYLOAD_TYPE;
typedef enum { UNKNOWN = 0, NALU = 1, FU_A = 28, FU_B = 29 } NAL_UNIT_TYPE;
class RtpPacket {
public:
typedef enum { H264 = 96, OPUS = 97, USER_DEFINED = 127 } PAYLOAD_TYPE;
typedef enum { UNKNOWN = 0, NALU = 1, FU_A = 28, FU_B = 29 } NAL_UNIT_TYPE;
public:
RtpPacket();
RtpPacket(const uint8_t *buffer, size_t size);
@@ -104,16 +106,16 @@ class RtpPacket {
public:
typedef struct {
unsigned char forbidden_bit : 1;
unsigned char nal_reference_idc : 2;
unsigned char nal_unit_type : 5;
uint8_t forbidden_bit : 1;
uint8_t nal_reference_idc : 2;
uint8_t nal_unit_type : 5;
} FU_INDICATOR;
typedef struct {
unsigned char start : 1;
unsigned char end : 1;
unsigned char remain_bit : 1;
unsigned char nal_unit_type : 5;
uint8_t start : 1;
uint8_t end : 1;
uint8_t remain_bit : 1;
uint8_t nal_unit_type : 5;
} FU_HEADER;
void SetFuIndicator(FU_INDICATOR fu_indicator) {
@@ -143,7 +145,7 @@ class RtpPacket {
const bool HasPadding() { return has_padding_; }
const bool HasExtension() { return has_extension_; }
const bool Marker() { return marker_; }
const uint32_t PayloadType() { return payload_type_; }
const PAYLOAD_TYPE PayloadType() { return PAYLOAD_TYPE(payload_type_); }
const uint16_t SequenceNumber() { return sequence_number_; }
const uint32_t Timestamp() { return timestamp_; }
const uint32_t Ssrc() { return ssrc_; }

View File

@@ -19,7 +19,7 @@ void RtpVideoReceiver::InsertRtpPacket(RtpPacket& rtp_packet) {
rtp_video_receive_statistics_->UpdateReceiveBytes(rtp_packet.Size());
}
if (NAL_UNIT_TYPE::NALU == rtp_packet.NalUnitType()) {
if (RtpPacket::NAL_UNIT_TYPE::NALU == rtp_packet.NalUnitType()) {
compelete_video_frame_queue_.push(
VideoFrame(rtp_packet.Payload(), rtp_packet.Size()));
// if (on_receive_complete_frame_) {
@@ -33,7 +33,7 @@ void RtpVideoReceiver::InsertRtpPacket(RtpPacket& rtp_packet) {
// on_receive_complete_frame_(
// VideoFrame(rtp_packet.Payload(), rtp_packet.Size()));
// }
} else if (NAL_UNIT_TYPE::FU_A == rtp_packet.NalUnitType()) {
} else if (RtpPacket::NAL_UNIT_TYPE::FU_A == rtp_packet.NalUnitType()) {
incomplete_frame_list_[rtp_packet.SequenceNumber()] = rtp_packet;
bool complete = CheckIsFrameCompleted(rtp_packet);
}