[feat] add new classes EncodedFrame/DecodedFrame/ReceivedFrame for video frame module

This commit is contained in:
dijunkun
2025-03-19 18:36:55 +08:00
parent 1cd9ea1b0e
commit b50175f943
49 changed files with 485 additions and 203 deletions

View File

@@ -41,5 +41,7 @@ typedef struct {
typedef enum { UNKNOWN = 0, NALU = 1, FU_A = 28, FU_B = 29 } NAL_UNIT_TYPE;
const int kVideoPayloadTypeFrequency = 90000;
static int kMsToRtpTimestamp = 90;
} // namespace rtp
#endif

View File

@@ -22,11 +22,11 @@ class RtpPacketizer {
virtual ~RtpPacketizer() = default;
virtual std::vector<std::unique_ptr<RtpPacket>> Build(
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
uint8_t* payload, uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) = 0;
virtual std::vector<std::unique_ptr<RtpPacket>> BuildPadding(
uint32_t payload_size, int64_t capture_timestamp_us,
uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) = 0;
};

View File

@@ -5,7 +5,7 @@ RtpPacketizerAv1::RtpPacketizerAv1(uint32_t ssrc) {}
RtpPacketizerAv1::~RtpPacketizerAv1() {}
std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerAv1::Build(
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
uint8_t* payload, uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) {
std::vector<std::unique_ptr<RtpPacket>> rtp_packets;

View File

@@ -16,11 +16,11 @@ class RtpPacketizerAv1 : public RtpPacketizer {
virtual ~RtpPacketizerAv1();
std::vector<std::unique_ptr<RtpPacket>> Build(
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
uint8_t* payload, uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) override;
std::vector<std::unique_ptr<RtpPacket>> BuildPadding(
uint32_t payload_size, int64_t capture_timestamp_us,
uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) override {
return std::vector<std::unique_ptr<RtpPacket>>{};
};

View File

@@ -47,7 +47,7 @@ void RtpPacketizerGeneric::AddAbsSendTimeExtension(
}
std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerGeneric::Build(
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
uint8_t* payload, uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) {
uint32_t last_packet_size = payload_size % MAX_NALU_LEN;
uint32_t packet_num =

View File

@@ -16,11 +16,11 @@ class RtpPacketizerGeneric : public RtpPacketizer {
virtual ~RtpPacketizerGeneric();
std::vector<std::unique_ptr<RtpPacket>> Build(
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
uint8_t* payload, uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) override;
std::vector<std::unique_ptr<RtpPacket>> BuildPadding(
uint32_t payload_size, int64_t capture_timestamp_us,
uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) override {
return std::vector<std::unique_ptr<RtpPacket>>{};
};

View File

@@ -1,7 +1,5 @@
#include "rtp_packetizer_h264.h"
static int kMsToRtpTimestamp = 90;
RtpPacketizerH264::RtpPacketizerH264(uint32_t ssrc)
: version_(kRtpVersion),
has_padding_(false),
@@ -61,19 +59,19 @@ void RtpPacketizerH264::AddAbsSendTimeExtension(
}
std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerH264::Build(
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
uint8_t* payload, uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) {
if (payload_size <= MAX_NALU_LEN) {
return BuildNalu(payload, payload_size, capture_timestamp_us,
return BuildNalu(payload, payload_size, rtp_timestamp,
use_rtp_packet_to_send);
} else {
return BuildFua(payload, payload_size, capture_timestamp_us,
return BuildFua(payload, payload_size, rtp_timestamp,
use_rtp_packet_to_send);
}
}
std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerH264::BuildNalu(
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
uint8_t* payload, uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) {
std::vector<std::unique_ptr<RtpPacket>> rtp_packets;
@@ -84,7 +82,7 @@ std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerH264::BuildNalu(
marker_ = 1;
payload_type_ = rtp::PAYLOAD_TYPE(payload_type_);
sequence_number_++;
timestamp_ = kMsToRtpTimestamp * static_cast<uint32_t>(capture_timestamp_us);
timestamp_ = rtp::kMsToRtpTimestamp * rtp_timestamp;
if (!csrc_count_) {
}
@@ -142,7 +140,7 @@ std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerH264::BuildNalu(
}
std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerH264::BuildFua(
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
uint8_t* payload, uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) {
std::vector<std::unique_ptr<RtpPacket>> rtp_packets;
@@ -242,7 +240,7 @@ std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerH264::BuildFua(
}
std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerH264::BuildPadding(
uint32_t payload_size, int64_t capture_timestamp_us,
uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) {
std::vector<std::unique_ptr<RtpPacket>> rtp_packets;
@@ -258,8 +256,7 @@ std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerH264::BuildPadding(
marker_ = 0;
uint8_t payload_type = rtp::PAYLOAD_TYPE(payload_type_ - 1);
sequence_number_++;
timestamp_ =
kMsToRtpTimestamp * static_cast<uint32_t>(capture_timestamp_us);
timestamp_ = rtp::kMsToRtpTimestamp * rtp_timestamp;
rtp_packet_frame_.clear();
rtp_packet_frame_.push_back((version_ << 6) | (has_padding_ << 5) |

View File

@@ -16,20 +16,20 @@ class RtpPacketizerH264 : public RtpPacketizer {
virtual ~RtpPacketizerH264();
std::vector<std::unique_ptr<RtpPacket>> Build(
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
uint8_t* payload, uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) override;
std::vector<std::unique_ptr<RtpPacket>> BuildNalu(
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
uint8_t* payload, uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send);
std::vector<std::unique_ptr<RtpPacket>> BuildFua(uint8_t* payload,
uint32_t payload_size,
int64_t capture_timestamp_us,
uint32_t rtp_timestamp,
bool use_rtp_packet_to_send);
std::vector<std::unique_ptr<RtpPacket>> BuildPadding(
uint32_t payload_size, int64_t capture_timestamp_us,
uint32_t payload_size, uint32_t rtp_timestamp,
bool use_rtp_packet_to_send) override;
private: