diff --git a/trunk/src/kernel/srs_kernel_flv.cpp b/trunk/src/kernel/srs_kernel_flv.cpp index f24dc2047..411b42596 100644 --- a/trunk/src/kernel/srs_kernel_flv.cpp +++ b/trunk/src/kernel/srs_kernel_flv.cpp @@ -194,8 +194,11 @@ srs_error_t SrsCommonMessage::create(SrsMessageHeader* pheader, char* body, int return srs_success; } -SrsSharedMessageHeader::SrsSharedMessageHeader() : payload_length(0), message_type(0), perfer_cid(0) +SrsSharedMessageHeader::SrsSharedMessageHeader() { + payload_length = 0; + message_type = 0; + perfer_cid = 0; } SrsSharedMessageHeader::~SrsSharedMessageHeader() @@ -207,6 +210,12 @@ SrsSharedPtrMessage::SrsSharedPtrPayload::SrsSharedPtrPayload() payload = NULL; size = 0; shared_count = 0; + + samples = NULL; + nb_samples = 0; + + extra_payload = NULL; + extra_size = 0; } SrsSharedPtrMessage::SrsSharedPtrPayload::~SrsSharedPtrPayload() @@ -215,6 +224,8 @@ SrsSharedPtrMessage::SrsSharedPtrPayload::~SrsSharedPtrPayload() srs_memory_unwatch(payload); #endif srs_freepa(payload); + srs_freepa(samples); + srs_freepa(extra_payload); } SrsSharedPtrMessage::SrsSharedPtrMessage() : timestamp(0), stream_id(0), size(0), payload(NULL) diff --git a/trunk/src/kernel/srs_kernel_flv.hpp b/trunk/src/kernel/srs_kernel_flv.hpp index 23fa0baf0..397439b7c 100644 --- a/trunk/src/kernel/srs_kernel_flv.hpp +++ b/trunk/src/kernel/srs_kernel_flv.hpp @@ -40,6 +40,7 @@ class ISrsReader; class SrsFileReader; class SrsPacket; class SrsRtpSharedPacket; +class SrsSample; #define SRS_FLV_TAG_HEADER_SIZE 11 #define SRS_FLV_PREVIOUS_TAG_SIZE 4 @@ -287,7 +288,6 @@ public: // @remark, not all message payload can be decoded to packet. for example, // video/audio packet use raw bytes, no video/audio packet. char* payload; - #ifdef SRS_AUTO_RTC std::vector rtp_packets; #endif @@ -305,6 +305,15 @@ private: int size; // The reference count int shared_count; + public: + // For RTC video, we need to know the NALU structures, + // because the RTP STAP-A or FU-A based on NALU. + SrsSample* samples; + int nb_samples; + // For RTC audio, we may need to transcode AAC to opus, + // so there must be an extra payload, which is transformed from payload. + char* extra_payload; + int extra_size; public: SrsSharedPtrPayload(); virtual ~SrsSharedPtrPayload();