mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-26 20:25:34 +08:00
[feat] add task queue module
This commit is contained in:
@@ -246,55 +246,63 @@ std::vector<std::unique_ptr<RtpPacket>> RtpPacketizerH264::BuildPadding(
|
||||
bool use_rtp_packet_to_send) {
|
||||
std::vector<std::unique_ptr<RtpPacket>> rtp_packets;
|
||||
|
||||
version_ = kRtpVersion;
|
||||
has_padding_ = true;
|
||||
has_extension_ = true;
|
||||
csrc_count_ = 0;
|
||||
marker_ = 0;
|
||||
uint8_t payload_type = rtp::PAYLOAD_TYPE(payload_type_ - 1);
|
||||
sequence_number_++;
|
||||
timestamp_ = kMsToRtpTimestamp * static_cast<uint32_t>(capture_timestamp_ms);
|
||||
uint32_t remaining_size = payload_size;
|
||||
while (remaining_size > 0) {
|
||||
uint32_t current_payload_size =
|
||||
std::min<uint32_t>(remaining_size, MAX_NALU_LEN);
|
||||
|
||||
rtp_packet_frame_.clear();
|
||||
rtp_packet_frame_.push_back((version_ << 6) | (has_padding_ << 5) |
|
||||
(has_extension_ << 4) | csrc_count_);
|
||||
rtp_packet_frame_.push_back((marker_ << 7) | payload_type);
|
||||
rtp_packet_frame_.push_back((sequence_number_ >> 8) & 0xFF);
|
||||
rtp_packet_frame_.push_back(sequence_number_ & 0xFF);
|
||||
rtp_packet_frame_.push_back((timestamp_ >> 24) & 0xFF);
|
||||
rtp_packet_frame_.push_back((timestamp_ >> 16) & 0xFF);
|
||||
rtp_packet_frame_.push_back((timestamp_ >> 8) & 0xFF);
|
||||
rtp_packet_frame_.push_back(timestamp_ & 0xFF);
|
||||
rtp_packet_frame_.push_back((ssrc_ >> 24) & 0xFF);
|
||||
rtp_packet_frame_.push_back((ssrc_ >> 16) & 0xFF);
|
||||
rtp_packet_frame_.push_back((ssrc_ >> 8) & 0xFF);
|
||||
rtp_packet_frame_.push_back(ssrc_ & 0xFF);
|
||||
version_ = kRtpVersion;
|
||||
has_padding_ = true;
|
||||
has_extension_ = true;
|
||||
csrc_count_ = 0;
|
||||
marker_ = 0;
|
||||
uint8_t payload_type = rtp::PAYLOAD_TYPE(payload_type_ - 1);
|
||||
sequence_number_++;
|
||||
timestamp_ =
|
||||
kMsToRtpTimestamp * static_cast<uint32_t>(capture_timestamp_ms);
|
||||
|
||||
for (uint32_t index = 0; index < csrc_count_ && !csrcs_.empty(); index++) {
|
||||
rtp_packet_frame_.push_back((csrcs_[index] >> 24) & 0xFF);
|
||||
rtp_packet_frame_.push_back((csrcs_[index] >> 16) & 0xFF);
|
||||
rtp_packet_frame_.push_back((csrcs_[index] >> 8) & 0xFF);
|
||||
rtp_packet_frame_.push_back(csrcs_[index] & 0xFF);
|
||||
}
|
||||
rtp_packet_frame_.clear();
|
||||
rtp_packet_frame_.push_back((version_ << 6) | (has_padding_ << 5) |
|
||||
(has_extension_ << 4) | csrc_count_);
|
||||
rtp_packet_frame_.push_back((marker_ << 7) | payload_type);
|
||||
rtp_packet_frame_.push_back((sequence_number_ >> 8) & 0xFF);
|
||||
rtp_packet_frame_.push_back(sequence_number_ & 0xFF);
|
||||
rtp_packet_frame_.push_back((timestamp_ >> 24) & 0xFF);
|
||||
rtp_packet_frame_.push_back((timestamp_ >> 16) & 0xFF);
|
||||
rtp_packet_frame_.push_back((timestamp_ >> 8) & 0xFF);
|
||||
rtp_packet_frame_.push_back(timestamp_ & 0xFF);
|
||||
rtp_packet_frame_.push_back((ssrc_ >> 24) & 0xFF);
|
||||
rtp_packet_frame_.push_back((ssrc_ >> 16) & 0xFF);
|
||||
rtp_packet_frame_.push_back((ssrc_ >> 8) & 0xFF);
|
||||
rtp_packet_frame_.push_back(ssrc_ & 0xFF);
|
||||
|
||||
if (has_extension_) {
|
||||
AddAbsSendTimeExtension(rtp_packet_frame_);
|
||||
}
|
||||
for (uint32_t index = 0; index < csrc_count_ && !csrcs_.empty(); index++) {
|
||||
rtp_packet_frame_.push_back((csrcs_[index] >> 24) & 0xFF);
|
||||
rtp_packet_frame_.push_back((csrcs_[index] >> 16) & 0xFF);
|
||||
rtp_packet_frame_.push_back((csrcs_[index] >> 8) & 0xFF);
|
||||
rtp_packet_frame_.push_back(csrcs_[index] & 0xFF);
|
||||
}
|
||||
|
||||
// Add padding bytes
|
||||
uint32_t padding_size = payload_size;
|
||||
rtp_packet_frame_.insert(rtp_packet_frame_.end(), padding_size - 1, 0);
|
||||
rtp_packet_frame_.push_back(padding_size);
|
||||
if (has_extension_) {
|
||||
AddAbsSendTimeExtension(rtp_packet_frame_);
|
||||
}
|
||||
|
||||
if (use_rtp_packet_to_send) {
|
||||
std::unique_ptr<webrtc::RtpPacketToSend> rtp_packet =
|
||||
std::make_unique<webrtc::RtpPacketToSend>();
|
||||
rtp_packet->Build(rtp_packet_frame_.data(), rtp_packet_frame_.size());
|
||||
rtp_packets.emplace_back(std::move(rtp_packet));
|
||||
} else {
|
||||
std::unique_ptr<RtpPacket> rtp_packet = std::make_unique<RtpPacket>();
|
||||
rtp_packet->Build(rtp_packet_frame_.data(), rtp_packet_frame_.size());
|
||||
rtp_packets.emplace_back(std::move(rtp_packet));
|
||||
// Add padding bytes
|
||||
uint32_t padding_size = current_payload_size;
|
||||
rtp_packet_frame_.insert(rtp_packet_frame_.end(), padding_size - 1, 0);
|
||||
|
||||
if (use_rtp_packet_to_send) {
|
||||
std::unique_ptr<webrtc::RtpPacketToSend> rtp_packet =
|
||||
std::make_unique<webrtc::RtpPacketToSend>();
|
||||
rtp_packet->Build(rtp_packet_frame_.data(), rtp_packet_frame_.size());
|
||||
rtp_packets.emplace_back(std::move(rtp_packet));
|
||||
} else {
|
||||
std::unique_ptr<RtpPacket> rtp_packet = std::make_unique<RtpPacket>();
|
||||
rtp_packet->Build(rtp_packet_frame_.data(), rtp_packet_frame_.size());
|
||||
rtp_packets.emplace_back(std::move(rtp_packet));
|
||||
}
|
||||
|
||||
remaining_size -= current_payload_size;
|
||||
}
|
||||
|
||||
return rtp_packets;
|
||||
|
||||
Reference in New Issue
Block a user