mirror of
				https://github.com/kunkundi/crossdesk.git
				synced 2025-10-26 20:25:34 +08:00 
			
		
		
		
	[fix] fix unused variables and type conversions
This commit is contained in:
		| @@ -51,10 +51,10 @@ uint8_t **FecEncoder::Encode(const char *data, size_t len) { | |||||||
|   uint8_t **fec_packets = nullptr; |   uint8_t **fec_packets = nullptr; | ||||||
|  |  | ||||||
|   unsigned int last_packet_size = len % max_size_of_packet_; |   unsigned int last_packet_size = len % max_size_of_packet_; | ||||||
|   unsigned int num_of_source_packets = |   uint8_t num_of_source_packets = | ||||||
|       len / max_size_of_packet_ + (last_packet_size ? 1 : 0); |       (uint8_t)(len / max_size_of_packet_) + (last_packet_size ? 1 : 0); | ||||||
|   unsigned int num_of_total_packets = |   uint8_t num_of_total_packets = | ||||||
|       (unsigned int)floor((double)num_of_source_packets / code_rate_); |       (uint8_t)floor((double)num_of_source_packets / code_rate_); | ||||||
|  |  | ||||||
|   fec_params_->nb_source_symbols = num_of_source_packets; |   fec_params_->nb_source_symbols = num_of_source_packets; | ||||||
|   fec_params_->nb_repair_symbols = num_of_total_packets - num_of_source_packets; |   fec_params_->nb_repair_symbols = num_of_total_packets - num_of_source_packets; | ||||||
| @@ -74,8 +74,8 @@ uint8_t **FecEncoder::Encode(const char *data, size_t len) { | |||||||
|     return nullptr; |     return nullptr; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   for (unsigned int esi = 0; esi < num_of_source_packets; esi++) { |   for (int esi = 0; esi < num_of_source_packets; esi++) { | ||||||
|     if (esi != num_of_source_packets - 1) { |     if (esi != (num_of_source_packets - 1)) { | ||||||
|       fec_packets[esi] = |       fec_packets[esi] = | ||||||
|           (uint8_t *)calloc(max_size_of_packet_, sizeof(uint8_t)); |           (uint8_t *)calloc(max_size_of_packet_, sizeof(uint8_t)); | ||||||
|       if (nullptr == fec_packets[esi]) { |       if (nullptr == fec_packets[esi]) { | ||||||
| @@ -126,12 +126,12 @@ int FecEncoder::ReleaseFecPackets(uint8_t **fec_packets, size_t len) { | |||||||
|     return -1; |     return -1; | ||||||
|   } |   } | ||||||
|   unsigned int last_packet_size = len % max_size_of_packet_; |   unsigned int last_packet_size = len % max_size_of_packet_; | ||||||
|   unsigned int num_of_source_packets = |   uint8_t num_of_source_packets = | ||||||
|       len / max_size_of_packet_ + (last_packet_size ? 1 : 0); |       (uint8_t)(len / max_size_of_packet_) + (last_packet_size ? 1 : 0); | ||||||
|   unsigned int num_of_total_packets = |   uint8_t num_of_total_packets = | ||||||
|       (unsigned int)floor((double)num_of_source_packets / code_rate_); |       (uint8_t)floor((double)num_of_source_packets / code_rate_); | ||||||
|  |  | ||||||
|   for (unsigned int esi = 0; esi < num_of_total_packets; esi++) { |   for (int esi = 0; esi < num_of_total_packets; esi++) { | ||||||
|     if (fec_packets[esi]) { |     if (fec_packets[esi]) { | ||||||
|       free(fec_packets[esi]); |       free(fec_packets[esi]); | ||||||
|     } |     } | ||||||
| @@ -142,12 +142,12 @@ int FecEncoder::ReleaseFecPackets(uint8_t **fec_packets, size_t len) { | |||||||
| } | } | ||||||
|  |  | ||||||
| void FecEncoder::GetFecPacketsParams(unsigned int source_length, | void FecEncoder::GetFecPacketsParams(unsigned int source_length, | ||||||
|                                      unsigned int &num_of_total_packets, |                                      uint8_t &num_of_total_packets, | ||||||
|                                      unsigned int &num_of_source_packets, |                                      uint8_t &num_of_source_packets, | ||||||
|                                      unsigned int &last_packet_size) { |                                      unsigned int &last_packet_size) { | ||||||
|   last_packet_size = source_length % max_size_of_packet_; |   last_packet_size = source_length % max_size_of_packet_; | ||||||
|   num_of_source_packets = |   num_of_source_packets = (uint8_t)(source_length / max_size_of_packet_) + | ||||||
|       source_length / max_size_of_packet_ + (last_packet_size ? 1 : 0); |                           (last_packet_size ? 1 : 0); | ||||||
|   num_of_total_packets = |   num_of_total_packets = | ||||||
|       (unsigned int)floor((double)num_of_source_packets / code_rate_); |       (uint8_t)floor((double)num_of_source_packets / code_rate_); | ||||||
| } | } | ||||||
| @@ -29,8 +29,8 @@ class FecEncoder { | |||||||
|   uint8_t **Encode(const char *data, size_t len); |   uint8_t **Encode(const char *data, size_t len); | ||||||
|   int ReleaseFecPackets(uint8_t **fec_packets, size_t len); |   int ReleaseFecPackets(uint8_t **fec_packets, size_t len); | ||||||
|   void GetFecPacketsParams(unsigned int source_length, |   void GetFecPacketsParams(unsigned int source_length, | ||||||
|                            unsigned int &num_of_total_packets, |                            uint8_t &num_of_total_packets, | ||||||
|                            unsigned int &num_of_source_packets, |                            uint8_t &num_of_source_packets, | ||||||
|                            unsigned int &last_packet_size); |                            unsigned int &last_packet_size); | ||||||
|  |  | ||||||
|  private: |  private: | ||||||
|   | |||||||
| @@ -119,7 +119,7 @@ DLLAPI int SendVideoFrame(PeerPtr* peer_ptr, const XVideoFrame* video_frame); | |||||||
|  |  | ||||||
| DLLAPI int SendAudioFrame(PeerPtr* peer_ptr, const char* data, size_t size); | DLLAPI int SendAudioFrame(PeerPtr* peer_ptr, const char* data, size_t size); | ||||||
|  |  | ||||||
| DLLAPI int SendData(PeerPtr* peer_ptr, const char* data, size_t size); | DLLAPI int SendDataFrame(PeerPtr* peer_ptr, const char* data, size_t size); | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
|   | |||||||
| @@ -11,14 +11,7 @@ using nlohmann::json; | |||||||
|  |  | ||||||
| PeerConnection::PeerConnection() {} | PeerConnection::PeerConnection() {} | ||||||
|  |  | ||||||
| PeerConnection::~PeerConnection() { | PeerConnection::~PeerConnection() { user_data_ = nullptr; } | ||||||
|   if (nv12_data_) { |  | ||||||
|     delete nv12_data_; |  | ||||||
|     nv12_data_ = nullptr; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   user_data_ = nullptr; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int PeerConnection::Init(PeerConnectionParams params, | int PeerConnection::Init(PeerConnectionParams params, | ||||||
|                          const std::string &user_id) { |                          const std::string &user_id) { | ||||||
| @@ -190,30 +183,6 @@ int PeerConnection::Init(PeerConnectionParams params, | |||||||
|     } |     } | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   on_net_status_report_ = [this]( |  | ||||||
|                               const std::string &user_id, |  | ||||||
|                               IceTransmission::TraversalType mode, |  | ||||||
|                               const uint64_t video_in, const uint64_t video_out, |  | ||||||
|                               const uint64_t audio_in, const uint64_t audio_out, |  | ||||||
|                               const uint64_t data_in, const uint64_t data_out, |  | ||||||
|                               const uint64_t total_in, const uint64_t total_out, |  | ||||||
|                               void *user_ptr) { |  | ||||||
|     if (net_status_report_) { |  | ||||||
|       XNetTrafficStats net_traffic_stats; |  | ||||||
|       net_traffic_stats.video_in = video_in; |  | ||||||
|       net_traffic_stats.video_out = video_out; |  | ||||||
|       net_traffic_stats.audio_in = audio_in; |  | ||||||
|       net_traffic_stats.audio_out = audio_out; |  | ||||||
|       net_traffic_stats.data_in = data_in; |  | ||||||
|       net_traffic_stats.data_out = data_out; |  | ||||||
|       net_traffic_stats.total_in = total_in; |  | ||||||
|       net_traffic_stats.total_out = total_out; |  | ||||||
|  |  | ||||||
|       net_status_report_(user_id.data(), user_id.size(), TraversalMode(mode), |  | ||||||
|                          &net_traffic_stats, user_data_); |  | ||||||
|     } |  | ||||||
|   }; |  | ||||||
|  |  | ||||||
|   ws_transport_ = std::make_shared<WsClient>(on_receive_ws_msg_, on_ws_status_); |   ws_transport_ = std::make_shared<WsClient>(on_receive_ws_msg_, on_ws_status_); | ||||||
|   uri_ = "ws://" + cfg_signal_server_ip_ + ":" + cfg_signal_server_port_; |   uri_ = "ws://" + cfg_signal_server_ip_ + ":" + cfg_signal_server_port_; | ||||||
|   if (ws_transport_) { |   if (ws_transport_) { | ||||||
| @@ -225,8 +194,6 @@ int PeerConnection::Init(PeerConnectionParams params, | |||||||
|   // do { |   // do { | ||||||
|   // } while (SignalStatus::SignalConnected != GetSignalStatus()); |   // } while (SignalStatus::SignalConnected != GetSignalStatus()); | ||||||
|  |  | ||||||
|   nv12_data_ = new char[1280 * 720 * 3 / 2]; |  | ||||||
|  |  | ||||||
|   LOG_INFO("[{}] Init finish", user_id); |   LOG_INFO("[{}] Init finish", user_id); | ||||||
|  |  | ||||||
|   inited_ = true; |   inited_ = true; | ||||||
| @@ -349,11 +316,6 @@ int PeerConnection::Destroy() { | |||||||
|     ws_transport_->Close(); |     ws_transport_->Close(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (nv12_data_) { |  | ||||||
|     delete nv12_data_; |  | ||||||
|     nv12_data_ = nullptr; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -381,8 +343,7 @@ SignalStatus PeerConnection::GetSignalStatus() { | |||||||
|   return signal_status_; |   return signal_status_; | ||||||
| } | } | ||||||
|  |  | ||||||
| // media send | int PeerConnection::SendVideoFrame(const XVideoFrame *video_frame) { | ||||||
| int PeerConnection::SendVideoData(const XVideoFrame *video_frame) { |  | ||||||
|   if (ice_transmission_list_.empty()) { |   if (ice_transmission_list_.empty()) { | ||||||
|     return -1; |     return -1; | ||||||
|   } |   } | ||||||
| @@ -392,13 +353,13 @@ int PeerConnection::SendVideoData(const XVideoFrame *video_frame) { | |||||||
|       continue; |       continue; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     ice_trans.second->SendVideoData(video_frame); |     ice_trans.second->SendVideoFrame(video_frame); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| int PeerConnection::SendAudioData(const char *data, size_t size) { | int PeerConnection::SendAudioFrame(const char *data, size_t size) { | ||||||
|   if (ice_transmission_list_.empty()) { |   if (ice_transmission_list_.empty()) { | ||||||
|     return -1; |     return -1; | ||||||
|   } |   } | ||||||
| @@ -407,18 +368,18 @@ int PeerConnection::SendAudioData(const char *data, size_t size) { | |||||||
|     if (!is_ice_transmission_ready_[ice_trans.first]) { |     if (!is_ice_transmission_ready_[ice_trans.first]) { | ||||||
|       continue; |       continue; | ||||||
|     } |     } | ||||||
|     ice_trans.second->SendAudioData(data, size); |     ice_trans.second->SendAudioFrame(data, size); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| int PeerConnection::SendUserData(const char *data, size_t size) { | int PeerConnection::SendDataFrame(const char *data, size_t size) { | ||||||
|   for (auto &ice_trans : ice_transmission_list_) { |   for (auto &ice_trans : ice_transmission_list_) { | ||||||
|     if (!is_ice_transmission_ready_[ice_trans.first]) { |     if (!is_ice_transmission_ready_[ice_trans.first]) { | ||||||
|       continue; |       continue; | ||||||
|     } |     } | ||||||
|     ice_trans.second->SendUserData(data, size); |     ice_trans.second->SendDataFrame(data, size); | ||||||
|   } |   } | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
| @@ -652,7 +613,7 @@ void PeerConnection::ProcessIceWorkMsg(const IceWorkMsg &msg) { | |||||||
|             on_receive_data_buffer_); |             on_receive_data_buffer_); | ||||||
|  |  | ||||||
|         ice_transmission_list_[remote_user_id]->SetOnReceiveNetStatusReportFunc( |         ice_transmission_list_[remote_user_id]->SetOnReceiveNetStatusReportFunc( | ||||||
|             on_net_status_report_); |             net_status_report_); | ||||||
|  |  | ||||||
|         ice_transmission_list_[remote_user_id]->InitIceTransmission( |         ice_transmission_list_[remote_user_id]->InitIceTransmission( | ||||||
|             cfg_stun_server_ip_, stun_server_port_, cfg_turn_server_ip_, |             cfg_stun_server_ip_, stun_server_port_, cfg_turn_server_ip_, | ||||||
| @@ -700,7 +661,7 @@ void PeerConnection::ProcessIceWorkMsg(const IceWorkMsg &msg) { | |||||||
|             on_receive_data_buffer_); |             on_receive_data_buffer_); | ||||||
|  |  | ||||||
|         ice_transmission_list_[remote_user_id]->SetOnReceiveNetStatusReportFunc( |         ice_transmission_list_[remote_user_id]->SetOnReceiveNetStatusReportFunc( | ||||||
|             on_net_status_report_); |             net_status_report_); | ||||||
|  |  | ||||||
|         ice_transmission_list_[remote_user_id]->InitIceTransmission( |         ice_transmission_list_[remote_user_id]->InitIceTransmission( | ||||||
|             cfg_stun_server_ip_, stun_server_port_, cfg_turn_server_ip_, |             cfg_stun_server_ip_, stun_server_port_, cfg_turn_server_ip_, | ||||||
|   | |||||||
| @@ -1,3 +1,9 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: DI JUNKUN | ||||||
|  |  * @Date: 2024-11-26 | ||||||
|  |  * Copyright (c) 2024 by DI JUNKUN, All Rights Reserved. | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #ifndef _PEER_CONNECTION_H_ | #ifndef _PEER_CONNECTION_H_ | ||||||
| #define _PEER_CONNECTION_H_ | #define _PEER_CONNECTION_H_ | ||||||
|  |  | ||||||
| @@ -95,11 +101,9 @@ class PeerConnection { | |||||||
|  |  | ||||||
|   SignalStatus GetSignalStatus(); |   SignalStatus GetSignalStatus(); | ||||||
|  |  | ||||||
|   int SendVideoData(const char *data, size_t size); |   int SendVideoFrame(const XVideoFrame *video_frame); | ||||||
|   int SendAudioData(const char *data, size_t size); |   int SendAudioFrame(const char *data, size_t size); | ||||||
|   int SendUserData(const char *data, size_t size); |   int SendDataFrame(const char *data, size_t size); | ||||||
|  |  | ||||||
|   int SendVideoData(const XVideoFrame *video_frame); |  | ||||||
|  |  | ||||||
|  private: |  private: | ||||||
|   int Login(); |   int Login(); | ||||||
| @@ -186,7 +190,6 @@ class PeerConnection { | |||||||
|   NetStatusReport net_status_report_; |   NetStatusReport net_status_report_; | ||||||
|   void *user_data_; |   void *user_data_; | ||||||
|  |  | ||||||
|   char *nv12_data_ = nullptr; |  | ||||||
|   bool inited_ = false; |   bool inited_ = false; | ||||||
|   std::string password_; |   std::string password_; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,8 @@ | |||||||
| #ifndef _RINGBUFFER_H_ | #ifndef _RINGBUFFER_H_ | ||||||
| #define _RINGBUFFER_H_ | #define _RINGBUFFER_H_ | ||||||
|  |  | ||||||
|  | #include <cstddef> | ||||||
|  | #include <cstdint> | ||||||
| #include <cstring> | #include <cstring> | ||||||
|  |  | ||||||
| int RingBufferDummy(); | int RingBufferDummy(); | ||||||
| @@ -9,7 +11,7 @@ class Data { | |||||||
|  public: |  public: | ||||||
|   Data() = default; |   Data() = default; | ||||||
|  |  | ||||||
|   Data(const char* data, size_t size) { |   Data(const char* data, uint32_t size) { | ||||||
|     data_ = new char[size]; |     data_ = new char[size]; | ||||||
|     memcpy(data_, data, size); |     memcpy(data_, data, size); | ||||||
|     size_ = size; |     size_ = size; | ||||||
| @@ -36,12 +38,12 @@ class Data { | |||||||
|     size_ = 0; |     size_ = 0; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   size_t size() const { return size_; } |   uint32_t size() const { return size_; } | ||||||
|   char* data() const { return data_; } |   char* data() const { return data_; } | ||||||
|  |  | ||||||
|  public: |  public: | ||||||
|   char* data_ = nullptr; |   char* data_ = nullptr; | ||||||
|   size_t size_ = 0; |   uint32_t size_ = 0; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| template <typename T> | template <typename T> | ||||||
| @@ -101,8 +103,8 @@ class RingBuffer { | |||||||
|  |  | ||||||
|  private: |  private: | ||||||
|   unsigned int m_size; |   unsigned int m_size; | ||||||
|   int m_front; |   unsigned int m_front; | ||||||
|   int m_rear; |   unsigned int m_rear; | ||||||
|   T* m_data; |   T* m_data; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -112,7 +112,7 @@ DLLAPI int SendVideoFrame(PeerPtr *peer_ptr, const XVideoFrame *video_frame) { | |||||||
|     return -1; |     return -1; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   peer_ptr->peer_connection->SendVideoData(video_frame); |   peer_ptr->peer_connection->SendVideoFrame(video_frame); | ||||||
|  |  | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
| @@ -128,12 +128,12 @@ DLLAPI int SendAudioFrame(PeerPtr *peer_ptr, const char *data, size_t size) { | |||||||
|     return -1; |     return -1; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   peer_ptr->peer_connection->SendAudioData(data, size); |   peer_ptr->peer_connection->SendAudioFrame(data, size); | ||||||
|  |  | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| int SendData(PeerPtr *peer_ptr, const char *data, size_t size) { | int SendDataFrame(PeerPtr *peer_ptr, const char *data, size_t size) { | ||||||
|   if (!peer_ptr) { |   if (!peer_ptr) { | ||||||
|     LOG_ERROR("peer_ptr not created"); |     LOG_ERROR("peer_ptr not created"); | ||||||
|     return -1; |     return -1; | ||||||
| @@ -144,7 +144,7 @@ int SendData(PeerPtr *peer_ptr, const char *data, size_t size) { | |||||||
|     return -1; |     return -1; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   peer_ptr->peer_connection->SendUserData(data, size); |   peer_ptr->peer_connection->SendDataFrame(data, size); | ||||||
|  |  | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
| @@ -30,7 +30,7 @@ struct Obu { | |||||||
|   uint8_t header; |   uint8_t header; | ||||||
|   uint8_t extension_header;  // undefined if (header & kXbit) == 0 |   uint8_t extension_header;  // undefined if (header & kXbit) == 0 | ||||||
|   std::vector<uint8_t> payload; |   std::vector<uint8_t> payload; | ||||||
|   int size;  // size of the header and payload combined. |   size_t size;  // size of the header and payload combined. | ||||||
| }; | }; | ||||||
|  |  | ||||||
| struct Packet { | struct Packet { | ||||||
|   | |||||||
| @@ -101,11 +101,11 @@ std::vector<Obu> ParseObus(uint8_t* payload, int payload_size) { | |||||||
|       payload_reader.Consume(size); |       payload_reader.Consume(size); | ||||||
|     } |     } | ||||||
|     obu.size += obu.payload.size(); |     obu.size += obu.payload.size(); | ||||||
|     // Skip obus that shouldn't be transfered over rtp. |  | ||||||
|     int obu_type = ObuType(obu.header); |  | ||||||
|     if (has_ext_header) { |     if (has_ext_header) { | ||||||
|       obu.payload.insert(obu.payload.begin(), obu.extension_header); |       obu.payload.insert(obu.payload.begin(), obu.extension_header); | ||||||
|     } |     } | ||||||
|  |     // Skip obus that shouldn't be transfered over rtp. | ||||||
|  |     // int obu_type = ObuType(obu.header); | ||||||
|     obu.payload.insert(obu.payload.begin(), obu.header); |     obu.payload.insert(obu.payload.begin(), obu.header); | ||||||
|     // if (obu_type != kObuTypeTemporalDelimiter &&  // |     // if (obu_type != kObuTypeTemporalDelimiter &&  // | ||||||
|     //     obu_type != kObuTypeTileList &&           // |     //     obu_type != kObuTypeTileList &&           // | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ void RtpAudioReceiver::InsertRtpPacket(RtpPacket& rtp_packet) { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (rtp_statistics_) { |   if (rtp_statistics_) { | ||||||
|     rtp_statistics_->UpdateReceiveBytes(rtp_packet.Size()); |     rtp_statistics_->UpdateReceiveBytes((uint32_t)rtp_packet.Size()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (CheckIsTimeSendRR()) { |   if (CheckIsTimeSendRR()) { | ||||||
|   | |||||||
| @@ -42,9 +42,9 @@ int RtpAudioSender::SendRtpPacket(RtpPacket& rtp_packet) { | |||||||
|     return -1; |     return -1; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   last_send_bytes_ += rtp_packet.Size(); |   last_send_bytes_ += (uint32_t)rtp_packet.Size(); | ||||||
|   total_rtp_packets_sent_++; |   total_rtp_packets_sent_++; | ||||||
|   total_rtp_payload_sent_ += rtp_packet.PayloadSize(); |   total_rtp_payload_sent_ += (uint32_t)rtp_packet.PayloadSize(); | ||||||
|  |  | ||||||
|   if (CheckIsTimeSendSR()) { |   if (CheckIsTimeSendSR()) { | ||||||
|     RtcpSenderReport rtcp_sr; |     RtcpSenderReport rtcp_sr; | ||||||
|   | |||||||
| @@ -35,7 +35,7 @@ RtpCodec ::~RtpCodec() { | |||||||
|   // } |   // } | ||||||
| } | } | ||||||
|  |  | ||||||
| void RtpCodec::Encode(uint8_t* buffer, size_t size, | void RtpCodec::Encode(uint8_t* buffer, uint32_t size, | ||||||
|                       std::vector<RtpPacket>& packets) { |                       std::vector<RtpPacket>& packets) { | ||||||
|   if (RtpPacket::PAYLOAD_TYPE::H264 == payload_type_) { |   if (RtpPacket::PAYLOAD_TYPE::H264 == payload_type_) { | ||||||
|     if (fec_enable_ && IsKeyFrame((const uint8_t*)buffer, size)) { |     if (fec_enable_ && IsKeyFrame((const uint8_t*)buffer, size)) { | ||||||
| @@ -44,8 +44,8 @@ void RtpCodec::Encode(uint8_t* buffer, size_t size, | |||||||
|         LOG_ERROR("Invalid fec_packets"); |         LOG_ERROR("Invalid fec_packets"); | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
|       unsigned int num_of_total_packets = 0; |       uint8_t num_of_total_packets = 0; | ||||||
|       unsigned int num_of_source_packets = 0; |       uint8_t num_of_source_packets = 0; | ||||||
|       unsigned int last_packet_size = 0; |       unsigned int last_packet_size = 0; | ||||||
|       fec_encoder_.GetFecPacketsParams(size, num_of_total_packets, |       fec_encoder_.GetFecPacketsParams(size, num_of_total_packets, | ||||||
|                                        num_of_source_packets, last_packet_size); |                                        num_of_source_packets, last_packet_size); | ||||||
| @@ -54,13 +54,13 @@ void RtpCodec::Encode(uint8_t* buffer, size_t size, | |||||||
|                        std::chrono::system_clock::now().time_since_epoch()) |                        std::chrono::system_clock::now().time_since_epoch()) | ||||||
|                        .count(); |                        .count(); | ||||||
|  |  | ||||||
|       for (unsigned int index = 0; index < num_of_total_packets; index++) { |       for (uint8_t index = 0; index < num_of_total_packets; index++) { | ||||||
|         RtpPacket rtp_packet; |         RtpPacket rtp_packet; | ||||||
|         if (index < num_of_source_packets) { |         if (index < num_of_source_packets) { | ||||||
|           rtp_packet.SetVerion(version_); |           rtp_packet.SetVerion(version_); | ||||||
|           rtp_packet.SetHasPadding(has_padding_); |           rtp_packet.SetHasPadding(has_padding_); | ||||||
|           rtp_packet.SetHasExtension(has_extension_); |           rtp_packet.SetHasExtension(has_extension_); | ||||||
|           rtp_packet.SetMarker(index == num_of_source_packets - 1 ? 1 : 0); |           rtp_packet.SetMarker((index == (num_of_source_packets - 1)) ? 1 : 0); | ||||||
|           rtp_packet.SetPayloadType(RtpPacket::PAYLOAD_TYPE::H264_FEC_SOURCE); |           rtp_packet.SetPayloadType(RtpPacket::PAYLOAD_TYPE::H264_FEC_SOURCE); | ||||||
|           rtp_packet.SetSequenceNumber(sequence_number_++); |           rtp_packet.SetSequenceNumber(sequence_number_++); | ||||||
|           rtp_packet.SetTimestamp(timestamp_); |           rtp_packet.SetTimestamp(timestamp_); | ||||||
| @@ -170,13 +170,13 @@ void RtpCodec::Encode(uint8_t* buffer, size_t size, | |||||||
|       packets.emplace_back(rtp_packet); |       packets.emplace_back(rtp_packet); | ||||||
|  |  | ||||||
|     } else { |     } else { | ||||||
|       size_t last_packet_size = size % MAX_NALU_LEN; |       uint32_t last_packet_size = size % MAX_NALU_LEN; | ||||||
|       size_t packet_num = size / MAX_NALU_LEN + (last_packet_size ? 1 : 0); |       uint32_t packet_num = size / MAX_NALU_LEN + (last_packet_size ? 1 : 0); | ||||||
|       timestamp_ = std::chrono::duration_cast<std::chrono::microseconds>( |       timestamp_ = std::chrono::duration_cast<std::chrono::microseconds>( | ||||||
|                        std::chrono::system_clock::now().time_since_epoch()) |                        std::chrono::system_clock::now().time_since_epoch()) | ||||||
|                        .count(); |                        .count(); | ||||||
|  |  | ||||||
|       for (size_t index = 0; index < packet_num; index++) { |       for (uint32_t index = 0; index < packet_num; index++) { | ||||||
|         RtpPacket rtp_packet; |         RtpPacket rtp_packet; | ||||||
|         rtp_packet.SetVerion(version_); |         rtp_packet.SetVerion(version_); | ||||||
|         rtp_packet.SetHasPadding(has_padding_); |         rtp_packet.SetHasPadding(has_padding_); | ||||||
| @@ -254,13 +254,13 @@ void RtpCodec::Encode(uint8_t* buffer, size_t size, | |||||||
|         rtp_packet.EncodeAv1(obus[i].payload.data(), obus[i].payload.size()); |         rtp_packet.EncodeAv1(obus[i].payload.data(), obus[i].payload.size()); | ||||||
|         packets.emplace_back(rtp_packet); |         packets.emplace_back(rtp_packet); | ||||||
|       } else { |       } else { | ||||||
|         size_t last_packet_size = obus[i].payload.size() % MAX_NALU_LEN; |         uint32_t last_packet_size = obus[i].payload.size() % MAX_NALU_LEN; | ||||||
|         size_t packet_num = |         size_t packet_num = | ||||||
|             obus[i].payload.size() / MAX_NALU_LEN + (last_packet_size ? 1 : 0); |             obus[i].payload.size() / MAX_NALU_LEN + (last_packet_size ? 1 : 0); | ||||||
|         timestamp_ = std::chrono::duration_cast<std::chrono::microseconds>( |         timestamp_ = std::chrono::duration_cast<std::chrono::microseconds>( | ||||||
|                          std::chrono::system_clock::now().time_since_epoch()) |                          std::chrono::system_clock::now().time_since_epoch()) | ||||||
|                          .count(); |                          .count(); | ||||||
|         for (size_t index = 0; index < packet_num; index++) { |         for (uint32_t index = 0; index < packet_num; index++) { | ||||||
|           RtpPacket rtp_packet; |           RtpPacket rtp_packet; | ||||||
|           rtp_packet.SetVerion(version_); |           rtp_packet.SetVerion(version_); | ||||||
|           rtp_packet.SetHasPadding(has_padding_); |           rtp_packet.SetHasPadding(has_padding_); | ||||||
| @@ -332,7 +332,7 @@ void RtpCodec::Encode(uint8_t* buffer, size_t size, | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| void RtpCodec::Encode(VideoFrameType frame_type, uint8_t* buffer, size_t size, | void RtpCodec::Encode(VideoFrameType frame_type, uint8_t* buffer, uint32_t size, | ||||||
|                       std::vector<RtpPacket>& packets) { |                       std::vector<RtpPacket>& packets) { | ||||||
|   if (RtpPacket::PAYLOAD_TYPE::H264 == payload_type_) { |   if (RtpPacket::PAYLOAD_TYPE::H264 == payload_type_) { | ||||||
|     if (fec_enable_ && IsKeyFrame((const uint8_t*)buffer, size)) { |     if (fec_enable_ && IsKeyFrame((const uint8_t*)buffer, size)) { | ||||||
| @@ -341,8 +341,8 @@ void RtpCodec::Encode(VideoFrameType frame_type, uint8_t* buffer, size_t size, | |||||||
|         LOG_ERROR("Invalid fec_packets"); |         LOG_ERROR("Invalid fec_packets"); | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
|       unsigned int num_of_total_packets = 0; |       uint8_t num_of_total_packets = 0; | ||||||
|       unsigned int num_of_source_packets = 0; |       uint8_t num_of_source_packets = 0; | ||||||
|       unsigned int last_packet_size = 0; |       unsigned int last_packet_size = 0; | ||||||
|       fec_encoder_.GetFecPacketsParams(size, num_of_total_packets, |       fec_encoder_.GetFecPacketsParams(size, num_of_total_packets, | ||||||
|                                        num_of_source_packets, last_packet_size); |                                        num_of_source_packets, last_packet_size); | ||||||
| @@ -351,7 +351,7 @@ void RtpCodec::Encode(VideoFrameType frame_type, uint8_t* buffer, size_t size, | |||||||
|                        std::chrono::system_clock::now().time_since_epoch()) |                        std::chrono::system_clock::now().time_since_epoch()) | ||||||
|                        .count(); |                        .count(); | ||||||
|  |  | ||||||
|       for (unsigned int index = 0; index < num_of_total_packets; index++) { |       for (uint8_t index = 0; index < num_of_total_packets; index++) { | ||||||
|         RtpPacket rtp_packet; |         RtpPacket rtp_packet; | ||||||
|         if (index < num_of_source_packets) { |         if (index < num_of_source_packets) { | ||||||
|           rtp_packet.SetVerion(version_); |           rtp_packet.SetVerion(version_); | ||||||
| @@ -469,13 +469,13 @@ void RtpCodec::Encode(VideoFrameType frame_type, uint8_t* buffer, size_t size, | |||||||
|       packets.emplace_back(rtp_packet); |       packets.emplace_back(rtp_packet); | ||||||
|  |  | ||||||
|     } else { |     } else { | ||||||
|       size_t last_packet_size = size % MAX_NALU_LEN; |       uint32_t last_packet_size = size % MAX_NALU_LEN; | ||||||
|       size_t packet_num = size / MAX_NALU_LEN + (last_packet_size ? 1 : 0); |       uint32_t packet_num = size / MAX_NALU_LEN + (last_packet_size ? 1 : 0); | ||||||
|       timestamp_ = std::chrono::duration_cast<std::chrono::microseconds>( |       timestamp_ = std::chrono::duration_cast<std::chrono::microseconds>( | ||||||
|                        std::chrono::system_clock::now().time_since_epoch()) |                        std::chrono::system_clock::now().time_since_epoch()) | ||||||
|                        .count(); |                        .count(); | ||||||
|  |  | ||||||
|       for (size_t index = 0; index < packet_num; index++) { |       for (uint32_t index = 0; index < packet_num; index++) { | ||||||
|         RtpPacket rtp_packet; |         RtpPacket rtp_packet; | ||||||
|         rtp_packet.SetVerion(version_); |         rtp_packet.SetVerion(version_); | ||||||
|         rtp_packet.SetHasPadding(has_padding_); |         rtp_packet.SetHasPadding(has_padding_); | ||||||
| @@ -520,7 +520,7 @@ void RtpCodec::Encode(VideoFrameType frame_type, uint8_t* buffer, size_t size, | |||||||
|     } |     } | ||||||
|   } else if (RtpPacket::PAYLOAD_TYPE::AV1 == payload_type_) { |   } else if (RtpPacket::PAYLOAD_TYPE::AV1 == payload_type_) { | ||||||
|     std::vector<Obu> obus = ParseObus(buffer, size); |     std::vector<Obu> obus = ParseObus(buffer, size); | ||||||
|     uint32_t timestamp = |     uint64_t timestamp = | ||||||
|         std::chrono::duration_cast<std::chrono::microseconds>( |         std::chrono::duration_cast<std::chrono::microseconds>( | ||||||
|             std::chrono::system_clock::now().time_since_epoch()) |             std::chrono::system_clock::now().time_since_epoch()) | ||||||
|             .count(); |             .count(); | ||||||
| @@ -550,11 +550,11 @@ void RtpCodec::Encode(VideoFrameType frame_type, uint8_t* buffer, size_t size, | |||||||
|         rtp_packet.EncodeAv1(obus[i].payload.data(), obus[i].size); |         rtp_packet.EncodeAv1(obus[i].payload.data(), obus[i].size); | ||||||
|         packets.emplace_back(rtp_packet); |         packets.emplace_back(rtp_packet); | ||||||
|       } else { |       } else { | ||||||
|         size_t last_packet_size = obus[i].size % MAX_NALU_LEN; |         uint32_t last_packet_size = obus[i].size % MAX_NALU_LEN; | ||||||
|         size_t packet_num = |         size_t packet_num = | ||||||
|             obus[i].size / MAX_NALU_LEN + (last_packet_size ? 1 : 0); |             obus[i].size / MAX_NALU_LEN + (last_packet_size ? 1 : 0); | ||||||
|  |  | ||||||
|         for (size_t index = 0; index < packet_num; index++) { |         for (uint32_t index = 0; index < packet_num; index++) { | ||||||
|           RtpPacket rtp_packet; |           RtpPacket rtp_packet; | ||||||
|           rtp_packet.SetVerion(version_); |           rtp_packet.SetVerion(version_); | ||||||
|           rtp_packet.SetHasPadding(has_padding_); |           rtp_packet.SetHasPadding(has_padding_); | ||||||
| @@ -618,7 +618,7 @@ size_t RtpCodec::Decode(RtpPacket& packet, uint8_t* payload) { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| bool RtpCodec::IsKeyFrame(const uint8_t* buffer, size_t size) { | bool RtpCodec::IsKeyFrame(const uint8_t* buffer, uint32_t size) { | ||||||
|   if (buffer != nullptr && size != 0 && (*(buffer + 4) & 0x1f) == 0x07) { |   if (buffer != nullptr && size != 0 && (*(buffer + 4) & 0x1f) == 0x07) { | ||||||
|     return true; |     return true; | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -21,27 +21,28 @@ class RtpCodec { | |||||||
|   ~RtpCodec(); |   ~RtpCodec(); | ||||||
|  |  | ||||||
|  public: |  public: | ||||||
|   void Encode(uint8_t* buffer, size_t size, std::vector<RtpPacket>& packets); |   void Encode(uint8_t* buffer, uint32_t size, std::vector<RtpPacket>& packets); | ||||||
|   void Encode(VideoFrameType frame_type, uint8_t* buffer, size_t size, |   void Encode(VideoFrameType frame_type, uint8_t* buffer, uint32_t size, | ||||||
|               std::vector<RtpPacket>& packets); |               std::vector<RtpPacket>& packets); | ||||||
|   size_t Decode(RtpPacket& packet, uint8_t* payload); |   size_t Decode(RtpPacket& packet, uint8_t* payload); | ||||||
|  |  | ||||||
|   //  protected: |   //  protected: | ||||||
|   //   void OnReceiveFrame(uint8_t* payload) = 0; |   //   void OnReceiveFrame(uint8_t* payload) = 0; | ||||||
|  private: |  private: | ||||||
|   bool IsKeyFrame(const uint8_t* buffer, size_t size); |   bool IsKeyFrame(const uint8_t* buffer, uint32_t size); | ||||||
|  |  | ||||||
|   void EncodeAv1(uint8_t* buffer, size_t size, std::vector<RtpPacket>& packets); |   void EncodeAv1(uint8_t* buffer, uint32_t size, | ||||||
|  |                  std::vector<RtpPacket>& packets); | ||||||
|  |  | ||||||
|  private: |  private: | ||||||
|   uint32_t version_ = 0; |   uint8_t version_ = 0; | ||||||
|   bool has_padding_ = false; |   bool has_padding_ = false; | ||||||
|   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; | ||||||
|   uint32_t payload_type_ = 0; |   uint32_t payload_type_ = 0; | ||||||
|   uint16_t sequence_number_ = 0; |   uint16_t sequence_number_ = 0; | ||||||
|   uint32_t timestamp_ = 0; |   uint64_t timestamp_ = 0; | ||||||
|   uint32_t ssrc_ = 0; |   uint32_t ssrc_ = 0; | ||||||
|   std::vector<uint32_t> csrcs_; |   std::vector<uint32_t> csrcs_; | ||||||
|   uint16_t profile_ = 0; |   uint16_t profile_ = 0; | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ void RtpDataReceiver::InsertRtpPacket(RtpPacket& rtp_packet) { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (rtp_statistics_) { |   if (rtp_statistics_) { | ||||||
|     rtp_statistics_->UpdateReceiveBytes(rtp_packet.Size()); |     rtp_statistics_->UpdateReceiveBytes((uint32_t)rtp_packet.Size()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (CheckIsTimeSendRR()) { |   if (CheckIsTimeSendRR()) { | ||||||
|   | |||||||
| @@ -42,9 +42,9 @@ int RtpDataSender::SendRtpPacket(RtpPacket& rtp_packet) { | |||||||
|     return -1; |     return -1; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   last_send_bytes_ += rtp_packet.Size(); |   last_send_bytes_ += (uint32_t)rtp_packet.Size(); | ||||||
|   total_rtp_packets_sent_++; |   total_rtp_packets_sent_++; | ||||||
|   total_rtp_payload_sent_ += rtp_packet.PayloadSize(); |   total_rtp_payload_sent_ += (uint32_t)rtp_packet.PayloadSize(); | ||||||
|  |  | ||||||
|   if (CheckIsTimeSendSR()) { |   if (CheckIsTimeSendSR()) { | ||||||
|     RtcpSenderReport rtcp_sr; |     RtcpSenderReport rtcp_sr; | ||||||
|   | |||||||
| @@ -37,7 +37,7 @@ RtpPacket::RtpPacket() : buffer_(new uint8_t[DEFAULT_MTU]), size_(DEFAULT_MTU) { | |||||||
|   memset(buffer_, 0, DEFAULT_MTU); |   memset(buffer_, 0, DEFAULT_MTU); | ||||||
| } | } | ||||||
|  |  | ||||||
| RtpPacket::RtpPacket(const uint8_t *buffer, size_t size) { | RtpPacket::RtpPacket(const uint8_t *buffer, uint32_t size) { | ||||||
|   if (size > 0) { |   if (size > 0) { | ||||||
|     buffer_ = (uint8_t *)malloc(size); |     buffer_ = (uint8_t *)malloc(size); | ||||||
|     if (NULL == buffer_) { |     if (NULL == buffer_) { | ||||||
| @@ -269,9 +269,10 @@ const uint8_t *RtpPacket::EncodeH264Fua(uint8_t *payload, size_t payload_size) { | |||||||
|   return buffer_; |   return buffer_; | ||||||
| } | } | ||||||
|  |  | ||||||
| const uint8_t *RtpPacket::EncodeH264FecSource( | const uint8_t *RtpPacket::EncodeH264FecSource(uint8_t *payload, | ||||||
|     uint8_t *payload, size_t payload_size, unsigned int fec_symbol_id, |                                               size_t payload_size, | ||||||
|     unsigned int fec_source_symbol_num) { |                                               uint8_t fec_symbol_id, | ||||||
|  |                                               uint8_t fec_source_symbol_num) { | ||||||
|   buffer_[0] = (version_ << 6) | (has_padding_ << 5) | (has_extension_ << 4) | |   buffer_[0] = (version_ << 6) | (has_padding_ << 5) | (has_extension_ << 4) | | ||||||
|                total_csrc_number_; |                total_csrc_number_; | ||||||
|   buffer_[1] = (marker_ << 7) | payload_type_; |   buffer_[1] = (marker_ << 7) | payload_type_; | ||||||
| @@ -329,9 +330,10 @@ const uint8_t *RtpPacket::EncodeH264FecSource( | |||||||
|   return buffer_; |   return buffer_; | ||||||
| } | } | ||||||
|  |  | ||||||
| const uint8_t *RtpPacket::EncodeH264FecRepair( | const uint8_t *RtpPacket::EncodeH264FecRepair(uint8_t *payload, | ||||||
|     uint8_t *payload, size_t payload_size, unsigned int fec_symbol_id, |                                               size_t payload_size, | ||||||
|     unsigned int fec_source_symbol_num) { |                                               uint8_t fec_symbol_id, | ||||||
|  |                                               uint8_t fec_source_symbol_num) { | ||||||
|   buffer_[0] = (version_ << 6) | (has_padding_ << 5) | (has_extension_ << 4) | |   buffer_[0] = (version_ << 6) | (has_padding_ << 5) | (has_extension_ << 4) | | ||||||
|                total_csrc_number_; |                total_csrc_number_; | ||||||
|   buffer_[1] = (marker_ << 7) | payload_type_; |   buffer_[1] = (marker_ << 7) | payload_type_; | ||||||
|   | |||||||
| @@ -184,7 +184,7 @@ class RtpPacket { | |||||||
|  |  | ||||||
|  public: |  public: | ||||||
|   RtpPacket(); |   RtpPacket(); | ||||||
|   RtpPacket(const uint8_t *buffer, size_t size); |   RtpPacket(const uint8_t *buffer, uint32_t size); | ||||||
|   RtpPacket(const RtpPacket &rtp_packet); |   RtpPacket(const RtpPacket &rtp_packet); | ||||||
|   RtpPacket(RtpPacket &&rtp_packet); |   RtpPacket(RtpPacket &&rtp_packet); | ||||||
|   RtpPacket &operator=(const RtpPacket &rtp_packet); |   RtpPacket &operator=(const RtpPacket &rtp_packet); | ||||||
| @@ -194,24 +194,24 @@ class RtpPacket { | |||||||
|  |  | ||||||
|  public: |  public: | ||||||
|   // Set Header |   // Set Header | ||||||
|   void SetVerion(uint32_t version) { version_ = version; } |   void SetVerion(uint8_t version) { version_ = version; } | ||||||
|   void SetHasPadding(bool has_padding) { has_padding_ = has_padding; } |   void SetHasPadding(bool has_padding) { has_padding_ = has_padding; } | ||||||
|   void SetHasExtension(bool has_extension) { has_extension_ = has_extension; } |   void SetHasExtension(bool has_extension) { has_extension_ = has_extension; } | ||||||
|   void SetMarker(bool marker) { marker_ = marker; } |   void SetMarker(bool marker) { marker_ = marker; } | ||||||
|   void SetPayloadType(PAYLOAD_TYPE payload_type) { |   void SetPayloadType(PAYLOAD_TYPE payload_type) { | ||||||
|     payload_type_ = payload_type; |     payload_type_ = (uint8_t)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(uint64_t timestamp) { timestamp_ = timestamp; } | ||||||
|   void SetSsrc(uint32_t ssrc) { ssrc_ = ssrc; } |   void SetSsrc(uint32_t ssrc) { ssrc_ = ssrc; } | ||||||
|   void SetCsrcs(std::vector<uint32_t> &csrcs) { csrcs_ = csrcs; } |   void SetCsrcs(std::vector<uint32_t> &csrcs) { csrcs_ = csrcs; } | ||||||
|  |  | ||||||
|   void SetExtensionProfile(uint16_t extension_profile) { |   void SetExtensionProfile(uint16_t extension_profile) { | ||||||
|     extension_profile_ = extension_profile; |     extension_profile_ = extension_profile; | ||||||
|   } |   } | ||||||
|   void SetExtensionData(uint8_t *extension_data, size_t extension_len) { |   void SetExtensionData(uint8_t *extension_data, uint16_t extension_len) { | ||||||
|     extension_len_ = extension_len; |     extension_len_ = extension_len; | ||||||
|     extension_data_ = new uint8_t[extension_len_]; |     extension_data_ = new uint8_t[extension_len_]; | ||||||
|     memcpy(extension_data_, extension_data, extension_len_); |     memcpy(extension_data_, extension_data, extension_len_); | ||||||
| @@ -258,11 +258,11 @@ class RtpPacket { | |||||||
|   const uint8_t *EncodeH264Nalu(uint8_t *payload, size_t payload_size); |   const uint8_t *EncodeH264Nalu(uint8_t *payload, size_t payload_size); | ||||||
|   const uint8_t *EncodeH264Fua(uint8_t *payload, size_t payload_size); |   const uint8_t *EncodeH264Fua(uint8_t *payload, size_t payload_size); | ||||||
|   const uint8_t *EncodeH264FecSource(uint8_t *payload, size_t payload_size, |   const uint8_t *EncodeH264FecSource(uint8_t *payload, size_t payload_size, | ||||||
|                                      unsigned int fec_symbol_id, |                                      uint8_t fec_symbol_id, | ||||||
|                                      unsigned int fec_source_symbol_num); |                                      uint8_t fec_source_symbol_num); | ||||||
|   const uint8_t *EncodeH264FecRepair(uint8_t *payload, size_t payload_size, |   const uint8_t *EncodeH264FecRepair(uint8_t *payload, size_t payload_size, | ||||||
|                                      unsigned int fec_symbol_id, |                                      uint8_t fec_symbol_id, | ||||||
|                                      unsigned int fec_source_symbol_num); |                                      uint8_t fec_source_symbol_num); | ||||||
|   const uint8_t *EncodeAv1(uint8_t *payload, size_t payload_size); |   const uint8_t *EncodeAv1(uint8_t *payload, size_t payload_size); | ||||||
|  |  | ||||||
|   size_t DecodeData(uint8_t *payload = nullptr); |   size_t DecodeData(uint8_t *payload = nullptr); | ||||||
| @@ -299,7 +299,7 @@ class RtpPacket { | |||||||
|     ParseRtpData(); |     ParseRtpData(); | ||||||
|     return sequence_number_; |     return sequence_number_; | ||||||
|   } |   } | ||||||
|   uint32_t Timestamp() { |   uint64_t Timestamp() { | ||||||
|     ParseRtpData(); |     ParseRtpData(); | ||||||
|     return timestamp_; |     return timestamp_; | ||||||
|   } |   } | ||||||
| @@ -367,7 +367,7 @@ class RtpPacket { | |||||||
|  |  | ||||||
|     if (z == 0 && y == 0 && w == 1) { |     if (z == 0 && y == 0 && w == 1) { | ||||||
|       return true; |       return true; | ||||||
|     } else if (z == 0 && y == 1 & w == 1) { |     } else if (z == 0 && y == 1 && w == 1) { | ||||||
|       return true; |       return true; | ||||||
|     } else { |     } else { | ||||||
|       return false; |       return false; | ||||||
| @@ -382,7 +382,7 @@ class RtpPacket { | |||||||
|  |  | ||||||
|     if (z == 0 && y == 0 && w == 1) { |     if (z == 0 && y == 0 && w == 1) { | ||||||
|       return true; |       return true; | ||||||
|     } else if (z == 1 && y == 0 & w == 1) { |     } else if (z == 1 && y == 0 && w == 1) { | ||||||
|       return true; |       return true; | ||||||
|     } else { |     } else { | ||||||
|       return false; |       return false; | ||||||
| @@ -395,14 +395,14 @@ class RtpPacket { | |||||||
|  |  | ||||||
|  private: |  private: | ||||||
|   // Header |   // Header | ||||||
|   uint32_t version_ = 0; |   uint8_t version_ = 0; | ||||||
|   bool has_padding_ = false; |   bool has_padding_ = false; | ||||||
|   bool has_extension_ = false; |   bool has_extension_ = false; | ||||||
|   uint32_t total_csrc_number_ = 0; |   uint8_t total_csrc_number_ = 0; | ||||||
|   bool marker_ = false; |   bool marker_ = false; | ||||||
|   uint32_t payload_type_ = 0; |   uint8_t payload_type_ = 0; | ||||||
|   uint16_t sequence_number_ = 1; |   uint16_t sequence_number_ = 1; | ||||||
|   uint32_t timestamp_ = 0; |   uint64_t timestamp_ = 0; | ||||||
|   uint32_t ssrc_ = 0; |   uint32_t ssrc_ = 0; | ||||||
|   std::vector<uint32_t> csrcs_; |   std::vector<uint32_t> csrcs_; | ||||||
|   uint16_t profile_ = 0; |   uint16_t profile_ = 0; | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ void RtpVideoReceiver::InsertRtpPacket(RtpPacket& rtp_packet) { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (rtp_statistics_) { |   if (rtp_statistics_) { | ||||||
|     rtp_statistics_->UpdateReceiveBytes(rtp_packet.Size()); |     rtp_statistics_->UpdateReceiveBytes((uint32_t)rtp_packet.Size()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (CheckIsTimeSendRR()) { |   if (CheckIsTimeSendRR()) { | ||||||
| @@ -68,6 +68,8 @@ void RtpVideoReceiver::ProcessH264RtpPacket(RtpPacket& rtp_packet) { | |||||||
|       } else if (RtpPacket::NAL_UNIT_TYPE::FU_A == rtp_packet.NalUnitType()) { |       } else if (RtpPacket::NAL_UNIT_TYPE::FU_A == rtp_packet.NalUnitType()) { | ||||||
|         incomplete_frame_list_[rtp_packet.SequenceNumber()] = rtp_packet; |         incomplete_frame_list_[rtp_packet.SequenceNumber()] = rtp_packet; | ||||||
|         bool complete = CheckIsH264FrameCompleted(rtp_packet); |         bool complete = CheckIsH264FrameCompleted(rtp_packet); | ||||||
|  |         if (!complete) { | ||||||
|  |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } else { |   } else { | ||||||
| @@ -78,6 +80,8 @@ void RtpVideoReceiver::ProcessH264RtpPacket(RtpPacket& rtp_packet) { | |||||||
|       } else if (RtpPacket::NAL_UNIT_TYPE::FU_A == rtp_packet.NalUnitType()) { |       } else if (RtpPacket::NAL_UNIT_TYPE::FU_A == rtp_packet.NalUnitType()) { | ||||||
|         incomplete_frame_list_[rtp_packet.SequenceNumber()] = rtp_packet; |         incomplete_frame_list_[rtp_packet.SequenceNumber()] = rtp_packet; | ||||||
|         bool complete = CheckIsH264FrameCompleted(rtp_packet); |         bool complete = CheckIsH264FrameCompleted(rtp_packet); | ||||||
|  |         if (!complete) { | ||||||
|  |         } | ||||||
|       } |       } | ||||||
|     } else if (RtpPacket::PAYLOAD_TYPE::H264_FEC_SOURCE == |     } else if (RtpPacket::PAYLOAD_TYPE::H264_FEC_SOURCE == | ||||||
|                rtp_packet.PayloadType()) { |                rtp_packet.PayloadType()) { | ||||||
| @@ -179,6 +183,8 @@ void RtpVideoReceiver::ProcessAv1RtpPacket(RtpPacket& rtp_packet) { | |||||||
|   if (RtpPacket::PAYLOAD_TYPE::AV1 == rtp_packet.PayloadType()) { |   if (RtpPacket::PAYLOAD_TYPE::AV1 == rtp_packet.PayloadType()) { | ||||||
|     incomplete_frame_list_[rtp_packet.SequenceNumber()] = rtp_packet; |     incomplete_frame_list_[rtp_packet.SequenceNumber()] = rtp_packet; | ||||||
|     bool complete = CheckIsAv1FrameCompleted(rtp_packet); |     bool complete = CheckIsAv1FrameCompleted(rtp_packet); | ||||||
|  |     if (!complete) { | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   // std::vector<Obu> obus = |   // std::vector<Obu> obus = | ||||||
| @@ -209,7 +215,7 @@ bool RtpVideoReceiver::CheckIsH264FrameCompleted(RtpPacket& rtp_packet) { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         size_t complete_frame_size = 0; |         size_t complete_frame_size = 0; | ||||||
|         for (size_t start = it->first; start <= rtp_packet.SequenceNumber(); |         for (uint16_t start = it->first; start <= rtp_packet.SequenceNumber(); | ||||||
|              start++) { |              start++) { | ||||||
|           memcpy(nv12_data_ + complete_frame_size, |           memcpy(nv12_data_ + complete_frame_size, | ||||||
|                  incomplete_frame_list_[start].Payload(), |                  incomplete_frame_list_[start].Payload(), | ||||||
| @@ -237,8 +243,7 @@ bool RtpVideoReceiver::CheckIsH264FrameCompleted(RtpPacket& rtp_packet) { | |||||||
| bool RtpVideoReceiver::CheckIsAv1FrameCompleted(RtpPacket& rtp_packet) { | bool RtpVideoReceiver::CheckIsAv1FrameCompleted(RtpPacket& rtp_packet) { | ||||||
|   if (rtp_packet.Av1FrameEnd()) { |   if (rtp_packet.Av1FrameEnd()) { | ||||||
|     uint16_t end_seq = rtp_packet.SequenceNumber(); |     uint16_t end_seq = rtp_packet.SequenceNumber(); | ||||||
|     size_t start = end_seq; |     uint16_t start = end_seq; | ||||||
|     bool start_count = 0; |  | ||||||
|     while (end_seq--) { |     while (end_seq--) { | ||||||
|       auto it = incomplete_frame_list_.find(end_seq); |       auto it = incomplete_frame_list_.find(end_seq); | ||||||
|       if (it == incomplete_frame_list_.end()) { |       if (it == incomplete_frame_list_.end()) { | ||||||
|   | |||||||
| @@ -59,12 +59,12 @@ class RtpVideoReceiver : public ThreadBase { | |||||||
|  private: |  private: | ||||||
|   bool fec_enable_ = false; |   bool fec_enable_ = false; | ||||||
|   FecDecoder fec_decoder_; |   FecDecoder fec_decoder_; | ||||||
|   uint32_t last_packet_ts_ = 0; |   uint64_t last_packet_ts_ = 0; | ||||||
|   // std::map<uint16_t, RtpPacket> incomplete_fec_frame_list_; |   // std::map<uint16_t, RtpPacket> incomplete_fec_frame_list_; | ||||||
|   // std::map<uint32_t, std::map<uint16_t, RtpPacket>> fec_source_symbol_list_; |   // std::map<uint32_t, std::map<uint16_t, RtpPacket>> fec_source_symbol_list_; | ||||||
|   // std::map<uint32_t, std::map<uint16_t, RtpPacket>> fec_repair_symbol_list_; |   // std::map<uint32_t, std::map<uint16_t, RtpPacket>> fec_repair_symbol_list_; | ||||||
|   std::set<uint32_t> incomplete_fec_frame_list_; |   std::set<uint64_t> incomplete_fec_frame_list_; | ||||||
|   std::map<uint32_t, std::map<uint16_t, RtpPacket>> incomplete_fec_packet_list_; |   std::map<uint64_t, std::map<uint16_t, RtpPacket>> incomplete_fec_packet_list_; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -42,9 +42,9 @@ int RtpVideoSender::SendRtpPacket(RtpPacket& rtp_packet) { | |||||||
|     return -1; |     return -1; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   last_send_bytes_ += rtp_packet.Size(); |   last_send_bytes_ += (uint32_t)rtp_packet.Size(); | ||||||
|   total_rtp_packets_sent_++; |   total_rtp_packets_sent_++; | ||||||
|   total_rtp_payload_sent_ += rtp_packet.PayloadSize(); |   total_rtp_payload_sent_ += (uint32_t)rtp_packet.PayloadSize(); | ||||||
|  |  | ||||||
|   if (CheckIsTimeSendSR()) { |   if (CheckIsTimeSendSR()) { | ||||||
|     RtcpSenderReport rtcp_sr; |     RtcpSenderReport rtcp_sr; | ||||||
|   | |||||||
| @@ -29,6 +29,7 @@ IceTransmission::IceTransmission( | |||||||
|       user_data_(user_data) {} |       user_data_(user_data) {} | ||||||
|  |  | ||||||
| IceTransmission::~IceTransmission() { | IceTransmission::~IceTransmission() { | ||||||
|  |   user_data_ = nullptr; | ||||||
|   video_codec_inited_ = false; |   video_codec_inited_ = false; | ||||||
|   audio_codec_inited_ = false; |   audio_codec_inited_ = false; | ||||||
|   load_nvcodec_dll_success_ = false; |   load_nvcodec_dll_success_ = false; | ||||||
| @@ -66,12 +67,19 @@ int IceTransmission::InitIceTransmission( | |||||||
|              uint32_t data_inbound_bitrate, uint32_t data_outbound_bitrate, |              uint32_t data_inbound_bitrate, uint32_t data_outbound_bitrate, | ||||||
|              uint32_t total_inbound_bitrate, uint32_t total_outbound_bitrate) { |              uint32_t total_inbound_bitrate, uint32_t total_outbound_bitrate) { | ||||||
|         if (on_receive_net_status_report_) { |         if (on_receive_net_status_report_) { | ||||||
|           on_receive_net_status_report_( |           XNetTrafficStats net_traffic_stats; | ||||||
|               user_id_, traversal_type_, video_inbound_bitrate, |           net_traffic_stats.video_in = video_inbound_bitrate; | ||||||
|               video_outbound_bitrate, audio_inbound_bitrate, |           net_traffic_stats.video_out = video_outbound_bitrate; | ||||||
|               audio_outbound_bitrate, data_inbound_bitrate, |           net_traffic_stats.audio_in = audio_inbound_bitrate; | ||||||
|               data_outbound_bitrate, total_inbound_bitrate, |           net_traffic_stats.audio_out = audio_outbound_bitrate; | ||||||
|               total_outbound_bitrate, nullptr); |           net_traffic_stats.data_in = data_inbound_bitrate; | ||||||
|  |           net_traffic_stats.data_out = data_outbound_bitrate; | ||||||
|  |           net_traffic_stats.total_in = total_inbound_bitrate; | ||||||
|  |           net_traffic_stats.total_out = total_outbound_bitrate; | ||||||
|  |  | ||||||
|  |           on_receive_net_status_report_(user_id_.data(), user_id_.size(), | ||||||
|  |                                         TraversalMode(traversal_type_), | ||||||
|  |                                         &net_traffic_stats, user_data_); | ||||||
|         } |         } | ||||||
|       }); |       }); | ||||||
|  |  | ||||||
| @@ -340,10 +348,21 @@ int IceTransmission::InitIceTransmission( | |||||||
|             LOG_INFO("Traversal using p2p"); |             LOG_INFO("Traversal using p2p"); | ||||||
|             ice_transmission_obj->traversal_type_ = TraversalType::TP2P; |             ice_transmission_obj->traversal_type_ = TraversalType::TP2P; | ||||||
|           } |           } | ||||||
|  |           XNetTrafficStats net_traffic_stats; | ||||||
|  |           net_traffic_stats.video_in = 0; | ||||||
|  |           net_traffic_stats.video_out = 0; | ||||||
|  |           net_traffic_stats.audio_in = 0; | ||||||
|  |           net_traffic_stats.audio_out = 0; | ||||||
|  |           net_traffic_stats.data_in = 0; | ||||||
|  |           net_traffic_stats.data_out = 0; | ||||||
|  |           net_traffic_stats.total_in = 0; | ||||||
|  |           net_traffic_stats.total_out = 0; | ||||||
|  |  | ||||||
|           ice_transmission_obj->on_receive_net_status_report_( |           ice_transmission_obj->on_receive_net_status_report_( | ||||||
|               ice_transmission_obj->user_id_, |               ice_transmission_obj->user_id_.data(), | ||||||
|               ice_transmission_obj->traversal_type_, 0, 0, 0, 0, 0, 0, 0, 0, |               ice_transmission_obj->user_id_.size(), | ||||||
|               nullptr); |               TraversalMode(ice_transmission_obj->traversal_type_), | ||||||
|  |               &net_traffic_stats, ice_transmission_obj->user_data_); | ||||||
|         } |         } | ||||||
|       }, |       }, | ||||||
|       [](NiceAgent *agent, guint stream_id, guint component_id, guint size, |       [](NiceAgent *agent, guint stream_id, guint component_id, guint size, | ||||||
| @@ -935,7 +954,7 @@ IceTransmission::GetNegotiatedCapabilities() { | |||||||
|   return {negotiated_video_pt_, negotiated_audio_pt_, negotiated_data_pt_}; |   return {negotiated_video_pt_, negotiated_audio_pt_, negotiated_data_pt_}; | ||||||
| } | } | ||||||
|  |  | ||||||
| int IceTransmission::SendVideoData(const XVideoFrame *video_frame) { | int IceTransmission::SendVideoFrame(const XVideoFrame *video_frame) { | ||||||
|   if (state_ != NICE_COMPONENT_STATE_CONNECTED && |   if (state_ != NICE_COMPONENT_STATE_CONNECTED && | ||||||
|       state_ != NICE_COMPONENT_STATE_READY) { |       state_ != NICE_COMPONENT_STATE_READY) { | ||||||
|     LOG_ERROR("Ice is not connected, state = [{}]", |     LOG_ERROR("Ice is not connected, state = [{}]", | ||||||
| @@ -974,7 +993,7 @@ int IceTransmission::SendVideoData(const XVideoFrame *video_frame) { | |||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| int IceTransmission::SendAudioData(const char *data, size_t size) { | int IceTransmission::SendAudioFrame(const char *data, size_t size) { | ||||||
|   if (state_ != NICE_COMPONENT_STATE_CONNECTED && |   if (state_ != NICE_COMPONENT_STATE_CONNECTED && | ||||||
|       state_ != NICE_COMPONENT_STATE_READY) { |       state_ != NICE_COMPONENT_STATE_READY) { | ||||||
|     LOG_ERROR("Ice is not connected, state = [{}]", |     LOG_ERROR("Ice is not connected, state = [{}]", | ||||||
| @@ -999,7 +1018,7 @@ int IceTransmission::SendAudioData(const char *data, size_t size) { | |||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| int IceTransmission::SendUserData(const char *data, size_t size) { | int IceTransmission::SendDataFrame(const char *data, size_t size) { | ||||||
|   if (state_ != NICE_COMPONENT_STATE_CONNECTED && |   if (state_ != NICE_COMPONENT_STATE_CONNECTED && | ||||||
|       state_ != NICE_COMPONENT_STATE_READY) { |       state_ != NICE_COMPONENT_STATE_READY) { | ||||||
|     LOG_ERROR("Ice is not connected, state = [{}]", |     LOG_ERROR("Ice is not connected, state = [{}]", | ||||||
|   | |||||||
| @@ -85,10 +85,8 @@ class IceTransmission { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   void SetOnReceiveNetStatusReportFunc( |   void SetOnReceiveNetStatusReportFunc( | ||||||
|       std::function<void(const std::string &, TraversalType, const uint64_t, |       std::function<void(const char *, const size_t, TraversalMode, | ||||||
|                          const uint64_t, const uint64_t, const uint64_t, |                          const XNetTrafficStats *, void *)> | ||||||
|                          const uint64_t, const uint64_t, const uint64_t, |  | ||||||
|                          const uint64_t, void *)> |  | ||||||
|           on_receive_net_status_report) { |           on_receive_net_status_report) { | ||||||
|     on_receive_net_status_report_ = on_receive_net_status_report; |     on_receive_net_status_report_ = on_receive_net_status_report; | ||||||
|   } |   } | ||||||
| @@ -97,11 +95,11 @@ class IceTransmission { | |||||||
|  |  | ||||||
|   int SetTransmissionId(const std::string &transmission_id); |   int SetTransmissionId(const std::string &transmission_id); | ||||||
|  |  | ||||||
|   int SendVideoData(const XVideoFrame *video_frame); |   int SendVideoFrame(const XVideoFrame *video_frame); | ||||||
|  |  | ||||||
|   int SendAudioData(const char *data, size_t size); |   int SendAudioFrame(const char *data, size_t size); | ||||||
|  |  | ||||||
|   int SendUserData(const char *data, size_t size); |   int SendDataFrame(const char *data, size_t size); | ||||||
|  |  | ||||||
|  public: |  public: | ||||||
|   int GatherCandidates(); |   int GatherCandidates(); | ||||||
| @@ -176,10 +174,8 @@ class IceTransmission { | |||||||
|   std::function<void(std::string, const std::string &)> on_ice_status_change_ = |   std::function<void(std::string, const std::string &)> on_ice_status_change_ = | ||||||
|       nullptr; |       nullptr; | ||||||
|  |  | ||||||
|   std::function<void(const std::string &, TraversalType, const uint64_t, |   std::function<void(const char *, const size_t, TraversalMode, | ||||||
|                      const uint64_t, const uint64_t, const uint64_t, |                      const XNetTrafficStats *, void *)> | ||||||
|                      const uint64_t, const uint64_t, const uint64_t, |  | ||||||
|                      const uint64_t, void *)> |  | ||||||
|       on_receive_net_status_report_ = nullptr; |       on_receive_net_status_report_ = nullptr; | ||||||
|  |  | ||||||
|  private: |  private: | ||||||
|   | |||||||
| @@ -22,13 +22,16 @@ includes("thirdparty") | |||||||
|  |  | ||||||
| if is_os("windows") then | if is_os("windows") then | ||||||
|     add_defines("_WEBSOCKETPP_CPP11_INTERNAL_") |     add_defines("_WEBSOCKETPP_CPP11_INTERNAL_") | ||||||
|  |     -- add_cxflags("/W4", "/WX") | ||||||
|  |     add_cxflags("/W4") | ||||||
| elseif is_os("linux") then | elseif is_os("linux") then | ||||||
|     add_requires("glib", {system = true}) |     add_requires("glib", {system = true}) | ||||||
|     add_packages("glib") |     add_packages("glib") | ||||||
|     add_cxflags("-fPIC")  |     add_cxflags("-fPIC", "-Wno-unused-variable")  | ||||||
|     add_syslinks("pthread") |     add_syslinks("pthread") | ||||||
| elseif is_os("macosx") then | elseif is_os("macosx") then | ||||||
|     add_ldflags("-Wl,-ld_classic") |     add_ldflags("-Wl,-ld_classic") | ||||||
|  |     add_cxflags("-Wno-unused-variable") | ||||||
| end | end | ||||||
|  |  | ||||||
| target("log") | target("log") | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user