#ifndef _rtsp_header_range_h_ #define _rtsp_header_range_h_ #include enum ERTSP_RANGE_TIME { RTSP_RANGE_SMPTE = 1, // relative to the start of the clip RTSP_RANGE_SMPTE_30=RTSP_RANGE_SMPTE, RTSP_RANGE_SMPTE_25, RTSP_RANGE_NPT, // relative to the beginning of the presentation RTSP_RANGE_CLOCK, // absolute time, ISO 8601 timestamps, UTC(GMT) }; enum ERTSP_RANGE_TIME_VALUE { RTSP_RANGE_TIME_NORMAL = 1, RTSP_RANGE_TIME_NOW, // npt now RTSP_RANGE_TIME_NOVALUE, // npt don't set from value: -[npt-time] }; struct rtsp_header_range_t { enum ERTSP_RANGE_TIME type; enum ERTSP_RANGE_TIME_VALUE from_value; enum ERTSP_RANGE_TIME_VALUE to_value; uint64_t from; // ms uint64_t to; // ms uint64_t time; // range time parameter(in ms), 0 if no value }; /// parse RTSP Range header /// @return 0-ok, other-error /// usage 1: /// struct rtsp_header_range_t range; /// const char* header = "Range: clock=19960213T143205Z-;time=19970123T143720Z"; /// r = rtsp_header_range("clock=19960213T143205Z-;time=19970123T143720Z", &range); /// check(r) /// /// usage 2: /// const char* header = "Range: smpte-25=10:07:00-10:07:33:05.01,smpte-25=11:07:00-11:07:33:05.01"; /// split(header, ','); /// r1 = rtsp_header_range("smpte-25=10:07:00-10:07:33:05.01", &range); /// r2 = rtsp_header_range("smpte-25=11:07:00-11:07:33:05.01", &range); /// check(r1, r2) int rtsp_header_range(const char* field, struct rtsp_header_range_t* range); #endif /* !_rtsp_header_range_h_ */