[fix] use ntp timestamp ms as video rtp timestamp

This commit is contained in:
dijunkun
2025-02-28 15:52:21 +08:00
parent 962d856946
commit 3bb12e3f60
19 changed files with 55 additions and 32 deletions

View File

@@ -22,7 +22,8 @@ class RtpPacketizer {
virtual ~RtpPacketizer() = default;
virtual std::vector<std::shared_ptr<RtpPacket>> Build(
uint8_t* payload, uint32_t payload_size, bool use_rtp_packet_to_send) = 0;
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_ms,
bool use_rtp_packet_to_send) = 0;
};
#endif

View File

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

View File

@@ -16,7 +16,7 @@ class RtpPacketizerAv1 : public RtpPacketizer {
virtual ~RtpPacketizerAv1();
std::vector<std::shared_ptr<RtpPacket>> Build(
uint8_t* payload, uint32_t payload_size,
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_ms,
bool use_rtp_packet_to_send) override;
private:

View File

@@ -47,7 +47,8 @@ void RtpPacketizerGeneric::AddAbsSendTimeExtension(
}
std::vector<std::shared_ptr<RtpPacket>> RtpPacketizerGeneric::Build(
uint8_t* payload, uint32_t payload_size, bool use_rtp_packet_to_send) {
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_ms,
bool use_rtp_packet_to_send) {
uint32_t last_packet_size = payload_size % MAX_NALU_LEN;
uint32_t packet_num =
payload_size / MAX_NALU_LEN + (last_packet_size ? 1 : 0);

View File

@@ -16,7 +16,7 @@ class RtpPacketizerGeneric : public RtpPacketizer {
virtual ~RtpPacketizerGeneric();
std::vector<std::shared_ptr<RtpPacket>> Build(
uint8_t* payload, uint32_t payload_size,
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_ms,
bool use_rtp_packet_to_send) override;
private:

View File

@@ -1,5 +1,7 @@
#include "rtp_packetizer_h264.h"
static int kMsToRtpTimestamp = 90;
RtpPacketizerH264::RtpPacketizerH264(uint32_t ssrc)
: version_(kRtpVersion),
has_padding_(false),
@@ -59,16 +61,20 @@ void RtpPacketizerH264::AddAbsSendTimeExtension(
}
std::vector<std::shared_ptr<RtpPacket>> RtpPacketizerH264::Build(
uint8_t* payload, uint32_t payload_size, bool use_rtp_packet_to_send) {
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_ms,
bool use_rtp_packet_to_send) {
if (payload_size <= MAX_NALU_LEN) {
return BuildNalu(payload, payload_size, use_rtp_packet_to_send);
return BuildNalu(payload, payload_size, capture_timestamp_ms,
use_rtp_packet_to_send);
} else {
return BuildFua(payload, payload_size, use_rtp_packet_to_send);
return BuildFua(payload, payload_size, capture_timestamp_ms,
use_rtp_packet_to_send);
}
}
std::vector<std::shared_ptr<RtpPacket>> RtpPacketizerH264::BuildNalu(
uint8_t* payload, uint32_t payload_size, bool use_rtp_packet_to_send) {
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_ms,
bool use_rtp_packet_to_send) {
std::vector<std::shared_ptr<RtpPacket>> rtp_packets;
version_ = kRtpVersion;
@@ -78,9 +84,7 @@ std::vector<std::shared_ptr<RtpPacket>> RtpPacketizerH264::BuildNalu(
marker_ = 1;
payload_type_ = rtp::PAYLOAD_TYPE(payload_type_);
sequence_number_++;
timestamp_ = std::chrono::duration_cast<std::chrono::microseconds>(
std::chrono::system_clock::now().time_since_epoch())
.count();
timestamp_ = kMsToRtpTimestamp * static_cast<uint32_t>(capture_timestamp_ms);
if (!csrc_count_) {
}
@@ -138,7 +142,8 @@ std::vector<std::shared_ptr<RtpPacket>> RtpPacketizerH264::BuildNalu(
}
std::vector<std::shared_ptr<RtpPacket>> RtpPacketizerH264::BuildFua(
uint8_t* payload, uint32_t payload_size, bool use_rtp_packet_to_send) {
uint8_t* payload, uint32_t payload_size, int64_t capture_timestamp_ms,
bool use_rtp_packet_to_send) {
std::vector<std::shared_ptr<RtpPacket>> rtp_packets;
uint32_t last_packet_size = payload_size % MAX_NALU_LEN;

View File

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