選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

68 行
1.8KB

  1. #ifndef _rtp_util_h_
  2. #define _rtp_util_h_
  3. #include "rtp-header.h"
  4. #include "rtcp-header.h"
  5. // The Internet Protocol defines big-endian as the standard network byte order
  6. #define nbo_r16 rtp_read_uint16
  7. #define nbo_r32 rtp_read_uint32
  8. #define nbo_w16 rtp_write_uint16
  9. #define nbo_w32 rtp_write_uint32
  10. static inline uint16_t rtp_read_uint16(const uint8_t* ptr)
  11. {
  12. return (((uint16_t)ptr[0]) << 8) | ptr[1];
  13. }
  14. static inline uint32_t rtp_read_uint32(const uint8_t* ptr)
  15. {
  16. return (((uint32_t)ptr[0]) << 24) | (((uint32_t)ptr[1]) << 16) | (((uint32_t)ptr[2]) << 8) | ptr[3];
  17. }
  18. static inline uint64_t rtp_read_uint64(const uint8_t* ptr)
  19. {
  20. return (((uint64_t)rtp_read_uint32(ptr)) << 32) | rtp_read_uint32(ptr + 8);
  21. }
  22. static inline void rtp_write_uint16(uint8_t* ptr, uint16_t val)
  23. {
  24. ptr[0] = (uint8_t)(val >> 8);
  25. ptr[1] = (uint8_t)val;
  26. }
  27. static inline void rtp_write_uint32(uint8_t* ptr, uint32_t val)
  28. {
  29. ptr[0] = (uint8_t)(val >> 24);
  30. ptr[1] = (uint8_t)(val >> 16);
  31. ptr[2] = (uint8_t)(val >> 8);
  32. ptr[3] = (uint8_t)val;
  33. }
  34. static inline void rtp_write_uint64(uint8_t* ptr, uint64_t val)
  35. {
  36. rtp_write_uint32(ptr, (uint32_t)(val >> 32));
  37. rtp_write_uint32(ptr + 8, (uint32_t)val);
  38. }
  39. static inline void nbo_write_rtp_header(uint8_t *ptr, const rtp_header_t *header)
  40. {
  41. ptr[0] = (uint8_t)((header->v << 6) | (header->p << 5) | (header->x << 4) | header->cc);
  42. ptr[1] = (uint8_t)((header->m << 7) | header->pt);
  43. ptr[2] = (uint8_t)(header->seq >> 8);
  44. ptr[3] = (uint8_t)(header->seq & 0xFF);
  45. nbo_w32(ptr+4, header->timestamp);
  46. nbo_w32(ptr+8, header->ssrc);
  47. }
  48. static inline void nbo_write_rtcp_header(uint8_t *ptr, const rtcp_header_t *header)
  49. {
  50. ptr[0] = (uint8_t)((header->v << 6) | (header->p << 5) | header->rc);
  51. ptr[1] = (uint8_t)(header->pt);
  52. ptr[2] = (uint8_t)(header->length >> 8);
  53. ptr[3] = (uint8_t)(header->length & 0xFF);
  54. }
  55. #endif /* !_rtp_util_h_ */