SkyWay Linux SDK
読み取り中…
検索中…
一致する文字列を見つけられません
rtp_capturer_video_source.hpp
1//
2// © NTT DOCOMO BUSINESS, Inc. All Rights Reserved.
3//
4
5#ifndef SKYWAY_MEDIA_RTP_RTP_CAPTURER_VIDEO_SOURCE_HPP_
6#define SKYWAY_MEDIA_RTP_RTP_CAPTURER_VIDEO_SOURCE_HPP_
7
8#include <api/field_trials.h>
9#include <video/rtp_video_stream_receiver2.h>
10
11#include "skyway/global/interface/worker.hpp"
12#include "skyway/media/codec/video_codec.hpp"
13#include "skyway/media/i420_capturer_video_source.hpp"
14#include "skyway/media/rtp/interface/rtp_capturer_video_source.hpp"
15#include "skyway/media/rtp/interface/rtp_capturer_video_source_repository.hpp"
16#include "skyway/media/rtp/rtcp_transport.hpp"
17#include "skyway/network/interface/udp_client.hpp"
18#include "skyway/network/interface/udp_server.hpp"
19
20namespace skyway {
21namespace media {
22namespace rtp {
23
25 public network::interface::UdpServer::PacketHandler,
26 public webrtc::RtpVideoStreamReceiver2::OnCompleteFrameCallback,
27 public std::enable_shared_from_this<RtpCapturerVideoSource> {
28public:
31 std::shared_ptr<codec::VideoCodec> codec,
32 std::unique_ptr<network::interface::UdpServer> udp_server,
33 std::shared_ptr<interface::RtpCapturerVideoSourceRepository> repository,
34 std::unique_ptr<rtc::Thread> depacketize_th);
37
49 static std::shared_ptr<RtpCapturerVideoSource> Create(
51
52 bool StartReceiving() override;
53 bool StopReceiving() override;
54
56 std::optional<uint8_t> GetFrameId() override;
57 void RegisterCallback(webrtc::EncodedImageCallback* callback) override;
58 std::string Endpoint() const override;
59 void OnEncoderReleased(webrtc::EncodedImageCallback* callback) override;
60 rtc::scoped_refptr<media::interface::InternalCapturerVideoSource> GetSource() override;
61 // Impl network::interface::UdpServer::PacketHandler
62 void OnPacketReceived(const uint8_t* data, size_t size) override;
63 // Impl webrtc::RtpVideoStreamReceiver2::OnCompleteFrameCallback
64 void OnCompleteFrame(std::unique_ptr<webrtc::EncodedFrame> frame) override;
65 void SendKeyFrameRequest() override;
67private:
69 std::unique_ptr<webrtc::RtpVideoStreamReceiver2> CreateReceiver(
70 const webrtc::RtpPacketReceived& packet);
71 void DummyFrameLoop(uint16_t frame_id);
72 uint64_t GenerateSsrc() const;
73 webrtc::VideoReceiveStreamInterface::Config CreateRtpVideoStreamReceiver2Config();
74
75 std::shared_ptr<codec::VideoCodec> codec_;
76 std::unique_ptr<rtc::Thread> depacketize_th_ = nullptr;
78 RtcpTransport transport_;
79 rtc::scoped_refptr<I420CapturerVideoSource::I420InternalCapturerVideoSource> source_;
80 std::unique_ptr<network::interface::UdpServer> udp_server_;
81 std::mutex callbacks_mtx_;
82 std::unordered_set<webrtc::EncodedImageCallback*> callbacks_;
83 std::unique_ptr<webrtc::FieldTrials> trials_ = nullptr;
84 webrtc::VideoReceiveStreamInterface::Config config_;
85 std::unique_ptr<webrtc::TaskQueueBase, webrtc::TaskQueueDeleter> encoded_image_queue_ = nullptr;
86 std::unique_ptr<webrtc::RtpVideoStreamReceiver2> receiver_ = nullptr;
87 std::atomic<bool> frame_loop_stopped_ = true;
88 std::unique_ptr<global::interface::Worker> dummy_frame_worker_;
89 std::atomic<std::optional<uint16_t>> frame_id_;
90 std::atomic<bool> is_receiving = false;
91 std::weak_ptr<interface::RtpCapturerVideoSourceRepository> repo_;
92
93public:
95 friend class RtpCapturerVideoSourceTest;
97};
98
99} // namespace rtp
100} // namespace media
101} // namespace skyway
102
103#endif /* SKYWAY_MEDIA_RTP_RTP_CAPTURER_VIDEO_SOURCE_HPP_ */
Definition rtp_capturer_video_source.hpp:27
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:68
virtual ~RtpCapturerVideoSource()=default
デストラクタ
RTPキャプチャビデオソースのオプション
Definition rtp_capturer_video_source.hpp:18