SkyWay Linux SDK
読み取り中…
検索中…
一致する文字列を見つけられません
rtp_capturer_video_source.hpp
1#ifndef SKYWAY_MEDIA_RTP_RTP_CAPTURER_VIDEO_SOURCE_HPP_
2#define SKYWAY_MEDIA_RTP_RTP_CAPTURER_VIDEO_SOURCE_HPP_
3
4#include <cstdint>
5
6#include <api/field_trials.h>
7#include <video/rtp_video_stream_receiver2.h>
8
9#include "skyway/global/interface/worker.hpp"
10#include "skyway/media/codec/video_codec.hpp"
11#include "skyway/media/i420_capturer_video_source.hpp"
12#include "skyway/media/rtp/interface/rtp_capturer_video_source.hpp"
13#include "skyway/media/rtp/interface/rtp_capturer_video_source_repository.hpp"
14#include "skyway/media/rtp/rtcp_transport.hpp"
15#include "skyway/network/interface/udp_client.hpp"
16#include "skyway/network/interface/udp_server.hpp"
17
18namespace skyway {
19namespace media {
20namespace rtp {
21
23 public network::interface::UdpServer::PacketHandler,
24 public webrtc::RtpVideoStreamReceiver2::OnCompleteFrameCallback,
25 public std::enable_shared_from_this<RtpCapturerVideoSource> {
26public:
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);
35
47 static std::shared_ptr<RtpCapturerVideoSource> Create(
49
50 bool StartReceiving() override;
51 bool StopReceiving() override;
52
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;
59 // Impl network::interface::UdpServer::PacketHandler
60 void OnPacketReceived(const uint8_t* data, size_t size) override;
61 // Impl webrtc::RtpVideoStreamReceiver2::OnCompleteFrameCallback
62 void OnCompleteFrame(std::unique_ptr<webrtc::EncodedFrame> frame) override;
63 void SendKeyFrameRequest() override;
65private:
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();
72
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_;
91
92public:
94 friend class RtpCapturerVideoSourceTest;
96};
97
98} // namespace rtp
99} // namespace media
100} // namespace skyway
101
102#endif /* SKYWAY_MEDIA_RTP_RTP_CAPTURER_VIDEO_SOURCE_HPP_ */
Definition rtp_capturer_video_source.hpp:25
bool StopReceiving() override
UDPサーバを停止し、RTPパケットの受信を停止します。
bool StartReceiving() override
UDPサーバを起動し、RTPパケットの受信を開始します。
static std::shared_ptr< RtpCapturerVideoSource > Create(const interface::RtpCapturerVideoSourceOptions &options)
RTPキャプチャビデオソースのインスタンスを作成します。
RTPキャプチャビデオソース
Definition rtp_capturer_video_source.hpp:64
virtual ~RtpCapturerVideoSource()=default
デストラクタ
RTPキャプチャビデオソースのオプション
Definition rtp_capturer_video_source.hpp:14