mirror of
https://github.com/ossrs/srs.git
synced 2025-02-15 04:42:04 +00:00
Refactor code to split implementation to cpp
This commit is contained in:
parent
6f2b78f16a
commit
b3a0284db5
14 changed files with 363 additions and 110 deletions
|
@ -46,14 +46,6 @@ SrsDtls::~SrsDtls()
|
||||||
SSL_CTX_free(dtls_ctx);
|
SSL_CTX_free(dtls_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsDtls* SrsDtls::instance()
|
|
||||||
{
|
|
||||||
if (!_instance) {
|
|
||||||
_instance = new SrsDtls();
|
|
||||||
}
|
|
||||||
return _instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The return value of verify_callback controls the strategy of the further verification process. If verify_callback
|
// The return value of verify_callback controls the strategy of the further verification process. If verify_callback
|
||||||
// returns 0, the verification process is immediately stopped with "verification failed" state. If SSL_VERIFY_PEER is
|
// returns 0, the verification process is immediately stopped with "verification failed" state. If SSL_VERIFY_PEER is
|
||||||
// set, a verification failure alert is sent to the peer and the TLS/SSL handshake is terminated. If verify_callback
|
// set, a verification failure alert is sent to the peer and the TLS/SSL handshake is terminated. If verify_callback
|
||||||
|
@ -256,3 +248,22 @@ srs_error_t SrsDtls::init(SrsRequest* r)
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SrsDtls* SrsDtls::instance()
|
||||||
|
{
|
||||||
|
if (!_instance) {
|
||||||
|
_instance = new SrsDtls();
|
||||||
|
}
|
||||||
|
return _instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
SSL_CTX* SrsDtls::get_dtls_ctx()
|
||||||
|
{
|
||||||
|
return dtls_ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string SrsDtls::get_fingerprint() const
|
||||||
|
{
|
||||||
|
return fingerprint;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,9 +46,9 @@ public:
|
||||||
srs_error_t init(SrsRequest* r);
|
srs_error_t init(SrsRequest* r);
|
||||||
public:
|
public:
|
||||||
static SrsDtls* instance();
|
static SrsDtls* instance();
|
||||||
SSL_CTX* get_dtls_ctx() { return dtls_ctx; }
|
SSL_CTX* get_dtls_ctx();
|
||||||
public:
|
public:
|
||||||
std::string get_fingerprint() const { return fingerprint; }
|
std::string get_fingerprint() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -261,23 +261,6 @@ SrsUdpMuxSocket::~SrsUdpMuxSocket()
|
||||||
srs_freepa(buf);
|
srs_freepa(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsUdpMuxSocket* SrsUdpMuxSocket::copy_sendonly()
|
|
||||||
{
|
|
||||||
SrsUdpMuxSocket* sendonly = new SrsUdpMuxSocket(handler, lfd);
|
|
||||||
|
|
||||||
// Don't copy buffer
|
|
||||||
srs_freepa(sendonly->buf);
|
|
||||||
sendonly->nb_buf = 0;
|
|
||||||
sendonly->nread = 0;
|
|
||||||
sendonly->lfd = lfd;
|
|
||||||
sendonly->from = from;
|
|
||||||
sendonly->fromlen = fromlen;
|
|
||||||
sendonly->peer_ip = peer_ip;
|
|
||||||
sendonly->peer_port = peer_port;
|
|
||||||
|
|
||||||
return sendonly;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SrsUdpMuxSocket::recvfrom(srs_utime_t timeout)
|
int SrsUdpMuxSocket::recvfrom(srs_utime_t timeout)
|
||||||
{
|
{
|
||||||
fromlen = sizeof(from);
|
fromlen = sizeof(from);
|
||||||
|
@ -341,6 +324,26 @@ socklen_t SrsUdpMuxSocket::peer_addrlen()
|
||||||
return (socklen_t)fromlen;
|
return (socklen_t)fromlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* SrsUdpMuxSocket::data()
|
||||||
|
{
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SrsUdpMuxSocket::size()
|
||||||
|
{
|
||||||
|
return nread;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string SrsUdpMuxSocket::get_peer_ip() const
|
||||||
|
{
|
||||||
|
return peer_ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SrsUdpMuxSocket::get_peer_port() const
|
||||||
|
{
|
||||||
|
return peer_port;
|
||||||
|
}
|
||||||
|
|
||||||
std::string SrsUdpMuxSocket::get_peer_id()
|
std::string SrsUdpMuxSocket::get_peer_id()
|
||||||
{
|
{
|
||||||
char id_buf[1024];
|
char id_buf[1024];
|
||||||
|
@ -349,6 +352,28 @@ std::string SrsUdpMuxSocket::get_peer_id()
|
||||||
return string(id_buf, len);
|
return string(id_buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SrsUdpMuxSocket* SrsUdpMuxSocket::copy_sendonly()
|
||||||
|
{
|
||||||
|
SrsUdpMuxSocket* sendonly = new SrsUdpMuxSocket(handler, lfd);
|
||||||
|
|
||||||
|
// Don't copy buffer
|
||||||
|
srs_freepa(sendonly->buf);
|
||||||
|
sendonly->nb_buf = 0;
|
||||||
|
sendonly->nread = 0;
|
||||||
|
sendonly->lfd = lfd;
|
||||||
|
sendonly->from = from;
|
||||||
|
sendonly->fromlen = fromlen;
|
||||||
|
sendonly->peer_ip = peer_ip;
|
||||||
|
sendonly->peer_port = peer_port;
|
||||||
|
|
||||||
|
return sendonly;
|
||||||
|
}
|
||||||
|
|
||||||
|
ISrsUdpSender* SrsUdpMuxSocket::sender()
|
||||||
|
{
|
||||||
|
return handler;
|
||||||
|
}
|
||||||
|
|
||||||
SrsUdpMuxListener::SrsUdpMuxListener(ISrsUdpMuxHandler* h, ISrsUdpSender* s, std::string i, int p)
|
SrsUdpMuxListener::SrsUdpMuxListener(ISrsUdpMuxHandler* h, ISrsUdpSender* s, std::string i, int p)
|
||||||
{
|
{
|
||||||
handler = h;
|
handler = h;
|
||||||
|
|
|
@ -163,26 +163,19 @@ private:
|
||||||
public:
|
public:
|
||||||
SrsUdpMuxSocket(ISrsUdpSender* h, srs_netfd_t fd);
|
SrsUdpMuxSocket(ISrsUdpSender* h, srs_netfd_t fd);
|
||||||
virtual ~SrsUdpMuxSocket();
|
virtual ~SrsUdpMuxSocket();
|
||||||
|
public:
|
||||||
int recvfrom(srs_utime_t timeout);
|
int recvfrom(srs_utime_t timeout);
|
||||||
srs_error_t sendto(void* data, int size, srs_utime_t timeout);
|
srs_error_t sendto(void* data, int size, srs_utime_t timeout);
|
||||||
|
|
||||||
srs_netfd_t stfd();
|
srs_netfd_t stfd();
|
||||||
sockaddr_in* peer_addr();
|
sockaddr_in* peer_addr();
|
||||||
socklen_t peer_addrlen();
|
socklen_t peer_addrlen();
|
||||||
|
char* data();
|
||||||
char* data() { return buf; }
|
int size();
|
||||||
int size() { return nread; }
|
std::string get_peer_ip() const;
|
||||||
std::string get_peer_ip() const { return peer_ip; }
|
int get_peer_port() const;
|
||||||
int get_peer_port() const { return peer_port; }
|
|
||||||
std::string get_peer_id();
|
std::string get_peer_id();
|
||||||
public:
|
|
||||||
SrsUdpMuxSocket* copy_sendonly();
|
SrsUdpMuxSocket* copy_sendonly();
|
||||||
ISrsUdpSender* sender() { return handler; };
|
ISrsUdpSender* sender();
|
||||||
private:
|
|
||||||
// Don't allow copy, user copy_sendonly instead
|
|
||||||
SrsUdpMuxSocket(const SrsUdpMuxSocket& rhs);
|
|
||||||
SrsUdpMuxSocket& operator=(const SrsUdpMuxSocket& rhs);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class SrsUdpMuxListener : public ISrsCoroutineHandler
|
class SrsUdpMuxListener : public ISrsCoroutineHandler
|
||||||
|
|
|
@ -3396,26 +3396,6 @@ srs_error_t SrsRtcServer::create_rtc_session(
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsRtcSession* SrsRtcServer::find_rtc_session_by_peer_id(const string& peer_id)
|
|
||||||
{
|
|
||||||
map<string, SrsRtcSession*>::iterator iter = map_id_session.find(peer_id);
|
|
||||||
if (iter == map_id_session.end()) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return iter->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
SrsRtcSession* SrsRtcServer::find_rtc_session_by_username(const std::string& username)
|
|
||||||
{
|
|
||||||
map<string, SrsRtcSession*>::iterator iter = map_username_session.find(username);
|
|
||||||
if (iter == map_username_session.end()) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return iter->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SrsRtcServer::insert_into_id_sessions(const string& peer_id, SrsRtcSession* rtc_session)
|
bool SrsRtcServer::insert_into_id_sessions(const string& peer_id, SrsRtcSession* rtc_session)
|
||||||
{
|
{
|
||||||
return map_id_session.insert(make_pair(peer_id, rtc_session)).second;
|
return map_id_session.insert(make_pair(peer_id, rtc_session)).second;
|
||||||
|
@ -3447,6 +3427,31 @@ void SrsRtcServer::check_and_clean_timeout_session()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SrsRtcServer::nn_sessions()
|
||||||
|
{
|
||||||
|
return (int)map_username_session.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsRtcSession* SrsRtcServer::find_rtc_session_by_peer_id(const string& peer_id)
|
||||||
|
{
|
||||||
|
map<string, SrsRtcSession*>::iterator iter = map_id_session.find(peer_id);
|
||||||
|
if (iter == map_id_session.end()) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return iter->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsRtcSession* SrsRtcServer::find_rtc_session_by_username(const std::string& username)
|
||||||
|
{
|
||||||
|
map<string, SrsRtcSession*>::iterator iter = map_username_session.find(username);
|
||||||
|
if (iter == map_username_session.end()) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return iter->second;
|
||||||
|
}
|
||||||
|
|
||||||
srs_error_t SrsRtcServer::notify(int type, srs_utime_t interval, srs_utime_t tick)
|
srs_error_t SrsRtcServer::notify(int type, srs_utime_t interval, srs_utime_t tick)
|
||||||
{
|
{
|
||||||
check_and_clean_timeout_session();
|
check_and_clean_timeout_session();
|
||||||
|
|
|
@ -444,7 +444,7 @@ public:
|
||||||
);
|
);
|
||||||
bool insert_into_id_sessions(const std::string& peer_id, SrsRtcSession* rtc_session);
|
bool insert_into_id_sessions(const std::string& peer_id, SrsRtcSession* rtc_session);
|
||||||
void check_and_clean_timeout_session();
|
void check_and_clean_timeout_session();
|
||||||
int nn_sessions() { return (int)map_username_session.size(); }
|
int nn_sessions();
|
||||||
private:
|
private:
|
||||||
SrsRtcSession* find_rtc_session_by_username(const std::string& ufrag);
|
SrsRtcSession* find_rtc_session_by_username(const std::string& ufrag);
|
||||||
SrsRtcSession* find_rtc_session_by_peer_id(const std::string& peer_id);
|
SrsRtcSession* find_rtc_session_by_peer_id(const std::string& peer_id);
|
||||||
|
|
|
@ -150,6 +150,21 @@ SrsRtpRingBuffer::~SrsRtpRingBuffer()
|
||||||
srs_freepa(queue_);
|
srs_freepa(queue_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t SrsRtpRingBuffer::low()
|
||||||
|
{
|
||||||
|
return low_;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t SrsRtpRingBuffer::high()
|
||||||
|
{
|
||||||
|
return high_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsRtpRingBuffer::advance_to(uint16_t seq)
|
||||||
|
{
|
||||||
|
low_ = seq;
|
||||||
|
}
|
||||||
|
|
||||||
void SrsRtpRingBuffer::set(uint16_t at, SrsRtpPacket2* pkt)
|
void SrsRtpRingBuffer::set(uint16_t at, SrsRtpPacket2* pkt)
|
||||||
{
|
{
|
||||||
SrsRtpPacket2* p = queue_[at % capacity_];
|
SrsRtpPacket2* p = queue_[at % capacity_];
|
||||||
|
@ -161,6 +176,11 @@ void SrsRtpRingBuffer::set(uint16_t at, SrsRtpPacket2* pkt)
|
||||||
queue_[at % capacity_] = pkt;
|
queue_[at % capacity_] = pkt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsRtpRingBuffer::remove(uint16_t at)
|
||||||
|
{
|
||||||
|
set(at, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
void SrsRtpRingBuffer::reset(uint16_t low, uint16_t high)
|
void SrsRtpRingBuffer::reset(uint16_t low, uint16_t high)
|
||||||
{
|
{
|
||||||
for (uint16_t s = low; s != high; ++s) {
|
for (uint16_t s = low; s != high; ++s) {
|
||||||
|
@ -168,6 +188,16 @@ void SrsRtpRingBuffer::reset(uint16_t low, uint16_t high)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SrsRtpRingBuffer::overflow()
|
||||||
|
{
|
||||||
|
return high_ - low_ < capacity_;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SrsRtpRingBuffer::is_heavy()
|
||||||
|
{
|
||||||
|
return high_ - low_ >= capacity_ / 2;
|
||||||
|
}
|
||||||
|
|
||||||
uint16_t SrsRtpRingBuffer::next_start_of_frame()
|
uint16_t SrsRtpRingBuffer::next_start_of_frame()
|
||||||
{
|
{
|
||||||
if (low_ == high_) {
|
if (low_ == high_) {
|
||||||
|
@ -245,6 +275,11 @@ void SrsRtpRingBuffer::update(uint16_t seq, bool startup, uint16_t& nack_low, ui
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SrsRtpPacket2* SrsRtpRingBuffer::at(uint16_t seq)
|
||||||
|
{
|
||||||
|
return queue_[seq % capacity_];
|
||||||
|
}
|
||||||
|
|
||||||
SrsRtpQueue::SrsRtpQueue(size_t capacity, bool one_packet_per_frame)
|
SrsRtpQueue::SrsRtpQueue(size_t capacity, bool one_packet_per_frame)
|
||||||
{
|
{
|
||||||
nn_collected_frames = 0;
|
nn_collected_frames = 0;
|
||||||
|
@ -396,6 +431,11 @@ void SrsRtpQueue::notify_nack_list_full()
|
||||||
queue_->advance_to(next + 1);
|
queue_->advance_to(next + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsRtpQueue::request_keyframe()
|
||||||
|
{
|
||||||
|
request_key_frame_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t SrsRtpQueue::get_extended_highest_sequence()
|
uint32_t SrsRtpQueue::get_extended_highest_sequence()
|
||||||
{
|
{
|
||||||
return queue_->get_extended_highest_sequence();
|
return queue_->get_extended_highest_sequence();
|
||||||
|
@ -450,7 +490,9 @@ void SrsRtpQueue::collect_packet()
|
||||||
{
|
{
|
||||||
while (queue_->low() != queue_->high()) {
|
while (queue_->low() != queue_->high()) {
|
||||||
vector<SrsRtpPacket2*> frame;
|
vector<SrsRtpPacket2*> frame;
|
||||||
for (uint16_t s = queue_->low(); s != queue_->high(); ++s) {
|
|
||||||
|
uint16_t s = queue_->low();
|
||||||
|
for (; s != queue_->high(); ++s) {
|
||||||
SrsRtpPacket2* pkt = queue_->at(s);
|
SrsRtpPacket2* pkt = queue_->at(s);
|
||||||
|
|
||||||
// In NACK, never collect frame.
|
// In NACK, never collect frame.
|
||||||
|
@ -468,14 +510,17 @@ void SrsRtpQueue::collect_packet()
|
||||||
frame.push_back(pkt);
|
frame.push_back(pkt);
|
||||||
|
|
||||||
// Not the last packet, continue to process next one.
|
// Not the last packet, continue to process next one.
|
||||||
if (pkt->rtp_header.get_marker() || one_packet_per_frame_) {
|
if (!pkt->rtp_header.get_marker() && !one_packet_per_frame_) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Done, we got the last packet of frame.
|
// Done, we got the last packet of frame.
|
||||||
nn_collected_frames++;
|
nn_collected_frames++;
|
||||||
frames_.push_back(frame);
|
frames_.push_back(frame);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (queue_->low() != s) {
|
||||||
// Reset the range of packets to NULL in buffer.
|
// Reset the range of packets to NULL in buffer.
|
||||||
queue_->reset(queue_->low(), s);
|
queue_->reset(queue_->low(), s);
|
||||||
|
|
||||||
|
|
|
@ -133,17 +133,17 @@ public:
|
||||||
virtual ~SrsRtpRingBuffer();
|
virtual ~SrsRtpRingBuffer();
|
||||||
public:
|
public:
|
||||||
// Move the position of buffer.
|
// Move the position of buffer.
|
||||||
uint16_t low() { return low_; }
|
uint16_t low();
|
||||||
uint16_t high() { return high_; }
|
uint16_t high();
|
||||||
void advance_to(uint16_t seq) { low_ = seq; }
|
void advance_to(uint16_t seq);
|
||||||
// Free the packet at position.
|
// Free the packet at position.
|
||||||
void set(uint16_t at, SrsRtpPacket2* pkt);
|
void set(uint16_t at, SrsRtpPacket2* pkt);
|
||||||
void remove(uint16_t at) { set(at, NULL); }
|
void remove(uint16_t at);
|
||||||
// Directly reset range [low, high] to NULL.
|
// Directly reset range [low, high] to NULL.
|
||||||
void reset(uint16_t low, uint16_t high);
|
void reset(uint16_t low, uint16_t high);
|
||||||
// Whether queue overflow or heavy(too many packets and need clear).
|
// Whether queue overflow or heavy(too many packets and need clear).
|
||||||
bool overflow() { return high_ - low_ < capacity_; }
|
bool overflow();
|
||||||
bool is_heavy() { return high_ - low_ >= capacity_ / 2; }
|
bool is_heavy();
|
||||||
// Get the next start packet of frame.
|
// Get the next start packet of frame.
|
||||||
// @remark If not found, return the low_, which should never be the "next" one,
|
// @remark If not found, return the low_, which should never be the "next" one,
|
||||||
// because it MAY or NOT current start packet of frame but never be the next.
|
// because it MAY or NOT current start packet of frame but never be the next.
|
||||||
|
@ -156,7 +156,7 @@ public:
|
||||||
// Update the sequence, got the nack range by [low, high].
|
// Update the sequence, got the nack range by [low, high].
|
||||||
void update(uint16_t seq, bool startup, uint16_t& nack_low, uint16_t& nack_high);
|
void update(uint16_t seq, bool startup, uint16_t& nack_low, uint16_t& nack_high);
|
||||||
// Get the packet by seq.
|
// Get the packet by seq.
|
||||||
SrsRtpPacket2* at(uint16_t seq) { return queue_[seq % capacity_]; }
|
SrsRtpPacket2* at(uint16_t seq);
|
||||||
};
|
};
|
||||||
|
|
||||||
class SrsRtpQueue
|
class SrsRtpQueue
|
||||||
|
@ -186,7 +186,7 @@ public:
|
||||||
bool should_request_key_frame();
|
bool should_request_key_frame();
|
||||||
void notify_drop_seq(uint16_t seq);
|
void notify_drop_seq(uint16_t seq);
|
||||||
void notify_nack_list_full();
|
void notify_nack_list_full();
|
||||||
void request_keyframe() { request_key_frame_ = true; }
|
void request_keyframe();
|
||||||
public:
|
public:
|
||||||
uint32_t get_extended_highest_sequence();
|
uint32_t get_extended_highest_sequence();
|
||||||
uint8_t get_fraction_lost();
|
uint8_t get_fraction_lost();
|
||||||
|
|
|
@ -457,6 +457,11 @@ SrsConsumer::~SrsConsumer()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsConsumer::enable_pass_timestamp()
|
||||||
|
{
|
||||||
|
pass_timestamp = true;
|
||||||
|
}
|
||||||
|
|
||||||
void SrsConsumer::set_queue_size(srs_utime_t queue_size)
|
void SrsConsumer::set_queue_size(srs_utime_t queue_size)
|
||||||
{
|
{
|
||||||
queue->set_queue_size(queue_size);
|
queue->set_queue_size(queue_size);
|
||||||
|
@ -2764,6 +2769,11 @@ void SrsSource::request_keyframe()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsSource::set_rtc_publisher(SrsRtcPublisher* v)
|
||||||
|
{
|
||||||
|
rtc_publisher = v;
|
||||||
|
}
|
||||||
|
|
||||||
srs_error_t SrsSource::on_rtc_audio(SrsSharedPtrMessage* audio)
|
srs_error_t SrsSource::on_rtc_audio(SrsSharedPtrMessage* audio)
|
||||||
{
|
{
|
||||||
// TODO: FIXME: Merge with on_audio.
|
// TODO: FIXME: Merge with on_audio.
|
||||||
|
|
|
@ -217,7 +217,7 @@ public:
|
||||||
virtual ~SrsConsumer();
|
virtual ~SrsConsumer();
|
||||||
public:
|
public:
|
||||||
// Use pass timestamp mode.
|
// Use pass timestamp mode.
|
||||||
void enable_pass_timestamp() { pass_timestamp = true; }
|
void enable_pass_timestamp();
|
||||||
// Set the size of queue.
|
// Set the size of queue.
|
||||||
virtual void set_queue_size(srs_utime_t queue_size);
|
virtual void set_queue_size(srs_utime_t queue_size);
|
||||||
// when source id changed, notice client to print.
|
// when source id changed, notice client to print.
|
||||||
|
@ -658,7 +658,7 @@ public:
|
||||||
// TODO: FIXME: Maybe we could cache the keyframe.
|
// TODO: FIXME: Maybe we could cache the keyframe.
|
||||||
// TODO: FIXME: Maybe we should only response for the new clients.
|
// TODO: FIXME: Maybe we should only response for the new clients.
|
||||||
void request_keyframe();
|
void request_keyframe();
|
||||||
void set_rtc_publisher(SrsRtcPublisher* v) { rtc_publisher = v; }
|
void set_rtc_publisher(SrsRtcPublisher* v);
|
||||||
// When got RTC audio message, which is encoded in opus.
|
// When got RTC audio message, which is encoded in opus.
|
||||||
// TODO: FIXME: Merge with on_audio.
|
// TODO: FIXME: Merge with on_audio.
|
||||||
srs_error_t on_rtc_audio(SrsSharedPtrMessage* audio);
|
srs_error_t on_rtc_audio(SrsSharedPtrMessage* audio);
|
||||||
|
|
|
@ -198,6 +198,71 @@ int SrsRtpHeader::nb_bytes()
|
||||||
return kRtpHeaderFixedSize + cc * 4 + (extension ? (extension_length + 1) * 4 : 0);
|
return kRtpHeaderFixedSize + cc * 4 + (extension ? (extension_length + 1) * 4 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsRtpHeader::set_marker(bool v)
|
||||||
|
{
|
||||||
|
marker = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SrsRtpHeader::get_marker() const
|
||||||
|
{
|
||||||
|
return marker;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsRtpHeader::set_payload_type(uint8_t v)
|
||||||
|
{
|
||||||
|
payload_type = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t SrsRtpHeader::get_payload_type() const
|
||||||
|
{
|
||||||
|
return payload_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsRtpHeader::set_sequence(uint16_t v)
|
||||||
|
{
|
||||||
|
sequence = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t SrsRtpHeader::get_sequence() const
|
||||||
|
{
|
||||||
|
return sequence;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsRtpHeader::set_timestamp(int64_t v)
|
||||||
|
{
|
||||||
|
timestamp = (uint32_t)v;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t SrsRtpHeader::get_timestamp() const
|
||||||
|
{
|
||||||
|
return timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsRtpHeader::set_ssrc(uint32_t v)
|
||||||
|
{
|
||||||
|
ssrc = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t SrsRtpHeader::get_ssrc() const
|
||||||
|
{
|
||||||
|
return ssrc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsRtpHeader::set_padding(bool v)
|
||||||
|
{
|
||||||
|
padding = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsRtpHeader::set_padding_length(uint8_t v)
|
||||||
|
{
|
||||||
|
padding_length = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t SrsRtpHeader::get_padding_length() const
|
||||||
|
{
|
||||||
|
return padding_length;
|
||||||
|
}
|
||||||
|
|
||||||
ISrsRtpPacketDecodeHandler::ISrsRtpPacketDecodeHandler()
|
ISrsRtpPacketDecodeHandler::ISrsRtpPacketDecodeHandler()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -285,6 +350,17 @@ SrsRtpFUAPayload2* SrsRtpPacket2::reuse_fua()
|
||||||
return cache_fua;
|
return cache_fua;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsRtpPacket2::set_decode_handler(ISrsRtpPacketDecodeHandler* h)
|
||||||
|
{
|
||||||
|
decode_handler = h;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsRtpPacket2::set_original_bytes(char* buf, int nn_buf)
|
||||||
|
{
|
||||||
|
original_bytes = buf;
|
||||||
|
nn_original_bytes = nn_buf;
|
||||||
|
}
|
||||||
|
|
||||||
int SrsRtpPacket2::nb_bytes()
|
int SrsRtpPacket2::nb_bytes()
|
||||||
{
|
{
|
||||||
if (!cache_payload) {
|
if (!cache_payload) {
|
||||||
|
|
|
@ -78,19 +78,19 @@ public:
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual int nb_bytes();
|
virtual int nb_bytes();
|
||||||
public:
|
public:
|
||||||
inline void set_marker(bool v) { marker = v; }
|
void set_marker(bool v);
|
||||||
bool get_marker() const { return marker; }
|
bool get_marker() const;
|
||||||
inline void set_payload_type(uint8_t v) { payload_type = v; }
|
void set_payload_type(uint8_t v);
|
||||||
uint8_t get_payload_type() const { return payload_type; }
|
uint8_t get_payload_type() const;
|
||||||
inline void set_sequence(uint16_t v) { sequence = v; }
|
void set_sequence(uint16_t v);
|
||||||
uint16_t get_sequence() const { return sequence; }
|
uint16_t get_sequence() const;
|
||||||
inline void set_timestamp(int64_t v) { timestamp = (uint32_t)v; }
|
void set_timestamp(int64_t v);
|
||||||
int64_t get_timestamp() const { return timestamp; }
|
int64_t get_timestamp() const;
|
||||||
inline void set_ssrc(uint32_t v) { ssrc = v; }
|
void set_ssrc(uint32_t v);
|
||||||
uint32_t get_ssrc() const { return ssrc; }
|
uint32_t get_ssrc() const;
|
||||||
inline void set_padding(bool v) { padding = v; }
|
void set_padding(bool v);
|
||||||
inline void set_padding_length(uint8_t v) { padding_length = v; }
|
void set_padding_length(uint8_t v);
|
||||||
uint8_t get_padding_length() const { return padding_length; }
|
uint8_t get_padding_length() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ISrsRtpPacketDecodeHandler
|
class ISrsRtpPacketDecodeHandler
|
||||||
|
@ -150,9 +150,9 @@ public:
|
||||||
// Reuse the cached fua message as payload.
|
// Reuse the cached fua message as payload.
|
||||||
SrsRtpFUAPayload2* reuse_fua();
|
SrsRtpFUAPayload2* reuse_fua();
|
||||||
// Set the decode handler.
|
// Set the decode handler.
|
||||||
void set_decode_handler(ISrsRtpPacketDecodeHandler* h) { decode_handler = h; }
|
void set_decode_handler(ISrsRtpPacketDecodeHandler* h);
|
||||||
// Set the original bytes.
|
// Set the original bytes.
|
||||||
void set_original_bytes(char* buf, int nn_buf) { original_bytes = buf; nn_original_bytes = nn_buf; }
|
void set_original_bytes(char* buf, int nn_buf);
|
||||||
// interface ISrsEncoder
|
// interface ISrsEncoder
|
||||||
public:
|
public:
|
||||||
virtual int nb_bytes();
|
virtual int nb_bytes();
|
||||||
|
@ -304,6 +304,7 @@ public:
|
||||||
SrsRtpH264Header& operator=(const SrsRtpH264Header& rhs);
|
SrsRtpH264Header& operator=(const SrsRtpH264Header& rhs);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TODO: FIXME: Merge it with shared message.
|
||||||
class SrsRtpSharedPacket
|
class SrsRtpSharedPacket
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -98,6 +98,96 @@ SrsStunPacket::~SrsStunPacket()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SrsStunPacket::is_binding_request() const
|
||||||
|
{
|
||||||
|
return message_type == BindingRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SrsStunPacket::is_binding_response() const
|
||||||
|
{
|
||||||
|
return message_type == BindingResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t SrsStunPacket::get_message_type() const
|
||||||
|
{
|
||||||
|
return message_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string SrsStunPacket::get_username() const
|
||||||
|
{
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string SrsStunPacket::get_local_ufrag() const
|
||||||
|
{
|
||||||
|
return local_ufrag;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string SrsStunPacket::get_remote_ufrag() const
|
||||||
|
{
|
||||||
|
return remote_ufrag;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string SrsStunPacket::get_transcation_id() const
|
||||||
|
{
|
||||||
|
return transcation_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t SrsStunPacket::get_mapped_address() const
|
||||||
|
{
|
||||||
|
return mapped_address;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t SrsStunPacket::get_mapped_port() const
|
||||||
|
{
|
||||||
|
return mapped_port;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SrsStunPacket::get_ice_controlled() const
|
||||||
|
{
|
||||||
|
return ice_controlled;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SrsStunPacket::get_ice_controlling() const
|
||||||
|
{
|
||||||
|
return ice_controlling;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SrsStunPacket::get_use_candidate() const
|
||||||
|
{
|
||||||
|
return use_candidate;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsStunPacket::set_message_type(const uint16_t& m)
|
||||||
|
{
|
||||||
|
message_type = m;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsStunPacket::set_local_ufrag(const std::string& u)
|
||||||
|
{
|
||||||
|
local_ufrag = u;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsStunPacket::set_remote_ufrag(const std::string& u)
|
||||||
|
{
|
||||||
|
remote_ufrag = u;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsStunPacket::set_transcation_id(const std::string& t)
|
||||||
|
{
|
||||||
|
transcation_id = t;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsStunPacket::set_mapped_address(const uint32_t& addr)
|
||||||
|
{
|
||||||
|
mapped_address = addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsStunPacket::set_mapped_port(const uint32_t& port)
|
||||||
|
{
|
||||||
|
mapped_port = port;
|
||||||
|
}
|
||||||
|
|
||||||
srs_error_t SrsStunPacket::decode(const char* buf, const int nb_buf)
|
srs_error_t SrsStunPacket::decode(const char* buf, const int nb_buf)
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
|
|
@ -92,28 +92,25 @@ private:
|
||||||
public:
|
public:
|
||||||
SrsStunPacket();
|
SrsStunPacket();
|
||||||
virtual ~SrsStunPacket();
|
virtual ~SrsStunPacket();
|
||||||
|
public:
|
||||||
bool is_binding_request() const { return message_type == BindingRequest; }
|
bool is_binding_request() const;
|
||||||
bool is_binding_response() const { return message_type == BindingResponse; }
|
bool is_binding_response() const;
|
||||||
|
uint16_t get_message_type() const;
|
||||||
uint16_t get_message_type() const { return message_type; }
|
std::string get_username() const;
|
||||||
std::string get_username() const { return username; }
|
std::string get_local_ufrag() const;
|
||||||
std::string get_local_ufrag() const { return local_ufrag; }
|
std::string get_remote_ufrag() const;
|
||||||
std::string get_remote_ufrag() const { return remote_ufrag; }
|
std::string get_transcation_id() const;
|
||||||
std::string get_transcation_id() const { return transcation_id; }
|
uint32_t get_mapped_address() const;
|
||||||
uint32_t get_mapped_address() const { return mapped_address; }
|
uint16_t get_mapped_port() const;
|
||||||
uint16_t get_mapped_port() const { return mapped_port; }
|
bool get_ice_controlled() const;
|
||||||
bool get_ice_controlled() const { return ice_controlled; }
|
bool get_ice_controlling() const;
|
||||||
bool get_ice_controlling() const { return ice_controlling; }
|
bool get_use_candidate() const;
|
||||||
bool get_use_candidate() const { return use_candidate; }
|
void set_message_type(const uint16_t& m);
|
||||||
|
void set_local_ufrag(const std::string& u);
|
||||||
void set_message_type(const uint16_t& m) { message_type = m; }
|
void set_remote_ufrag(const std::string& u);
|
||||||
void set_local_ufrag(const std::string& u) { local_ufrag = u; }
|
void set_transcation_id(const std::string& t);
|
||||||
void set_remote_ufrag(const std::string& u) { remote_ufrag = u; }
|
void set_mapped_address(const uint32_t& addr);
|
||||||
void set_transcation_id(const std::string& t) { transcation_id = t; }
|
void set_mapped_port(const uint32_t& port);
|
||||||
void set_mapped_address(const uint32_t& addr) { mapped_address = addr; }
|
|
||||||
void set_mapped_port(const uint32_t& port) { mapped_port = port; }
|
|
||||||
|
|
||||||
srs_error_t decode(const char* buf, const int nb_buf);
|
srs_error_t decode(const char* buf, const int nb_buf);
|
||||||
srs_error_t encode(const std::string& pwd, SrsBuffer* stream);
|
srs_error_t encode(const std::string& pwd, SrsBuffer* stream);
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Reference in a new issue