mirror of
				https://github.com/kunkundi/crossdesk.git
				synced 2025-10-26 20:25:34 +08:00 
			
		
		
		
	1.Implementation for rtp session module; 2.Separate signal server from main project
This commit is contained in:
		| @@ -100,6 +100,7 @@ inline int ProcessMouseKeyEven(SDL_Event &ev) { | |||||||
|  |  | ||||||
| void GuestReceiveBuffer(const char *data, size_t size, const char *user_id, | void GuestReceiveBuffer(const char *data, size_t size, const char *user_id, | ||||||
|                         size_t user_id_size) { |                         size_t user_id_size) { | ||||||
|  |   std::cout << "Receive: [" << user_id << "] " << std::endl; | ||||||
|   memcpy(dst_buffer, data, size); |   memcpy(dst_buffer, data, size); | ||||||
|  |  | ||||||
|   SDL_Event event; |   SDL_Event event; | ||||||
|   | |||||||
							
								
								
									
										43
									
								
								application/signal_server/xmake.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								application/signal_server/xmake.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | |||||||
|  | set_project("projectx") | ||||||
|  | set_version("0.0.1") | ||||||
|  |  | ||||||
|  | add_rules("mode.release", "mode.debug") | ||||||
|  | set_languages("c++17") | ||||||
|  |  | ||||||
|  | add_rules("mode.release", "mode.debug") | ||||||
|  |  | ||||||
|  | add_requires("asio 1.24.0", "nlohmann_json", "spdlog 1.11.0") | ||||||
|  |  | ||||||
|  | add_defines("ASIO_STANDALONE", "ASIO_HAS_STD_TYPE_TRAITS", "ASIO_HAS_STD_SHARED_PTR",  | ||||||
|  |     "ASIO_HAS_STD_ADDRESSOF", "ASIO_HAS_STD_ATOMIC", "ASIO_HAS_STD_CHRONO", "ASIO_HAS_CSTDINT", "ASIO_HAS_STD_ARRAY", | ||||||
|  |     "ASIO_HAS_STD_SYSTEM_ERROR") | ||||||
|  |  | ||||||
|  | if is_os("windows") then | ||||||
|  |     add_defines("_WEBSOCKETPP_CPP11_INTERNAL_") | ||||||
|  |     add_links("ws2_32", "Bcrypt") | ||||||
|  |     add_requires("cuda") | ||||||
|  | elseif is_os("linux") then  | ||||||
|  |     add_links("pthread") | ||||||
|  |     set_config("cxxflags", "-fPIC") | ||||||
|  | end | ||||||
|  |  | ||||||
|  | add_packages("spdlog") | ||||||
|  |  | ||||||
|  | includes("../../thirdparty") | ||||||
|  |  | ||||||
|  | target("log") | ||||||
|  |     set_kind("headeronly") | ||||||
|  |     add_packages("spdlog") | ||||||
|  |     add_headerfiles("../../src/log/log.h") | ||||||
|  |     add_includedirs("../../src/log", {public = true}) | ||||||
|  |  | ||||||
|  | target("common") | ||||||
|  |     set_kind("headeronly") | ||||||
|  |     add_includedirs("../../src/common", {public = true}) | ||||||
|  |  | ||||||
|  | target("signal_server") | ||||||
|  |     set_kind("binary") | ||||||
|  |     add_deps("log", "common") | ||||||
|  |     add_files("*.cpp") | ||||||
|  |     add_packages("asio", "nlohmann_json", "spdlog") | ||||||
|  |     add_includedirs("../../thirdparty/websocketpp/include") | ||||||
| @@ -79,7 +79,7 @@ int VideoEncoder::Encode(const uint8_t *pData, int nSize) { | |||||||
|     return -1; |     return -1; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (0 == seq_++ % (30 * 5)) { |   if (0 == seq_++ % (30)) { | ||||||
|     ForceIdr(); |     ForceIdr(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| #ifndef _RTP_PACKET_H_ | #ifndef _RTP_PACKET_H_ | ||||||
| #define _RTP_PACKET_H_ | #define _RTP_PACKET_H_ | ||||||
|  |  | ||||||
| #include <cstring> | #include <stdint.h> | ||||||
|  |  | ||||||
| #include <vector> | #include <vector> | ||||||
|  |  | ||||||
| //  0                   1                   2                   3 | //  0                   1                   2                   3 | ||||||
| @@ -39,16 +40,18 @@ class RtpPacket { | |||||||
|  |  | ||||||
|  public: |  public: | ||||||
|   // Set Header |   // Set Header | ||||||
|   void SetMarker(bool has_marker) { marker_ = has_marker; } |   void SetVerion(uint32_t version) { version_ = version; } | ||||||
|   void SetPayloadType(uint8_t payload_type) { payload_type_ = payload_type; } |   void SetHasPadding(bool has_padding) { has_padding_ = has_padding; } | ||||||
|  |   void SetHasExtension(bool has_extension) { has_extension_ = has_extension; } | ||||||
|  |   void SetMarker(bool marker) { marker_ = marker; } | ||||||
|  |   void SetPayloadType(uint32_t payload_type) { payload_type_ = payload_type; } | ||||||
|   void SetSequenceNumber(uint16_t sequence_number) { |   void SetSequenceNumber(uint16_t sequence_number) { | ||||||
|     sequence_number_ = sequence_number; |     sequence_number_ = sequence_number; | ||||||
|   } |   } | ||||||
|   void SetTimestamp(uint32_t timestamp) { timestamp_ = timestamp; } |   void SetTimestamp(uint32_t timestamp) { timestamp_ = timestamp; } | ||||||
|   void SetSsrc(uint32_t ssrc) { ssrc_ = ssrc; } |   void SetSsrc(uint32_t ssrc) { ssrc_ = ssrc; } | ||||||
|   void SetCsrcs(){}; |   void SetCsrcs(std::vector<uint32_t> &csrcs) { csrcs_ = csrcs; } | ||||||
|  |  | ||||||
|   void SetHasExtension(bool has_extension) { has_extension_ = has_extension; }; |  | ||||||
|   void SetExtensionProfile(uint16_t extension_profile) { |   void SetExtensionProfile(uint16_t extension_profile) { | ||||||
|     extension_profile_ = extension_profile; |     extension_profile_ = extension_profile; | ||||||
|   } |   } | ||||||
| @@ -64,19 +67,21 @@ class RtpPacket { | |||||||
|  |  | ||||||
|  public: |  public: | ||||||
|   // Get Header |   // Get Header | ||||||
|   bool Marker() const { return marker_; } |   const uint32_t Verion() { return version_; } | ||||||
|   uint8_t PayloadType() const { return payload_type_; } |   const bool HasPadding() { return has_padding_; } | ||||||
|   uint16_t SequenceNumber() const { return sequence_number_; } |   const bool HasExtension() { return has_extension_; } | ||||||
|   uint32_t Timestamp() const { return timestamp_; } |   const bool Marker() { return marker_; } | ||||||
|   uint32_t Ssrc() const { return ssrc_; } |   const uint32_t PayloadType() { return payload_type_; } | ||||||
|   std::vector<uint32_t> Csrcs() const; |   const uint16_t SequenceNumber() { return sequence_number_; } | ||||||
|   bool HasExtension() const { return has_extension_; }; |   const uint32_t Timestamp() { return timestamp_; } | ||||||
|   uint16_t ExtensionProfile() const { return extension_profile_; } |   const uint32_t Ssrc() { return ssrc_; } | ||||||
|   uint8_t *ExtensionData() const { return extension_data_; } |   const std::vector<uint32_t> Csrcs() { return csrcs_; }; | ||||||
|  |   const uint16_t ExtensionProfile() { return extension_profile_; } | ||||||
|  |   const uint8_t *ExtensionData() { return extension_data_; } | ||||||
|  |  | ||||||
|   // Payload |   // Payload | ||||||
|   uint8_t *Payload() const { return payload_; }; |   const uint8_t *Payload() { return payload_; }; | ||||||
|   size_t PayloadSize() const { return payload_size_; } |   const size_t PayloadSize() { return payload_size_; } | ||||||
|  |  | ||||||
|  public: |  public: | ||||||
|   const uint8_t *Buffer() { return buffer_; } |   const uint8_t *Buffer() { return buffer_; } | ||||||
| @@ -89,7 +94,7 @@ class RtpPacket { | |||||||
|   bool has_extension_ = false; |   bool has_extension_ = false; | ||||||
|   uint32_t total_csrc_number_ = 0; |   uint32_t total_csrc_number_ = 0; | ||||||
|   bool marker_ = false; |   bool marker_ = false; | ||||||
|   uint8_t payload_type_ = 0; |   uint32_t payload_type_ = 0; | ||||||
|   uint16_t sequence_number_ = 0; |   uint16_t sequence_number_ = 0; | ||||||
|   uint32_t timestamp_ = 0; |   uint32_t timestamp_ = 0; | ||||||
|   uint32_t ssrc_ = 0; |   uint32_t ssrc_ = 0; | ||||||
|   | |||||||
							
								
								
									
										55
									
								
								src/rtp/rtp_session.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								src/rtp/rtp_session.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | |||||||
|  | #include "rtp_session.h" | ||||||
|  |  | ||||||
|  | #include <chrono> | ||||||
|  |  | ||||||
|  | #define RTP_VERSION 1 | ||||||
|  |  | ||||||
|  | RtpSession ::RtpSession(uint32_t payload_type) | ||||||
|  |     : version_(RTP_VERSION), | ||||||
|  |       has_padding_(false), | ||||||
|  |       has_extension_(false), | ||||||
|  |       payload_type_(payload_type), | ||||||
|  |       sequence_number_(0) {} | ||||||
|  |  | ||||||
|  | RtpSession ::~RtpSession() { | ||||||
|  |   if (extension_data_) { | ||||||
|  |     delete extension_data_; | ||||||
|  |     extension_data_ = nullptr; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   if (rtp_packet_) { | ||||||
|  |     delete rtp_packet_; | ||||||
|  |     rtp_packet_ = nullptr; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | RtpPacket RtpSession::Encode(uint8_t* buffer, size_t size) { | ||||||
|  |   if (!rtp_packet_) { | ||||||
|  |     rtp_packet_ = new RtpPacket(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   rtp_packet_->SetVerion(version_); | ||||||
|  |   rtp_packet_->SetHasPadding(has_padding_); | ||||||
|  |   rtp_packet_->SetHasExtension(has_extension_); | ||||||
|  |   rtp_packet_->SetMarker(marker_); | ||||||
|  |   rtp_packet_->SetPayloadType(payload_type_); | ||||||
|  |   rtp_packet_->SetSequenceNumber(sequence_number_++); | ||||||
|  |  | ||||||
|  |   timestamp_ = | ||||||
|  |       std::chrono::high_resolution_clock::now().time_since_epoch().count(); | ||||||
|  |   rtp_packet_->SetTimestamp(timestamp_); | ||||||
|  |   rtp_packet_->SetSsrc(ssrc_); | ||||||
|  |  | ||||||
|  |   if (!csrcs_.empty()) { | ||||||
|  |     rtp_packet_->SetCsrcs(csrcs_); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   if (has_extension_) { | ||||||
|  |     rtp_packet_->SetExtensionProfile(extension_profile_); | ||||||
|  |     rtp_packet_->SetExtensionData(extension_data_, extension_len_); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   rtp_packet_->Encode(buffer, size); | ||||||
|  |  | ||||||
|  |   return *rtp_packet_; | ||||||
|  | } | ||||||
							
								
								
									
										40
									
								
								src/rtp/rtp_session.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/rtp/rtp_session.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | |||||||
|  | #ifndef _RTP_SESSION_H_ | ||||||
|  | #define _RTP_SESSION_H_ | ||||||
|  |  | ||||||
|  | #include <stdint.h> | ||||||
|  |  | ||||||
|  | #include <vector> | ||||||
|  |  | ||||||
|  | #include "rtp_packet.h" | ||||||
|  |  | ||||||
|  | class RtpSession | ||||||
|  |  | ||||||
|  | { | ||||||
|  |  public: | ||||||
|  |   RtpSession(uint32_t payload_type); | ||||||
|  |   ~RtpSession(); | ||||||
|  |  | ||||||
|  |  public: | ||||||
|  |   RtpPacket Encode(uint8_t* buffer, size_t size); | ||||||
|  |  | ||||||
|  |  private: | ||||||
|  |   uint32_t version_ = 0; | ||||||
|  |   bool has_padding_ = false; | ||||||
|  |   bool has_extension_ = false; | ||||||
|  |   uint32_t total_csrc_number_ = 0; | ||||||
|  |   bool marker_ = false; | ||||||
|  |   uint8_t payload_type_ = 0; | ||||||
|  |   uint16_t sequence_number_ = 0; | ||||||
|  |   uint32_t timestamp_ = 0; | ||||||
|  |   uint32_t ssrc_ = 0; | ||||||
|  |   std::vector<uint32_t> csrcs_; | ||||||
|  |   uint16_t profile_ = 0; | ||||||
|  |   uint16_t extension_profile_ = 0; | ||||||
|  |   uint16_t extension_len_ = 0; | ||||||
|  |   uint8_t* extension_data_ = nullptr; | ||||||
|  |  | ||||||
|  |  private: | ||||||
|  |   RtpPacket* rtp_packet_ = nullptr; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #endif | ||||||
| @@ -29,6 +29,11 @@ IceTransmission::IceTransmission( | |||||||
|       on_receive_ice_msg_cb_(on_receive_ice_msg) {} |       on_receive_ice_msg_cb_(on_receive_ice_msg) {} | ||||||
|  |  | ||||||
| IceTransmission::~IceTransmission() { | IceTransmission::~IceTransmission() { | ||||||
|  |   if (rtp_session_) { | ||||||
|  |     delete rtp_session_; | ||||||
|  |     rtp_session_ = nullptr; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   if (ice_agent_) { |   if (ice_agent_) { | ||||||
|     delete ice_agent_; |     delete ice_agent_; | ||||||
|     ice_agent_ = nullptr; |     ice_agent_ = nullptr; | ||||||
| @@ -107,6 +112,7 @@ int IceTransmission::InitIceTransmission(std::string &ip, int port) { | |||||||
|     ikcp_release(kcp); |     ikcp_release(kcp); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|  |   rtp_session_ = new RtpSession(1); | ||||||
|   ice_agent_ = new IceAgent(ip, port); |   ice_agent_ = new IceAgent(ip, port); | ||||||
|  |  | ||||||
|   ice_agent_->CreateIceAgent( |   ice_agent_->CreateIceAgent( | ||||||
| @@ -269,12 +275,14 @@ int IceTransmission::SendData(const char *data, size_t size) { | |||||||
|  |  | ||||||
|     int num = 0; |     int num = 0; | ||||||
|     for (num = 0; num * 1400 < size; num++) { |     for (num = 0; num * 1400 < size; num++) { | ||||||
|       RtpPacket packet((uint8_t *)(data + num * 1400), 1400); |       RtpPacket packet = | ||||||
|  |           rtp_session_->Encode((uint8_t *)(data + num * 1400), 1400); | ||||||
|       send_ringbuffer_.push(packet); |       send_ringbuffer_.push(packet); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (size - num * 1400 > 0) { |     if (size > num * 1400 && size - num * 1400 > 0) { | ||||||
|       RtpPacket packet((uint8_t *)(data + num * 1400), size - num * 1400); |       RtpPacket packet = rtp_session_->Encode((uint8_t *)(data + num * 1400), | ||||||
|  |                                               size - num * 1400); | ||||||
|       send_ringbuffer_.push(packet); |       send_ringbuffer_.push(packet); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ | |||||||
| #include "ice_agent.h" | #include "ice_agent.h" | ||||||
| #include "ringbuffer.h" | #include "ringbuffer.h" | ||||||
| #include "rtp_packet.h" | #include "rtp_packet.h" | ||||||
|  | #include "rtp_session.h" | ||||||
| #include "ws_transmission.h" | #include "ws_transmission.h" | ||||||
| class IceTransmission { | class IceTransmission { | ||||||
|  public: |  public: | ||||||
| @@ -72,6 +73,9 @@ class IceTransmission { | |||||||
|   RingBuffer<RtpPacket> recv_ringbuffer_; |   RingBuffer<RtpPacket> recv_ringbuffer_; | ||||||
|   bool kcp_stop_ = false; |   bool kcp_stop_ = false; | ||||||
|   std::thread *kcp_update_thread_ = nullptr; |   std::thread *kcp_update_thread_ = nullptr; | ||||||
|  |  | ||||||
|  |  private: | ||||||
|  |   RtpSession *rtp_session_ = nullptr; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
							
								
								
									
										2
									
								
								thirdparty/nvcodec/Interface/nvEncodeAPI.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								thirdparty/nvcodec/Interface/nvEncodeAPI.h
									
									
									
									
										vendored
									
									
								
							| @@ -1522,7 +1522,7 @@ typedef struct _NV_ENC_RC_PARAMS { | |||||||
|                                only used if enableLookahead=1.*/ |                                only used if enableLookahead=1.*/ | ||||||
|   uint8_t lowDelayKeyFrameScale; /**< [in]: Specifies the ratio of I frame bits |   uint8_t lowDelayKeyFrameScale; /**< [in]: Specifies the ratio of I frame bits | ||||||
|                                     to P frame bits in case of single frame VBV |                                     to P frame bits in case of single frame VBV | ||||||
|                                     and CBR rate control mode, is set to 2 by |                                     and CBR rate control mode, is set 2 by | ||||||
|                                     default for low latency tuning info and 1 by |                                     default for low latency tuning info and 1 by | ||||||
|                                     default for ultra low latency tuning info */ |                                     default for ultra low latency tuning info */ | ||||||
|   uint8_t reserved1[3]; |   uint8_t reserved1[3]; | ||||||
|   | |||||||
| @@ -27,6 +27,7 @@ add_packages("spdlog") | |||||||
|  |  | ||||||
| includes("thirdparty") | includes("thirdparty") | ||||||
| includes("application/remote_desk") | includes("application/remote_desk") | ||||||
|  | includes("application/signal_server") | ||||||
|  |  | ||||||
| target("log") | target("log") | ||||||
|     set_kind("headeronly") |     set_kind("headeronly") | ||||||
| @@ -113,13 +114,6 @@ target("projectx") | |||||||
|     -- set_policy("build.merge_archive", true) |     -- set_policy("build.merge_archive", true) | ||||||
|     -- set_targetdir("$(projectdir)/libdrtc/lib") |     -- set_targetdir("$(projectdir)/libdrtc/lib") | ||||||
|  |  | ||||||
| target("signal_server") |  | ||||||
|     set_kind("binary") |  | ||||||
|     add_deps("log", "common") |  | ||||||
|     add_files("tests/signal_server/*.cpp") |  | ||||||
|     add_packages("asio", "nlohmann_json", "spdlog") |  | ||||||
|     add_includedirs("thirdparty/websocketpp/include") |  | ||||||
|  |  | ||||||
| target("host") | target("host") | ||||||
|     set_kind("binary") |     set_kind("binary") | ||||||
|     add_deps("projectx") |     add_deps("projectx") | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user