[fix] fix video frame capture timestamp

This commit is contained in:
dijunkun
2025-03-19 14:35:48 +08:00
parent 257581e5e9
commit 1cd9ea1b0e
22 changed files with 45 additions and 50 deletions

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_ms,
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
bool use_rtp_packet_to_send) = 0;
virtual std::vector<std::unique_ptr<RtpPacket>> BuildPadding(
uint32_t payload_size, int64_t capture_timestamp_ms,
uint32_t payload_size, int64_t capture_timestamp_us,
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_ms,
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
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_ms,
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
bool use_rtp_packet_to_send) override;
std::vector<std::unique_ptr<RtpPacket>> BuildPadding(
uint32_t payload_size, int64_t capture_timestamp_ms,
uint32_t payload_size, int64_t capture_timestamp_us,
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_ms,
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
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_ms,
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
bool use_rtp_packet_to_send) override;
std::vector<std::unique_ptr<RtpPacket>> BuildPadding(
uint32_t payload_size, int64_t capture_timestamp_ms,
uint32_t payload_size, int64_t capture_timestamp_us,
bool use_rtp_packet_to_send) override {
return std::vector<std::unique_ptr<RtpPacket>>{};
};

View File

@@ -61,19 +61,19 @@ void RtpPacketizerH264::AddAbsSendTimeExtension(
}
std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerH264::Build(
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_ms,
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
bool use_rtp_packet_to_send) {
if (payload_size <= MAX_NALU_LEN) {
return BuildNalu(payload, payload_size, capture_timestamp_ms,
return BuildNalu(payload, payload_size, capture_timestamp_us,
use_rtp_packet_to_send);
} else {
return BuildFua(payload, payload_size, capture_timestamp_ms,
return BuildFua(payload, payload_size, capture_timestamp_us,
use_rtp_packet_to_send);
}
}
std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerH264::BuildNalu(
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_ms,
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
bool use_rtp_packet_to_send) {
std::vector<std::unique_ptr<RtpPacket>> rtp_packets;
@@ -84,7 +84,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_ms);
timestamp_ = kMsToRtpTimestamp * static_cast<uint32_t>(capture_timestamp_us);
if (!csrc_count_) {
}
@@ -142,7 +142,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_ms,
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
bool use_rtp_packet_to_send) {
std::vector<std::unique_ptr<RtpPacket>> rtp_packets;
@@ -242,7 +242,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_ms,
uint32_t payload_size, int64_t capture_timestamp_us,
bool use_rtp_packet_to_send) {
std::vector<std::unique_ptr<RtpPacket>> rtp_packets;
@@ -259,7 +259,7 @@ std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerH264::BuildPadding(
uint8_t payload_type = rtp::PAYLOAD_TYPE(payload_type_ - 1);
sequence_number_++;
timestamp_ =
kMsToRtpTimestamp * static_cast<uint32_t>(capture_timestamp_ms);
kMsToRtpTimestamp * static_cast<uint32_t>(capture_timestamp_us);
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_ms,
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
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_ms,
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_us,
bool use_rtp_packet_to_send);
std::vector<std::unique_ptr<RtpPacket>> BuildFua(uint8_t* payload,
uint32_t payload_size,
int64_t capture_timestamp_ms,
int64_t capture_timestamp_us,
bool use_rtp_packet_to_send);
std::vector<std::unique_ptr<RtpPacket>> BuildPadding(
uint32_t payload_size, int64_t capture_timestamp_ms,
uint32_t payload_size, int64_t capture_timestamp_us,
bool use_rtp_packet_to_send) override;
private: