mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-26 20:25:34 +08:00
[fix] use ntp timestamp ms as video rtp timestamp
This commit is contained in:
@@ -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
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user