mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-13 03:31:45 +08:00
大幅提升接收推流性能以及降低内存占用
This commit is contained in:
@@ -102,11 +102,12 @@ void FrameMerger::inputFrame(const Frame::Ptr &frame,const function<void(uint32_
|
||||
Frame::Ptr back = _frameCached.back();
|
||||
Buffer::Ptr merged_frame = back;
|
||||
if(_frameCached.size() != 1){
|
||||
string merged;
|
||||
BufferLikeString merged;
|
||||
merged.reserve(back->size() + 1024);
|
||||
_frameCached.for_each([&](const Frame::Ptr &frame){
|
||||
merged.append(frame->data(),frame->size());
|
||||
});
|
||||
merged_frame = std::make_shared<BufferString>(std::move(merged));
|
||||
merged_frame = std::make_shared<BufferOffset<BufferLikeString> >(std::move(merged));
|
||||
}
|
||||
cb(back->dts(),back->pts(),merged_frame);
|
||||
_frameCached.clear();
|
||||
|
||||
@@ -69,7 +69,7 @@ void GB28181Process::onRtpSorted(const RtpPacket::Ptr &rtp, int) {
|
||||
_rtp_decoder->inputRtp(rtp, false);
|
||||
}
|
||||
|
||||
const char *GB28181Process::onSearchPacketTail(const char *packet,int bytes){
|
||||
const char *GB28181Process::onSearchPacketTail(const char *packet,uint64_t bytes){
|
||||
try {
|
||||
auto ret = _decoder->input((uint8_t *) packet, bytes);
|
||||
if (ret > 0) {
|
||||
|
||||
@@ -37,7 +37,7 @@ public:
|
||||
|
||||
protected:
|
||||
void onRtpSorted(const RtpPacket::Ptr &rtp, int track_index) override ;
|
||||
const char *onSearchPacketTail(const char *data,int len) override;
|
||||
const char *onSearchPacketTail(const char *data,uint64_t len) override;
|
||||
int64_t onRecvHeader(const char *data,uint64_t len) override { return 0; };
|
||||
|
||||
private:
|
||||
|
||||
@@ -129,7 +129,8 @@ void PSEncoder::inputFrame(const Frame::Ptr &frame) {
|
||||
Frame::Ptr back = _frameCached.back();
|
||||
Buffer::Ptr merged_frame = back;
|
||||
if (_frameCached.size() != 1) {
|
||||
string merged;
|
||||
BufferLikeString merged;
|
||||
merged.reserve(back->size() + 1024);
|
||||
_frameCached.for_each([&](const Frame::Ptr &frame) {
|
||||
if (frame->prefixSize()) {
|
||||
merged.append(frame->data(), frame->size());
|
||||
@@ -138,7 +139,7 @@ void PSEncoder::inputFrame(const Frame::Ptr &frame) {
|
||||
merged.append(frame->data(), frame->size());
|
||||
}
|
||||
});
|
||||
merged_frame = std::make_shared<BufferString>(std::move(merged));
|
||||
merged_frame = std::make_shared<BufferOffset<BufferLikeString> >(std::move(merged));
|
||||
}
|
||||
track_info.stamp.revise(back->dts(), back->pts(), dts_out, pts_out);
|
||||
_timestamp = dts_out;
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
*/
|
||||
|
||||
#if defined(ENABLE_RTPPROXY)
|
||||
#include <netinet/in.h>
|
||||
#include <string.h>
|
||||
#include "RtpSplitter.h"
|
||||
namespace mediakit{
|
||||
@@ -35,14 +34,14 @@ int64_t RtpSplitter::onRecvHeader(const char *data,uint64_t len){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool isEhome(const char *data, int len){
|
||||
static bool isEhome(const char *data, uint64_t len){
|
||||
if (len < 4) {
|
||||
return false;
|
||||
}
|
||||
return memcmp(data, kEHOME_MAGIC, sizeof(kEHOME_MAGIC) - 1) == 0;
|
||||
}
|
||||
|
||||
const char *RtpSplitter::onSearchPacketTail(const char *data, int len) {
|
||||
const char *RtpSplitter::onSearchPacketTail(const char *data, uint64_t len) {
|
||||
if (len < 4) {
|
||||
//数据不够
|
||||
return nullptr;
|
||||
@@ -70,7 +69,7 @@ const char *RtpSplitter::onSearchPacketTail(const char *data, int len) {
|
||||
return onSearchPacketTail_l(data, len);
|
||||
}
|
||||
|
||||
const char *RtpSplitter::onSearchPacketTail_l(const char *data, int len) {
|
||||
const char *RtpSplitter::onSearchPacketTail_l(const char *data, uint64_t len) {
|
||||
//这是rtp包
|
||||
uint16_t length = (((uint8_t *) data)[0] << 8) | ((uint8_t *) data)[1];
|
||||
if (len < length + 2) {
|
||||
|
||||
@@ -31,8 +31,8 @@ protected:
|
||||
|
||||
protected:
|
||||
int64_t onRecvHeader(const char *data, uint64_t len) override;
|
||||
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);
|
||||
|
||||
private:
|
||||
int _offset = 0;
|
||||
|
||||
@@ -28,7 +28,7 @@ int64_t TSSegment::onRecvHeader(const char *data, uint64_t len) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *TSSegment::onSearchPacketTail(const char *data, int len) {
|
||||
const char *TSSegment::onSearchPacketTail(const char *data, uint64_t len) {
|
||||
if (len < _size + 1) {
|
||||
if (len == _size && ((uint8_t *) data)[0] == TS_SYNC_BYTE) {
|
||||
return data + _size;
|
||||
|
||||
@@ -31,7 +31,7 @@ public:
|
||||
static bool isTSPacket(const char *data, int len);
|
||||
protected:
|
||||
int64_t onRecvHeader(const char *data, uint64_t len) override ;
|
||||
const char *onSearchPacketTail(const char *data, int len) override ;
|
||||
const char *onSearchPacketTail(const char *data, uint64_t len) override ;
|
||||
private:
|
||||
int _size;
|
||||
onSegment _onSegment;
|
||||
|
||||
Reference in New Issue
Block a user