123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- #ifndef MODULES_RTP_RTCP_SOURCE_RTP_HEADER_EXTENSIONS_H_
- #define MODULES_RTP_RTCP_SOURCE_RTP_HEADER_EXTENSIONS_H_
- #include <stddef.h>
- #include <stdint.h>
- #include <string>
- #include "../rtp_header_extension/rtp_header_extension_defines.h"
- class AbsoluteSendTime {
- public:
- static const RTPExtensionType kId = kRtpExtensionAbsoluteSendTime;
- static const uint8_t kValueSizeBytes = 3;
- static bool Parse(const uint8_t *data, uint32_t* time_24bits);
- static size_t ValueSize(uint32_t time_24bits) { return kValueSizeBytes; }
- static bool Write(uint8_t *data, uint32_t time_24bits);
- static const uint32_t MsTo24Bits(int64_t time_ms) {
- return static_cast<uint32_t>(((time_ms << 18) + 500) / 1000) & 0x00FFFFFF;
- }
- static const char kUri[];
- };
- class AudioLevel {
- public:
- static const RTPExtensionType kId = kRtpExtensionAudioLevel;
- static const uint8_t kValueSizeBytes = 1;
- static bool Parse(const uint8_t *data,
- bool* voice_activity,
- uint8_t* audio_level);
- static size_t ValueSize(bool voice_activity, uint8_t audio_level) {
- return kValueSizeBytes;
- }
- static bool Write(uint8_t *data,
- bool voice_activity,
- uint8_t audio_level);
- static const char kUri[];
- };
- class TransmissionOffset {
- public:
- static const RTPExtensionType kId = kRtpExtensionTransmissionTimeOffset;
- static const uint8_t kValueSizeBytes = 3;
- static bool Parse(const uint8_t *data, int32_t* rtp_time);
- static size_t ValueSize(int32_t rtp_time) { return kValueSizeBytes; }
- static bool Write(uint8_t *data, int32_t rtp_time);
- static const char kUri[];
- };
- class TransportSequenceNumber {
- public:
- static const RTPExtensionType kId = kRtpExtensionTransportSequenceNumber;
- static const uint8_t kValueSizeBytes = 2;
- static bool Parse(const uint8_t *data,
- uint16_t* transport_sequence_number);
- static size_t ValueSize(uint16_t /*transport_sequence_number*/) {
- return kValueSizeBytes;
- }
- static bool Write(uint8_t *data,
- uint16_t transport_sequence_number);
- static const char kUri[];
- };
- class VideoOrientation {
- public:
- static const RTPExtensionType kId = kRtpExtensionVideoRotation;
- static const uint8_t kValueSizeBytes = 1;
- static bool Parse(const uint8_t *data, VideoRotation* value);
- static size_t ValueSize(VideoRotation) { return kValueSizeBytes; }
- static bool Write(uint8_t *data, VideoRotation value);
- static bool Parse(const uint8_t *data, uint8_t* value);
- static size_t ValueSize(uint8_t value) { return kValueSizeBytes; }
- static bool Write(uint8_t *data, uint8_t value);
- static const char kUri[];
- };
- class PlayoutDelayLimits {
- public:
- static const RTPExtensionType kId = kRtpExtensionPlayoutDelay;
- static const uint8_t kValueSizeBytes = 3;
- // Playout delay in milliseconds. A playout delay limit (min or max)
- // has 12 bits allocated. This allows a range of 0-4095 values which
- // translates to a range of 0-40950 in milliseconds.
- static const int kGranularityMs = 10;
- // Maximum playout delay value in milliseconds.
- static const int kMaxMs = 0xfff * kGranularityMs; // 40950.
- static bool Parse(const uint8_t *data,
- PlayoutDelay* playout_delay);
- static size_t ValueSize(const PlayoutDelay&) {
- return kValueSizeBytes;
- }
- static bool Write(uint8_t *data,
- const PlayoutDelay& playout_delay);
- static const char kUri[];
- };
- class VideoContentTypeExtension {
- public:
- static const RTPExtensionType kId = kRtpExtensionVideoContentType;
- static const uint8_t kValueSizeBytes = 1;
- static bool Parse(const uint8_t *data,
- VideoContentType* content_type);
- static size_t ValueSize(VideoContentType) {
- return kValueSizeBytes;
- }
- static bool Write(uint8_t *data,
- VideoContentType content_type);
- static const char kUri[];
- };
- // Base extension class for RTP header extensions which are strings.
- // Subclasses must defined kId and kUri static constexpr members.
- class BaseRtpStringExtension {
- public:
- // String RTP header extensions are limited to 16 bytes because it is the
- // maximum length that can be encoded with one-byte header extensions.
- static const uint8_t kMaxValueSizeBytes = 16;
- static bool Parse(const uint8_t *data, std::string* str);
- static size_t ValueSize(const std::string& str) { return str.size(); }
- static bool Write(uint8_t *data, const std::string& str);
- };
- class RtpStreamId : public BaseRtpStringExtension {
- public:
- static const RTPExtensionType kId = kRtpExtensionRtpStreamId;
- static const char kUri[];
- };
- class RepairedRtpStreamId : public BaseRtpStringExtension {
- public:
- static const RTPExtensionType kId = kRtpExtensionRepairedRtpStreamId;
- static const char kUri[];
- };
- class RtpMid : public BaseRtpStringExtension {
- public:
- static const RTPExtensionType kId = kRtpExtensionMid;
- static const char kUri[];
- };
- #endif // MODULES_RTP_RTCP_SOURCE_RTP_HEADER_EXTENSIONS_H_
|