mirror of
https://github.com/kunkundi/crossdesk.git
synced 2026-03-26 19:27:30 +08:00
[feat] h264 frame assember refactoring
This commit is contained in:
@@ -10,19 +10,25 @@ bool RtpPacketH264::GetFrameHeaderInfo() {
|
||||
}
|
||||
|
||||
const uint8_t* frame_buffer = Payload();
|
||||
size_t offset = 0;
|
||||
|
||||
fu_indicator_.forbidden_bit = (frame_buffer[0] >> 7) & 0x01;
|
||||
fu_indicator_.nal_reference_idc = (frame_buffer[0] >> 5) & 0x03;
|
||||
fu_indicator_.nal_unit_type = frame_buffer[0] & 0x1F;
|
||||
if (rtp::PAYLOAD_TYPE::RTX == PayloadType()) {
|
||||
osn_ = frame_buffer[0] << 8 | frame_buffer[0 + 1];
|
||||
offset = 2;
|
||||
}
|
||||
|
||||
fu_indicator_.forbidden_bit = (frame_buffer[0 + offset] >> 7) & 0x01;
|
||||
fu_indicator_.nal_reference_idc = (frame_buffer[0 + offset] >> 5) & 0x03;
|
||||
fu_indicator_.nal_unit_type = frame_buffer[0 + offset] & 0x1F;
|
||||
|
||||
if (rtp::NAL_UNIT_TYPE::NALU == fu_indicator_.nal_unit_type) {
|
||||
add_offset_to_payload(1);
|
||||
add_offset_to_payload(1 + offset);
|
||||
} else if (rtp::NAL_UNIT_TYPE::FU_A == fu_indicator_.nal_unit_type) {
|
||||
fu_header_.start = (frame_buffer[1] >> 7) & 0x01;
|
||||
fu_header_.end = (frame_buffer[1] >> 6) & 0x01;
|
||||
fu_header_.remain_bit = (frame_buffer[1] >> 5) & 0x01;
|
||||
fu_header_.nal_unit_type = frame_buffer[1] & 0x1F;
|
||||
add_offset_to_payload(2);
|
||||
fu_header_.start = (frame_buffer[1 + offset] >> 7) & 0x01;
|
||||
fu_header_.end = (frame_buffer[1 + offset] >> 6) & 0x01;
|
||||
fu_header_.remain_bit = (frame_buffer[1 + offset] >> 5) & 0x01;
|
||||
fu_header_.nal_unit_type = frame_buffer[1 + offset] & 0x1F;
|
||||
add_offset_to_payload(2 + offset);
|
||||
}
|
||||
|
||||
fu_info_got_ = true;
|
||||
|
||||
@@ -23,7 +23,10 @@ class RtpPacketH264 : public RtpPacket {
|
||||
bool FuAStart() { return fu_header_.start; }
|
||||
bool FuAEnd() { return fu_header_.end; }
|
||||
|
||||
uint16_t GetOsn() { return osn_; }
|
||||
|
||||
private:
|
||||
uint16_t osn_;
|
||||
rtp::FU_INDICATOR fu_indicator_;
|
||||
rtp::FU_HEADER fu_header_;
|
||||
bool fu_info_got_ = false;
|
||||
|
||||
@@ -77,9 +77,7 @@ bool RtpPacketToSend::BuildRtxPacket() {
|
||||
uint32_t ssrc = Ssrc();
|
||||
std::vector<uint32_t> csrcs = Csrcs();
|
||||
|
||||
uint32_t timestamp = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::system_clock::now().time_since_epoch())
|
||||
.count();
|
||||
uint32_t timestamp = Timestamp();
|
||||
|
||||
if (!csrc_count) {
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
||||
// | Original RTP Packet Payload |
|
||||
// | |
|
||||
//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
|
||||
class RtxPacket {
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user