1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

RTC: Remove shared bytes, use shared msg

This commit is contained in:
winlin 2020-05-14 14:30:32 +08:00
parent f794a7d3a7
commit 7b0a9fe95f
4 changed files with 15 additions and 20 deletions

View file

@ -1712,8 +1712,8 @@ srs_error_t SrsRtcPublisher::on_rtp(char* buf, int nb_buf)
SrsRtpPacket2* pkt = new SrsRtpPacket2(); SrsRtpPacket2* pkt = new SrsRtpPacket2();
pkt->set_decode_handler(this); pkt->set_decode_handler(this);
pkt->original_msg = new SrsSharedPtrMessage(); pkt->shared_msg = new SrsSharedPtrMessage();
pkt->original_msg->wrap(buf, nb_buf); pkt->shared_msg->wrap(buf, nb_buf);
SrsBuffer b(buf, nb_buf); SrsBuffer b(buf, nb_buf);
if ((err = pkt->decode(&b)) != srs_success) { if ((err = pkt->decode(&b)) != srs_success) {

View file

@ -704,8 +704,8 @@ srs_error_t SrsRtcFromRtmpBridger::package_opus(char* data, int size, SrsRtpPack
raw->nn_payload = size; raw->nn_payload = size;
memcpy(raw->payload, data, size); memcpy(raw->payload, data, size);
pkt->original_msg = new SrsSharedPtrMessage(); pkt->shared_msg = new SrsSharedPtrMessage();
pkt->original_msg->wrap(raw->payload, size); pkt->shared_msg->wrap(raw->payload, size);
*ppkt = pkt; *ppkt = pkt;
@ -850,8 +850,8 @@ srs_error_t SrsRtcFromRtmpBridger::package_stap_a(SrsRtcSource* source, SrsShare
// Copy the SPS/PPS bytes, because it may change. // Copy the SPS/PPS bytes, because it may change.
int size = (int)(sps.size() + pps.size()); int size = (int)(sps.size() + pps.size());
char* payload = new char[size]; char* payload = new char[size];
pkt->original_msg = new SrsSharedPtrMessage(); pkt->shared_msg = new SrsSharedPtrMessage();
pkt->original_msg->wrap(payload, size); pkt->shared_msg->wrap(payload, size);
if (true) { if (true) {
SrsSample* sample = new SrsSample(); SrsSample* sample = new SrsSample();
@ -910,7 +910,7 @@ srs_error_t SrsRtcFromRtmpBridger::package_nalus(SrsSharedPtrMessage* msg, vecto
pkt->frame_type = SrsFrameTypeVideo; pkt->frame_type = SrsFrameTypeVideo;
pkt->rtp_header.set_timestamp(msg->timestamp * 90); pkt->rtp_header.set_timestamp(msg->timestamp * 90);
pkt->payload = raw; pkt->payload = raw;
pkt->original_msg = msg->copy(); pkt->shared_msg = msg->copy();
pkts.push_back(pkt); pkts.push_back(pkt);
} else { } else {
// We must free it, should never use RTP packets to free it, // We must free it, should never use RTP packets to free it,
@ -945,7 +945,7 @@ srs_error_t SrsRtcFromRtmpBridger::package_nalus(SrsSharedPtrMessage* msg, vecto
fua->end = bool(i == num_of_packet - 1); fua->end = bool(i == num_of_packet - 1);
pkt->payload = fua; pkt->payload = fua;
pkt->original_msg = msg->copy(); pkt->shared_msg = msg->copy();
pkts.push_back(pkt); pkts.push_back(pkt);
nb_left -= packet_size; nb_left -= packet_size;
@ -968,7 +968,7 @@ srs_error_t SrsRtcFromRtmpBridger::package_single_nalu(SrsSharedPtrMessage* msg,
raw->payload = sample->bytes; raw->payload = sample->bytes;
raw->nn_payload = sample->size; raw->nn_payload = sample->size;
pkt->original_msg = msg->copy(); pkt->shared_msg = msg->copy();
pkts.push_back(pkt); pkts.push_back(pkt);
return err; return err;
@ -1001,7 +1001,7 @@ srs_error_t SrsRtcFromRtmpBridger::package_fu_a(SrsSharedPtrMessage* msg, SrsSam
fua->payload = p; fua->payload = p;
fua->size = packet_size; fua->size = packet_size;
pkt->original_msg = msg->copy(); pkt->shared_msg = msg->copy();
pkts.push_back(pkt); pkts.push_back(pkt);
p += packet_size; p += packet_size;

View file

@ -288,8 +288,7 @@ SrsRtpPacket2::SrsRtpPacket2()
decode_handler = NULL; decode_handler = NULL;
nalu_type = SrsAvcNaluTypeReserved; nalu_type = SrsAvcNaluTypeReserved;
original_bytes = NULL; shared_msg = NULL;
original_msg = NULL;
frame_type = SrsFrameTypeReserved; frame_type = SrsFrameTypeReserved;
cache_raw = new SrsRtpRawPayload(); cache_raw = new SrsRtpRawPayload();
@ -308,8 +307,7 @@ SrsRtpPacket2::~SrsRtpPacket2()
srs_freep(cache_raw); srs_freep(cache_raw);
srs_freep(cache_fua); srs_freep(cache_fua);
srs_freepa(original_bytes); srs_freep(shared_msg);
srs_freep(original_msg);
} }
void SrsRtpPacket2::set_padding(int size) void SrsRtpPacket2::set_padding(int size)
@ -376,7 +374,7 @@ SrsRtpPacket2* SrsRtpPacket2::copy()
cp->padding = padding; cp->padding = padding;
cp->nalu_type = nalu_type; cp->nalu_type = nalu_type;
cp->original_msg = original_msg? original_msg->copy():NULL; cp->shared_msg = shared_msg? shared_msg->copy():NULL;
cp->frame_type = frame_type; cp->frame_type = frame_type;
cp->cache_payload = cache_payload; cp->cache_payload = cache_payload;

View file

@ -129,11 +129,8 @@ public:
public: public:
// The first byte as nalu type, for video decoder only. // The first byte as nalu type, for video decoder only.
SrsAvcNaluType nalu_type; SrsAvcNaluType nalu_type;
// The original bytes for decoder or bridger only, we will free it. // The original shared message, all RTP packets can refer to its data.
// TODO: FIXME: Should covert to shared prt message. SrsSharedPtrMessage* shared_msg;
char* original_bytes;
// The original msg for bridger only, we will free it.
SrsSharedPtrMessage* original_msg;
// The frame type, for RTMP bridger or SFU source. // The frame type, for RTMP bridger or SFU source.
SrsFrameType frame_type; SrsFrameType frame_type;
// Fast cache for performance. // Fast cache for performance.