Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

49 рядки
1.4KB

  1. #include "rtsp-server-internal.h"
  2. #include "rtsp-header-range.h"
  3. #include "rfc822-datetime.h"
  4. int rtsp_server_record(struct rtsp_server_t *rtsp, const char* uri)
  5. {
  6. int64_t npt = -1L;
  7. double scale = 0.0f;
  8. const char *pscale, *prange;
  9. struct rtsp_header_range_t range;
  10. pscale = http_get_header_by_name(rtsp->parser, "scale");
  11. prange = http_get_header_by_name(rtsp->parser, "range");
  12. if (0 == rtsp->session.session[0])
  13. {
  14. // 454 (Session Not Found)
  15. return rtsp_server_reply(rtsp, 454);
  16. }
  17. if (pscale)
  18. {
  19. scale = atof(pscale);
  20. }
  21. if (prange && 0 == rtsp_header_range(prange, &range))
  22. {
  23. npt = range.from;
  24. }
  25. return rtsp->handler.onrecord(rtsp->param, rtsp, uri, rtsp->session.session, -1L == npt ? NULL : &npt, pscale ? &scale : NULL);
  26. }
  27. int rtsp_server_reply_record(struct rtsp_server_t *rtsp, int code, const int64_t *nptstart, const int64_t *nptend)
  28. {
  29. int len = 0;
  30. char header[128] = { 0 };
  31. if (nptstart)
  32. {
  33. if (nptend)
  34. len += snprintf(header + len, sizeof(header) - len, "Range: npt=%.3f-%.3f\r\n", (float)(*nptstart / 1000.0f), (float)(*nptend / 1000.0f));
  35. else
  36. len += snprintf(header + len, sizeof(header) - len, "Range: npt=%.3f-\r\n", (float)(*nptstart / 1000.0f));
  37. }
  38. return rtsp_server_reply2(rtsp, code, header, NULL, 0);
  39. }