mirror of
https://github.com/ossrs/srs.git
synced 2025-02-13 20:01:56 +00:00
RTC: Cache the buffer for player
This commit is contained in:
parent
8baf0867a0
commit
2f4fe31337
2 changed files with 15 additions and 10 deletions
|
@ -1605,6 +1605,11 @@ SrsRtcConnection::SrsRtcConnection(SrsRtcServer* s, const SrsContextId& cid)
|
||||||
server_ = s;
|
server_ = s;
|
||||||
transport_ = new SrsSecurityTransport(this);
|
transport_ = new SrsSecurityTransport(this);
|
||||||
|
|
||||||
|
cache_iov_ = new iovec();
|
||||||
|
cache_iov_->iov_base = new char[kRtpPacketSize];
|
||||||
|
cache_iov_->iov_len = kRtpPacketSize;
|
||||||
|
cache_buffer_ = new SrsBuffer((char*)cache_iov_->iov_base, kRtpPacketSize);
|
||||||
|
|
||||||
state_ = INIT;
|
state_ = INIT;
|
||||||
last_stun_time = 0;
|
last_stun_time = 0;
|
||||||
session_timeout = 0;
|
session_timeout = 0;
|
||||||
|
@ -1648,6 +1653,9 @@ SrsRtcConnection::~SrsRtcConnection()
|
||||||
srs_freep(addr);
|
srs_freep(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
srs_freep(cache_iov_);
|
||||||
|
srs_freep(cache_buffer_);
|
||||||
|
|
||||||
srs_freep(transport_);
|
srs_freep(transport_);
|
||||||
srs_freep(req);
|
srs_freep(req);
|
||||||
srs_freep(stat_);
|
srs_freep(stat_);
|
||||||
|
@ -2510,22 +2518,16 @@ srs_error_t SrsRtcConnection::do_send_packets(const std::vector<SrsRtpPacket2*>&
|
||||||
SrsRtpPacket2* pkt = pkts.at(i);
|
SrsRtpPacket2* pkt = pkts.at(i);
|
||||||
|
|
||||||
// For this message, select the first iovec.
|
// For this message, select the first iovec.
|
||||||
iovec* iov = new iovec();
|
iovec* iov = cache_iov_;
|
||||||
SrsAutoFree(iovec, iov);
|
|
||||||
|
|
||||||
char* iov_base = new char[kRtpPacketSize];
|
|
||||||
SrsAutoFreeA(char, iov_base);
|
|
||||||
|
|
||||||
iov->iov_base = iov_base;
|
|
||||||
iov->iov_len = kRtpPacketSize;
|
iov->iov_len = kRtpPacketSize;
|
||||||
|
cache_buffer_->skip(-1 * cache_buffer_->pos());
|
||||||
|
|
||||||
// Marshal packet to bytes in iovec.
|
// Marshal packet to bytes in iovec.
|
||||||
if (true) {
|
if (true) {
|
||||||
SrsBuffer stream((char*)iov->iov_base, iov->iov_len);
|
if ((err = pkt->encode(cache_buffer_)) != srs_success) {
|
||||||
if ((err = pkt->encode(&stream)) != srs_success) {
|
|
||||||
return srs_error_wrap(err, "encode packet");
|
return srs_error_wrap(err, "encode packet");
|
||||||
}
|
}
|
||||||
iov->iov_len = stream.pos();
|
iov->iov_len = cache_buffer_->pos();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cipher RTP to SRTP packet.
|
// Cipher RTP to SRTP packet.
|
||||||
|
|
|
@ -431,6 +431,9 @@ private:
|
||||||
SrsRtcConnectionStateType state_;
|
SrsRtcConnectionStateType state_;
|
||||||
ISrsRtcTransport* transport_;
|
ISrsRtcTransport* transport_;
|
||||||
SrsHourGlass* timer_;
|
SrsHourGlass* timer_;
|
||||||
|
private:
|
||||||
|
iovec* cache_iov_;
|
||||||
|
SrsBuffer* cache_buffer_;
|
||||||
private:
|
private:
|
||||||
// key: stream id
|
// key: stream id
|
||||||
std::map<std::string, SrsRtcPlayStream*> players_;
|
std::map<std::string, SrsRtcPlayStream*> players_;
|
||||||
|
|
Loading…
Reference in a new issue