Files
screen_cast/include/screencast/network/rtp_packet.h
T

35 lines
821 B
C++

#pragma once
#include <cstdint>
#include <optional>
#include <span>
#include <vector>
namespace sc {
// Minimal RTP header (RFC 3550) without extensions.
struct RtpHeader {
uint8_t version = 2;
bool padding = false;
bool extension = false;
uint8_t csrc_count = 0;
bool marker = false;
uint8_t payload_type = 96; // dynamic
uint16_t sequence_number = 0;
uint32_t timestamp = 0;
uint32_t ssrc = 0;
bool serialize(std::span<std::byte, 12> out) const noexcept;
static std::optional<RtpHeader> parse(std::span<const std::byte, 12> in) noexcept;
};
struct RtpPacket {
RtpHeader header;
std::vector<std::byte> payload;
std::vector<std::byte> serialize() const;
static std::optional<RtpPacket> parse(std::span<const std::byte> in) noexcept;
};
} // namespace sc