mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-07-07 12:18:12 +08:00
大幅提升接收推流性能以及降低内存占用
This commit is contained in:
@@ -704,7 +704,8 @@ void RtspPlayer::sendRtspRequest(const string &cmd, const string &url,const StrC
|
||||
for (auto &pr : header){
|
||||
printer << pr.first << ": " << pr.second << "\r\n";
|
||||
}
|
||||
SockSender::send(printer << "\r\n");
|
||||
printer << "\r\n";
|
||||
SockSender::send(std::move(printer));
|
||||
}
|
||||
|
||||
void RtspPlayer::onRecvRTP_l(const RtpPacket::Ptr &rtp, const SdpTrack::Ptr &track) {
|
||||
|
||||
@@ -121,8 +121,6 @@ void RtspPusher::onConnect(const SockException &err) {
|
||||
onPublishResult(err, false);
|
||||
return;
|
||||
}
|
||||
//推流器不需要多大的接收缓存,节省内存占用
|
||||
getSock()->setReadBuffer(std::make_shared<BufferRaw>(1 * 1024));
|
||||
sendAnnounce();
|
||||
}
|
||||
|
||||
@@ -318,7 +316,7 @@ inline void RtspPusher::sendRtpPacket(const RtspMediaSource::RingDataType &pkt)
|
||||
setSendFlushFlag(true);
|
||||
}
|
||||
BufferRtp::Ptr buffer(new BufferRtp(rtp));
|
||||
send(buffer);
|
||||
send(std::move(buffer));
|
||||
});
|
||||
break;
|
||||
}
|
||||
@@ -335,7 +333,7 @@ inline void RtspPusher::sendRtpPacket(const RtspMediaSource::RingDataType &pkt)
|
||||
}
|
||||
|
||||
BufferRtp::Ptr buffer(new BufferRtp(rtp, 4));
|
||||
pSock->send(buffer, nullptr, 0, ++i == size);
|
||||
pSock->send(std::move(buffer), nullptr, 0, ++i == size);
|
||||
});
|
||||
break;
|
||||
}
|
||||
@@ -475,7 +473,7 @@ void RtspPusher::sendRtspRequest(const string &cmd, const string &url,const StrC
|
||||
if (!sdp.empty()) {
|
||||
printer << sdp;
|
||||
}
|
||||
SockSender::send(printer);
|
||||
SockSender::send(std::move(printer));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -60,8 +60,6 @@ RtspSession::RtspSession(const Socket::Ptr &sock) : TcpSession(sock) {
|
||||
DebugP(this);
|
||||
GET_CONFIG(uint32_t,keep_alive_sec,Rtsp::kKeepAliveSecond);
|
||||
sock->setSendTimeOutSecond(keep_alive_sec);
|
||||
//起始接收buffer缓存设置为4K,节省内存
|
||||
sock->setReadBuffer(std::make_shared<BufferRaw>(4 * 1024));
|
||||
}
|
||||
|
||||
RtspSession::~RtspSession() {
|
||||
@@ -270,8 +268,7 @@ void RtspSession::handleReq_RECORD(const Parser &parser){
|
||||
rtp_info.pop_back();
|
||||
sendRtspResponse("200 OK", {"RTP-Info",rtp_info});
|
||||
if(_rtp_type == Rtsp::RTP_TCP){
|
||||
//如果是rtsp推流服务器,并且是TCP推流,那么加大TCP接收缓存,这样能提升接收性能
|
||||
getSock()->setReadBuffer(std::make_shared<BufferRaw>(256 * 1024));
|
||||
//如果是rtsp推流服务器,并且是TCP推流,设置socket flags,,这样能提升接收性能
|
||||
setSocketFlags();
|
||||
}
|
||||
};
|
||||
@@ -1030,15 +1027,15 @@ bool RtspSession::sendRtspResponse(const string &res_code, const StrCaseMap &hea
|
||||
printer << sdp;
|
||||
}
|
||||
// DebugP(this) << printer;
|
||||
return send(std::make_shared<BufferString>(printer)) > 0 ;
|
||||
return send(std::make_shared<BufferString>(std::move(printer))) > 0 ;
|
||||
}
|
||||
|
||||
int RtspSession::send(const Buffer::Ptr &pkt){
|
||||
int RtspSession::send(Buffer::Ptr pkt){
|
||||
// if(!_enableSendRtp){
|
||||
// DebugP(this) << pkt->data();
|
||||
// }
|
||||
_bytes_usage += pkt->size();
|
||||
return TcpSession::send(pkt);
|
||||
return TcpSession::send(std::move(pkt));
|
||||
}
|
||||
|
||||
bool RtspSession::sendRtspResponse(const string &res_code, const std::initializer_list<string> &header, const string &sdp, const char *protocol) {
|
||||
@@ -1162,7 +1159,7 @@ void RtspSession::sendRtpPacket(const RtspMediaSource::RingDataType &pkt) {
|
||||
}
|
||||
BufferRtp::Ptr buffer(new BufferRtp(rtp, 4));
|
||||
_bytes_usage += buffer->size();
|
||||
pSock->send(buffer, nullptr, 0, ++i == size);
|
||||
pSock->send(std::move(buffer), nullptr, 0, ++i == size);
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -93,7 +93,7 @@ protected:
|
||||
std::shared_ptr<SockInfo> getOriginSock(MediaSource &sender) const override;
|
||||
|
||||
/////TcpSession override////
|
||||
int send(const Buffer::Ptr &pkt) override;
|
||||
int send(Buffer::Ptr pkt) override;
|
||||
//收到RTCP包回调
|
||||
virtual void onRtcpPacket(int track_idx, SdpTrack::Ptr &track, unsigned char *data, unsigned int len);
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
namespace mediakit{
|
||||
|
||||
const char *RtspSplitter::onSearchPacketTail(const char *data, int len) {
|
||||
const char *RtspSplitter::onSearchPacketTail(const char *data, uint64_t len) {
|
||||
auto ret = onSearchPacketTail_l(data, len);
|
||||
if(ret){
|
||||
return ret;
|
||||
@@ -32,7 +32,7 @@ const char *RtspSplitter::onSearchPacketTail(const char *data, int len) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
const char *RtspSplitter::onSearchPacketTail_l(const char *data, int len) {
|
||||
const char *RtspSplitter::onSearchPacketTail_l(const char *data, uint64_t len) {
|
||||
if(!_enableRecvRtp || data[0] != '$'){
|
||||
//这是rtsp包
|
||||
_isRtpPacket = false;
|
||||
|
||||
@@ -47,8 +47,8 @@ protected:
|
||||
*/
|
||||
virtual int64_t getContentLength(Parser &parser);
|
||||
protected:
|
||||
const char *onSearchPacketTail(const char *data,int len) override ;
|
||||
const char *onSearchPacketTail_l(const char *data,int len) ;
|
||||
const char *onSearchPacketTail(const char *data,uint64_t len) override ;
|
||||
const char *onSearchPacketTail_l(const char *data,uint64_t len) ;
|
||||
int64_t onRecvHeader(const char *data,uint64_t len) override;
|
||||
void onRecvContent(const char *data,uint64_t len) override;
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user