No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

hace 5 meses
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #ifndef ZLMEDIAKIT_SRT_TRANSPORT_IMP_H
  2. #define ZLMEDIAKIT_SRT_TRANSPORT_IMP_H
  3. #include "Common/MultiMediaSourceMuxer.h"
  4. #include "Rtp/Decoder.h"
  5. #include "SrtTransport.hpp"
  6. #include "TS/TSMediaSource.h"
  7. #include <mutex>
  8. namespace SRT {
  9. using namespace std;
  10. using namespace toolkit;
  11. using namespace mediakit;
  12. class SrtTransportImp
  13. : public SrtTransport
  14. , public toolkit::SockInfo
  15. , public MediaSinkInterface
  16. , public mediakit::MediaSourceEvent {
  17. public:
  18. SrtTransportImp(const EventPoller::Ptr &poller);
  19. ~SrtTransportImp();
  20. void inputSockData(uint8_t *buf, int len, struct sockaddr_storage *addr) override {
  21. SrtTransport::inputSockData(buf, len, addr);
  22. _total_bytes += len;
  23. }
  24. void onSendTSData(const Buffer::Ptr &buffer, bool flush) override { SrtTransport::onSendTSData(buffer, flush); }
  25. /// SockInfo override
  26. std::string get_local_ip() override;
  27. uint16_t get_local_port() override;
  28. std::string get_peer_ip() override;
  29. uint16_t get_peer_port() override;
  30. std::string getIdentifier() const override;
  31. protected:
  32. ///////SrtTransport override///////
  33. int getLatencyMul() override;
  34. int getPktBufSize() override;
  35. float getTimeOutSec() override;
  36. void onSRTData(DataPacket::Ptr pkt) override;
  37. void onShutdown(const SockException &ex) override;
  38. void onHandShakeFinished(std::string &streamid, struct sockaddr_storage *addr) override;
  39. void sendPacket(Buffer::Ptr pkt, bool flush = true) override {
  40. _total_bytes += pkt->size();
  41. SrtTransport::sendPacket(pkt, flush);
  42. }
  43. bool isPusher() override { return _is_pusher; }
  44. ///////MediaSourceEvent override///////
  45. // 关闭
  46. bool close(mediakit::MediaSource &sender) override;
  47. // 获取媒体源类型
  48. mediakit::MediaOriginType getOriginType(mediakit::MediaSource &sender) const override;
  49. // 获取媒体源url或者文件路径
  50. std::string getOriginUrl(mediakit::MediaSource &sender) const override;
  51. // 获取媒体源客户端相关信息
  52. std::shared_ptr<SockInfo> getOriginSock(mediakit::MediaSource &sender) const override;
  53. ///////MediaSinkInterface override///////
  54. void resetTracks() override {};
  55. void addTrackCompleted() override;
  56. bool addTrack(const Track::Ptr &track) override;
  57. bool inputFrame(const Frame::Ptr &frame) override;
  58. private:
  59. bool parseStreamid(std::string &streamid);
  60. void emitOnPublish();
  61. void emitOnPlay();
  62. void doPlay();
  63. void doCachedFunc();
  64. private:
  65. bool _is_pusher = true;
  66. MediaInfo _media_info;
  67. uint64_t _total_bytes = 0;
  68. Ticker _alive_ticker;
  69. std::unique_ptr<sockaddr_storage> _addr;
  70. // for player
  71. TSMediaSource::RingType::RingReader::Ptr _ts_reader;
  72. // for pusher
  73. MultiMediaSourceMuxer::Ptr _muxer;
  74. DecoderImp::Ptr _decoder;
  75. std::recursive_mutex _func_mtx;
  76. std::deque<std::function<void()>> _cached_func;
  77. std::unordered_map<int, Stamp> _type_to_stamp;
  78. };
  79. } // namespace SRT
  80. #endif // ZLMEDIAKIT_SRT_TRANSPORT_IMP_H