ZLMediaKit/srt/Common.hpp

96 lines
2.4 KiB
C++
Raw Normal View History

2022-06-03 13:25:32 +08:00
#ifndef ZLMEDIAKIT_SRT_COMMON_H
#define ZLMEDIAKIT_SRT_COMMON_H
#if defined(_WIN32)
#include <winsock2.h>
#include <ws2tcpip.h>
#include <Iphlpapi.h>
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(lib, "Iphlpapi.lib")
#else
#include <netdb.h>
#include <sys/socket.h>
#endif // defined(_WIN32)
2022-06-03 13:25:32 +08:00
#include <chrono>
#define MAX_SEQ 0x7fffffff
#define MAX_TS 0xffffffff
2022-06-03 13:25:32 +08:00
2022-06-07 09:52:20 +08:00
namespace SRT {
2022-06-03 13:25:32 +08:00
using SteadyClock = std::chrono::steady_clock;
using TimePoint = std::chrono::time_point<SteadyClock>;
using Microseconds = std::chrono::microseconds;
using Milliseconds = std::chrono::milliseconds;
2022-06-07 09:52:20 +08:00
static inline int64_t DurationCountMicroseconds(SteadyClock::duration dur) {
2022-06-03 13:25:32 +08:00
return std::chrono::duration_cast<std::chrono::microseconds>(dur).count();
}
2022-06-07 09:52:20 +08:00
static inline uint32_t loadUint32(uint8_t *ptr) {
2022-06-03 13:25:32 +08:00
return ptr[0] << 24 | ptr[1] << 16 | ptr[2] << 8 | ptr[3];
}
2022-06-07 09:52:20 +08:00
static inline uint16_t loadUint16(uint8_t *ptr) {
2022-06-03 13:25:32 +08:00
return ptr[0] << 8 | ptr[1];
}
2022-06-07 09:52:20 +08:00
static inline void storeUint32(uint8_t *buf, uint32_t val) {
2022-06-03 13:25:32 +08:00
buf[0] = val >> 24;
buf[1] = (val >> 16) & 0xff;
buf[2] = (val >> 8) & 0xff;
buf[3] = val & 0xff;
}
2022-06-07 09:52:20 +08:00
static inline void storeUint16(uint8_t *buf, uint16_t val) {
2022-06-03 13:25:32 +08:00
buf[0] = (val >> 8) & 0xff;
buf[1] = val & 0xff;
}
2022-06-07 09:52:20 +08:00
static inline void storeUint32LE(uint8_t *buf, uint32_t val) {
2022-06-03 13:25:32 +08:00
buf[0] = val & 0xff;
buf[1] = (val >> 8) & 0xff;
buf[2] = (val >> 16) & 0xff;
2022-06-07 09:52:20 +08:00
buf[3] = (val >> 24) & 0xff;
2022-06-03 13:25:32 +08:00
}
2022-06-07 09:52:20 +08:00
static inline void storeUint16LE(uint8_t *buf, uint16_t val) {
2022-06-03 13:25:32 +08:00
buf[0] = val & 0xff;
2022-06-07 09:52:20 +08:00
buf[1] = (val >> 8) & 0xff;
2022-06-03 13:25:32 +08:00
}
2022-06-07 09:52:20 +08:00
static inline uint32_t srtVersion(int major, int minor, int patch) {
return patch + minor * 0x100 + major * 0x10000;
2022-06-03 13:25:32 +08:00
}
static inline uint32_t genExpectedSeq(uint32_t seq) {
return MAX_SEQ & seq;
}
class UTicker {
public:
2022-06-07 09:52:20 +08:00
UTicker() { _created = _begin = SteadyClock::now(); }
~UTicker() = default;
/**
*
*/
2022-06-07 09:52:20 +08:00
int64_t elapsedTime(TimePoint now) const { return DurationCountMicroseconds(now - _begin); }
/**
* resetTime后至今的时间
*/
2022-06-07 09:52:20 +08:00
int64_t createdTime(TimePoint now) const { return DurationCountMicroseconds(now - _created); }
/**
*
*/
2022-06-07 09:52:20 +08:00
void resetTime(TimePoint now) { _begin = now; }
private:
TimePoint _begin;
TimePoint _created;
};
2022-06-03 13:25:32 +08:00
} // namespace SRT
2022-06-07 09:52:20 +08:00
#endif // ZLMEDIAKIT_SRT_COMMON_H