23 public network::interface::UdpServer::PacketHandler,
24 public webrtc::RtpVideoStreamReceiver2::OnCompleteFrameCallback,
25 public std::enable_shared_from_this<RtpCapturerVideoSource> {
29 std::shared_ptr<codec::VideoCodec> codec,
30 std::unique_ptr<network::interface::UdpServer> udp_server,
31 std::shared_ptr<interface::RtpCapturerVideoSourceRepository> repository,
32 std::unique_ptr<rtc::Thread> depacketize_th);
47 static std::shared_ptr<RtpCapturerVideoSource>
Create(
54 std::optional<uint16_t> GetFrameId()
override;
55 void RegisterCallback(webrtc::EncodedImageCallback* callback)
override;
56 std::string Endpoint()
const override;
57 void OnEncoderReleased(webrtc::EncodedImageCallback* callback)
override;
58 rtc::scoped_refptr<media::interface::InternalCapturerVideoSource> GetSource()
override;
60 void OnPacketReceived(
const uint8_t* data,
size_t size)
override;
62 void OnCompleteFrame(std::unique_ptr<webrtc::EncodedFrame> frame)
override;
63 void SendKeyFrameRequest()
override;
67 std::unique_ptr<webrtc::RtpVideoStreamReceiver2> CreateReceiver(
68 const webrtc::RtpPacketReceived& packet);
69 void DummyFrameLoop(uint16_t frame_id);
70 uint64_t GenerateSsrc()
const;
71 webrtc::VideoReceiveStreamInterface::Config CreateRtpVideoStreamReceiver2Config();
73 std::shared_ptr<codec::VideoCodec> codec_;
74 std::unique_ptr<rtc::Thread> depacketize_th_ =
nullptr;
76 RtcpTransport transport_;
77 rtc::scoped_refptr<I420CapturerVideoSource::I420InternalCapturerVideoSource> source_;
78 std::unique_ptr<network::interface::UdpServer> udp_server_;
79 std::mutex callbacks_mtx_;
80 std::unordered_set<webrtc::EncodedImageCallback*> callbacks_;
81 std::unique_ptr<webrtc::FieldTrials> trials_ =
nullptr;
82 webrtc::VideoReceiveStreamInterface::Config config_;
83 std::unique_ptr<webrtc::TaskQueueBase, webrtc::TaskQueueDeleter> encoded_image_queue_ =
nullptr;
84 std::unique_ptr<webrtc::RtpVideoStreamReceiver2> receiver_ =
nullptr;
85 uint64_t receiver_generation_ = 0;
86 std::atomic<bool> frame_loop_stopped_ =
true;
87 std::unique_ptr<global::interface::Worker> dummy_frame_worker_;
88 std::atomic<std::optional<uint16_t>> frame_id_;
89 std::atomic<bool> is_receiving =
false;
90 std::weak_ptr<interface::RtpCapturerVideoSourceRepository> repo_;
94 friend class RtpCapturerVideoSourceTest;