helpers.hpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /**
  2. * libdatachannel streamer example
  3. * Copyright (c) 2020 Filip Klembara (in2core)
  4. *
  5. * This Source Code Form is subject to the terms of the Mozilla Public
  6. * License, v. 2.0. If a copy of the MPL was not distributed with this
  7. * file, You can obtain one at https://mozilla.org/MPL/2.0/.
  8. */
  9. #ifndef helpers_hpp
  10. #define helpers_hpp
  11. #include "rtc/rtc.hpp"
  12. #include <shared_mutex>
  13. struct ClientTrackData {
  14. std::shared_ptr<rtc::Track> track;
  15. std::shared_ptr<rtc::RtcpSrReporter> sender;
  16. ClientTrackData(std::shared_ptr<rtc::Track> track, std::shared_ptr<rtc::RtcpSrReporter> sender);
  17. };
  18. struct Client {
  19. enum class State {
  20. Waiting,
  21. WaitingForVideo,
  22. WaitingForAudio,
  23. Ready
  24. };
  25. const std::shared_ptr<rtc::PeerConnection> & peerConnection = _peerConnection;
  26. Client(std::shared_ptr<rtc::PeerConnection> pc) {
  27. _peerConnection = pc;
  28. }
  29. std::optional<std::shared_ptr<ClientTrackData>> video;
  30. std::optional<std::shared_ptr<ClientTrackData>> audio;
  31. std::optional<std::shared_ptr<rtc::DataChannel>> dataChannel;
  32. void setState(State state);
  33. State getState();
  34. uint32_t rtpStartTimestamp = 0;
  35. private:
  36. std::shared_mutex _mutex;
  37. State state = State::Waiting;
  38. std::string id;
  39. std::shared_ptr<rtc::PeerConnection> _peerConnection;
  40. };
  41. struct ClientTrack {
  42. std::string id;
  43. std::shared_ptr<ClientTrackData> trackData;
  44. ClientTrack(std::string id, std::shared_ptr<ClientTrackData> trackData);
  45. };
  46. uint64_t currentTimeInMicroSeconds();
  47. #endif /* helpers_hpp */