From 25c76c1e8a652ecc36614b846bb7f5a1c5373699 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 17 Dec 2020 18:43:45 +0800 Subject: [PATCH 1/2] Fix #1694, Support DVR 2GB+ MP4 file. 3.0.155 --- README.md | 2 + trunk/src/core/srs_core_version3.hpp | 2 +- trunk/src/kernel/srs_kernel_buffer.hpp | 15 ++---- trunk/src/kernel/srs_kernel_error.hpp | 1 + trunk/src/kernel/srs_kernel_mp4.cpp | 69 ++++++++++++++------------ trunk/src/kernel/srs_kernel_mp4.hpp | 13 +++-- trunk/src/utest/srs_utest_kernel.hpp | 2 +- 7 files changed, 53 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index 2ff0ebcb9..ad8b81df6 100755 --- a/README.md +++ b/README.md @@ -145,6 +145,7 @@ For previous versions, please read: ## V3 changes +* v3.0, 2020-12-17, Fix [#1694][bug #1694], Support DVR 2GB+ MP4 file. 3.0.155 * v3.0, 2020-12-17, Fix [#1548][bug #1548], Add edts in MP4 for Windows10. 3.0.154 * v3.0, 2020-10-31, [3.0 release2(3.0.153)][r3.0r2] released. 122663 lines. * v3.0, 2020-10-31, Fix [#509][bug #509], Always malloc stack on heap. 3.0.153 @@ -1709,6 +1710,7 @@ Winlin [bug #1780]: https://github.com/ossrs/srs/issues/1780 [bug #1987]: https://github.com/ossrs/srs/issues/1987 [bug #1548]: https://github.com/ossrs/srs/issues/1548 +[bug #1694]: https://github.com/ossrs/srs/issues/1694 [bug #yyyyyyyyyyyyy]: https://github.com/ossrs/srs/issues/yyyyyyyyyyyyy [exo #828]: https://github.com/google/ExoPlayer/pull/828 diff --git a/trunk/src/core/srs_core_version3.hpp b/trunk/src/core/srs_core_version3.hpp index 12949ebd1..a64066df2 100644 --- a/trunk/src/core/srs_core_version3.hpp +++ b/trunk/src/core/srs_core_version3.hpp @@ -24,6 +24,6 @@ #ifndef SRS_CORE_VERSION3_HPP #define SRS_CORE_VERSION3_HPP -#define SRS_VERSION3_REVISION 154 +#define SRS_VERSION3_REVISION 155 #endif diff --git a/trunk/src/kernel/srs_kernel_buffer.hpp b/trunk/src/kernel/srs_kernel_buffer.hpp index 3fdb7e74b..5dfe4c1ad 100644 --- a/trunk/src/kernel/srs_kernel_buffer.hpp +++ b/trunk/src/kernel/srs_kernel_buffer.hpp @@ -62,19 +62,12 @@ public: ISrsCodec(); virtual ~ISrsCodec(); public: - /** - * get the number of bytes to code to. - */ - // TODO: FIXME: change to uint64_t. - virtual int nb_bytes() = 0; - /** - * encode object to bytes in SrsBuffer. - */ + // Get the number of bytes to code to. + virtual uint64_t nb_bytes() = 0; + // Encode object to bytes in SrsBuffer. virtual srs_error_t encode(SrsBuffer* buf) = 0; public: - /** - * decode object from bytes in SrsBuffer. - */ + // Decode object from bytes in SrsBuffer. virtual srs_error_t decode(SrsBuffer* buf) = 0; }; diff --git a/trunk/src/kernel/srs_kernel_error.hpp b/trunk/src/kernel/srs_kernel_error.hpp index 558bde405..312419dac 100644 --- a/trunk/src/kernel/srs_kernel_error.hpp +++ b/trunk/src/kernel/srs_kernel_error.hpp @@ -287,6 +287,7 @@ #define ERROR_INOTIFY_CREATE 3092 #define ERROR_INOTIFY_OPENFD 3093 #define ERROR_INOTIFY_WATCH 3094 +#define ERROR_MP4_ILLEGAL_MDAT 3090 /////////////////////////////////////////////////////// // HTTP/StreamCaster protocol error. diff --git a/trunk/src/kernel/srs_kernel_mp4.cpp b/trunk/src/kernel/srs_kernel_mp4.cpp index 6602d6145..dbd271270 100644 --- a/trunk/src/kernel/srs_kernel_mp4.cpp +++ b/trunk/src/kernel/srs_kernel_mp4.cpp @@ -190,17 +190,18 @@ int SrsMp4Box::sz_header() return nb_header(); } -int SrsMp4Box::update_size() +uint64_t SrsMp4Box::update_size() { uint64_t size = nb_bytes(); if (size > 0xffffffff) { largesize = size; + smallsize = SRS_MP4_USE_LARGE_SIZE; } else { smallsize = (uint32_t)size; } - return (int)size; + return size; } int SrsMp4Box::left_space(SrsBuffer* buf) @@ -299,11 +300,11 @@ srs_error_t SrsMp4Box::discovery(SrsBuffer* buf, SrsMp4Box** ppbox) *ppbox = NULL; srs_error_t err = srs_success; - + if (!buf->require(8)) { return srs_error_new(ERROR_MP4_BOX_REQUIRE_SPACE, "requires 8 only %d bytes", buf->left()); } - + // Discovery the size and type. uint64_t largesize = 0; uint32_t smallsize = (uint32_t)buf->read_4bytes(); @@ -313,15 +314,14 @@ srs_error_t SrsMp4Box::discovery(SrsBuffer* buf, SrsMp4Box** ppbox) return srs_error_new(ERROR_MP4_BOX_REQUIRE_SPACE, "requires 16 only %d bytes", buf->left()); } largesize = (uint64_t)buf->read_8bytes(); - buf->skip(-8); } + + // Reset the buffer, because we only peek it. buf->skip(-8); - - // Only support 31bits size. - if (largesize > 0x7fffffff) { - return srs_error_new(ERROR_MP4_BOX_OVERFLOW, "overflow 31bits, largesize=%" PRId64, largesize); + if (smallsize == SRS_MP4_USE_LARGE_SIZE) { + buf->skip(-8); } - + SrsMp4Box* box = NULL; switch(type) { case SrsMp4BoxTypeFTYP: box = new SrsMp4FileTypeBox(); break; @@ -382,9 +382,9 @@ srs_error_t SrsMp4Box::discovery(SrsBuffer* buf, SrsMp4Box** ppbox) return err; } -int SrsMp4Box::nb_bytes() +uint64_t SrsMp4Box::nb_bytes() { - int sz = nb_header(); + uint64_t sz = nb_header(); vector::iterator it; for (it = boxes.begin(); it != boxes.end(); ++it) { @@ -488,21 +488,16 @@ srs_error_t SrsMp4Box::encode_header(SrsBuffer* buf) { srs_error_t err = srs_success; - // Only support 31bits size. - if (sz() > 0x7fffffff) { - return srs_error_new(ERROR_MP4_BOX_OVERFLOW, "box size overflow 31bits, size=%" PRId64, sz()); - } - int size = SrsMp4Box::nb_header(); if (!buf->require(size)) { return srs_error_new(ERROR_MP4_BOX_REQUIRE_SPACE, "requires %d only %d bytes", size, buf->left()); } buf->write_4bytes(smallsize); + buf->write_4bytes(type); if (smallsize == SRS_MP4_USE_LARGE_SIZE) { buf->write_8bytes(largesize); } - buf->write_4bytes(type); if (type == SrsMp4BoxTypeUUID) { buf->write_bytes(&usertype[0], 16); @@ -1071,7 +1066,7 @@ SrsMp4TrunEntry::~SrsMp4TrunEntry() { } -int SrsMp4TrunEntry::nb_bytes() +uint64_t SrsMp4TrunEntry::nb_bytes() { int size = 0; @@ -1291,7 +1286,7 @@ SrsMp4MediaDataBox::~SrsMp4MediaDataBox() { } -int SrsMp4MediaDataBox::nb_bytes() +uint64_t SrsMp4MediaDataBox::nb_bytes() { return SrsMp4Box::nb_header() + nb_data; } @@ -1315,7 +1310,7 @@ srs_error_t SrsMp4MediaDataBox::decode(SrsBuffer* buf) return srs_error_wrap(err, "decode box"); } - nb_data = (int)(sz() - nb_header()); + nb_data = sz() - (uint64_t)nb_header(); return err; } @@ -3270,7 +3265,7 @@ int SrsMp4BaseDescriptor::left_space(SrsBuffer* buf) return srs_max(0, left); } -int SrsMp4BaseDescriptor::nb_bytes() +uint64_t SrsMp4BaseDescriptor::nb_bytes() { // 1 byte tag. int size = 1; @@ -5962,16 +5957,15 @@ srs_error_t SrsMp4Encoder::flush() // Write mdat box. if (true) { - // Update the mdat box header. - if ((err = wsio->lseek(mdat_offset, SEEK_SET, NULL)) != srs_success) { - return srs_error_wrap(err, "seek to mdat"); - } - // Write mdat box with size of data, // its payload already writen by samples, // and we will update its header(size) when flush. SrsMp4MediaDataBox* mdat = new SrsMp4MediaDataBox(); SrsAutoFree(SrsMp4MediaDataBox, mdat); + + // Update the size of mdat first, for over 2GB file. + mdat->nb_data = mdat_bytes; + mdat->update_size(); int nb_data = mdat->sz_header(); uint8_t* data = new uint8_t[nb_data]; @@ -5979,12 +5973,25 @@ srs_error_t SrsMp4Encoder::flush() SrsBuffer* buffer = new SrsBuffer((char*)data, nb_data); SrsAutoFree(SrsBuffer, buffer); - - // TODO: FIXME: Support 64bits size. - mdat->nb_data = (int)mdat_bytes; + if ((err = mdat->encode(buffer)) != srs_success) { return srs_error_wrap(err, "encode mdat"); } + + // We might adjust the offset of mdat, for large size, 2GB+ as such. + if (nb_data > 8) { + // For large size, the header of mdat MUST be 16. + if (nb_data != 16) { + return srs_error_new(ERROR_MP4_ILLEGAL_MDAT, "Invalid mdat header size %d", nb_data); + } + // Use large size, to the start of reserved free box. + mdat_offset -= 8; + } + + // Seek to the start of mdat. + if ((err = wsio->lseek(mdat_offset, SEEK_SET, NULL)) != srs_success) { + return srs_error_wrap(err, "seek to mdat"); + } // TODO: FIXME: Ensure all bytes are writen. if ((err = wsio->write(data, nb_data, NULL)) != srs_success) { @@ -6447,7 +6454,7 @@ srs_error_t SrsMp4M2tsSegmentEncoder::flush(uint64_t& dts) // @remark Remember the data_offset of turn is size(moof)+header(mdat), not including styp or sidx. int moof_bytes = moof->nb_bytes(); trun->data_offset = (int32_t)(moof_bytes + mdat->sz_header()); - mdat->nb_data = (int)mdat_bytes; + mdat->nb_data = mdat_bytes; // Update the size of sidx. SrsMp4SegmentIndexEntry* entry = &sidx->entries[0]; diff --git a/trunk/src/kernel/srs_kernel_mp4.hpp b/trunk/src/kernel/srs_kernel_mp4.hpp index 00390102c..158bbbcb2 100644 --- a/trunk/src/kernel/srs_kernel_mp4.hpp +++ b/trunk/src/kernel/srs_kernel_mp4.hpp @@ -205,7 +205,7 @@ public: // @remark For mdat box, we must codec its header, use this instead of sz(). virtual int sz_header(); // Update the size of box. - virtual int update_size(); + virtual uint64_t update_size(); // Get the left space of box, for decoder. virtual int left_space(SrsBuffer* buf); // Box type helper. @@ -227,7 +227,7 @@ public: static srs_error_t discovery(SrsBuffer* buf, SrsMp4Box** ppbox); // Interface ISrsCodec public: - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer* buf); virtual srs_error_t decode(SrsBuffer* buf); protected: @@ -495,7 +495,7 @@ public: SrsMp4TrunEntry(SrsMp4FullBox* o); virtual ~SrsMp4TrunEntry(); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer* buf); virtual srs_error_t decode(SrsBuffer* buf); @@ -581,8 +581,7 @@ class SrsMp4MediaDataBox : public SrsMp4Box { public: // The contained media data, which we never directly read/write it. - // TODO: FIXME: Support 64bits size. - int nb_data; + uint64_t nb_data; public: SrsMp4MediaDataBox(); virtual ~SrsMp4MediaDataBox(); @@ -590,7 +589,7 @@ public: public: // The total size of bytes, including the sz_header() and nb_data, // which used to write the smallsize or largesize of mp4. - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); // To encode the mdat box, the buf should only contains the sz_header(), // because the mdata only encode the header. virtual srs_error_t encode(SrsBuffer* buf); @@ -1369,7 +1368,7 @@ public: virtual int left_space(SrsBuffer* buf); // Interface ISrsCodec public: - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer* buf); virtual srs_error_t decode(SrsBuffer* buf); protected: diff --git a/trunk/src/utest/srs_utest_kernel.hpp b/trunk/src/utest/srs_utest_kernel.hpp index 90efb4ee9..f32d1f063 100644 --- a/trunk/src/utest/srs_utest_kernel.hpp +++ b/trunk/src/utest/srs_utest_kernel.hpp @@ -130,7 +130,7 @@ public: MockSrsCodec(); virtual ~MockSrsCodec(); public: - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer* buf); virtual srs_error_t decode(SrsBuffer* buf); }; From 5ebf034aea0cd25cfbc206d0ba34d4f6d5034fa8 Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 18 Dec 2020 09:56:40 +0800 Subject: [PATCH 2/2] For #1694, Refine API for nb_bytes --- trunk/src/kernel/srs_kernel_buffer.hpp | 3 +-- trunk/src/kernel/srs_kernel_rtc_rtcp.cpp | 24 ++++++++++++------------ trunk/src/kernel/srs_kernel_rtc_rtcp.hpp | 24 ++++++++++++------------ trunk/src/kernel/srs_kernel_rtc_rtp.cpp | 18 +++++++++--------- trunk/src/kernel/srs_kernel_rtc_rtp.hpp | 18 +++++++++--------- trunk/src/utest/srs_utest_kernel.cpp | 2 +- 6 files changed, 44 insertions(+), 45 deletions(-) diff --git a/trunk/src/kernel/srs_kernel_buffer.hpp b/trunk/src/kernel/srs_kernel_buffer.hpp index 0b0d776a5..061ea8338 100644 --- a/trunk/src/kernel/srs_kernel_buffer.hpp +++ b/trunk/src/kernel/srs_kernel_buffer.hpp @@ -41,8 +41,7 @@ public: /** * get the number of bytes to code to. */ - // TODO: FIXME: change to uint64_t. - virtual int nb_bytes() = 0; + virtual uint64_t nb_bytes() = 0; /** * encode object to bytes in SrsBuffer. */ diff --git a/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp b/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp index feebb14fe..4e0f98eee 100644 --- a/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp +++ b/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp @@ -115,7 +115,7 @@ srs_error_t SrsRtcpCommon::decode(SrsBuffer *buffer) return err; } -int SrsRtcpCommon::nb_bytes() +uint64_t SrsRtcpCommon::nb_bytes() { return sizeof(SrsRtcpHeader) + 4 + payload_len_; } @@ -255,7 +255,7 @@ srs_error_t SrsRtcpApp::decode(SrsBuffer *buffer) return srs_success; } -int SrsRtcpApp::nb_bytes() +uint64_t SrsRtcpApp::nb_bytes() { return sizeof(SrsRtcpHeader) + sizeof(ssrc_) + sizeof(name_) + payload_len_; } @@ -422,7 +422,7 @@ block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ return err; } -int SrsRtcpSR::nb_bytes() +uint64_t SrsRtcpSR::nb_bytes() { return (header_.length + 1) * 4; } @@ -644,7 +644,7 @@ block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ return err; } -int SrsRtcpRR::nb_bytes() +uint64_t SrsRtcpRR::nb_bytes() { return (header_.length + 1) * 4; } @@ -863,7 +863,7 @@ srs_error_t SrsRtcpTWCC::decode(SrsBuffer *buffer) return err; } -int SrsRtcpTWCC::nb_bytes() +uint64_t SrsRtcpTWCC::nb_bytes() { return kRtcpPacketSize; } @@ -1271,7 +1271,7 @@ srs_error_t SrsRtcpNack::decode(SrsBuffer *buffer) return err; } -int SrsRtcpNack::nb_bytes() +uint64_t SrsRtcpNack::nb_bytes() { return kRtcpPacketSize; } @@ -1403,7 +1403,7 @@ srs_error_t SrsRtcpPsfbCommon::decode(SrsBuffer *buffer) return err; } -int SrsRtcpPsfbCommon::nb_bytes() +uint64_t SrsRtcpPsfbCommon::nb_bytes() { return kRtcpPacketSize; } @@ -1455,7 +1455,7 @@ srs_error_t SrsRtcpPli::decode(SrsBuffer *buffer) return err; } -int SrsRtcpPli::nb_bytes() +uint64_t SrsRtcpPli::nb_bytes() { return 12; } @@ -1548,7 +1548,7 @@ srs_error_t SrsRtcpSli::decode(SrsBuffer *buffer) return err; } -int SrsRtcpSli::nb_bytes() +uint64_t SrsRtcpSli::nb_bytes() { return kRtcpPacketSize; } @@ -1619,7 +1619,7 @@ srs_error_t SrsRtcpRpsi::decode(SrsBuffer *buffer) return err; } -int SrsRtcpRpsi::nb_bytes() +uint64_t SrsRtcpRpsi::nb_bytes() { return kRtcpPacketSize; } @@ -1672,7 +1672,7 @@ srs_error_t SrsRtcpXr::decode(SrsBuffer *buffer) return err; } -int SrsRtcpXr::nb_bytes() +uint64_t SrsRtcpXr::nb_bytes() { return kRtcpPacketSize; } @@ -1775,7 +1775,7 @@ srs_error_t SrsRtcpCompound::decode(SrsBuffer *buffer) return err; } -int SrsRtcpCompound::nb_bytes() +uint64_t SrsRtcpCompound::nb_bytes() { return kRtcpPacketSize; } diff --git a/trunk/src/kernel/srs_kernel_rtc_rtcp.hpp b/trunk/src/kernel/srs_kernel_rtc_rtcp.hpp index 588acb89a..56c30912a 100644 --- a/trunk/src/kernel/srs_kernel_rtc_rtcp.hpp +++ b/trunk/src/kernel/srs_kernel_rtc_rtcp.hpp @@ -103,7 +103,7 @@ public: // interface ISrsCodec public: virtual srs_error_t decode(SrsBuffer *buffer); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer *buffer); }; @@ -129,7 +129,7 @@ public: // interface ISrsCodec public: virtual srs_error_t decode(SrsBuffer *buffer); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer *buffer); }; @@ -181,7 +181,7 @@ public: // interface ISrsCodec public: virtual srs_error_t decode(SrsBuffer *buffer); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer *buffer); }; @@ -215,7 +215,7 @@ public: // interface ISrsCodec public: virtual srs_error_t decode(SrsBuffer *buffer); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer *buffer); }; @@ -322,7 +322,7 @@ public: // interface ISrsCodec public: virtual srs_error_t decode(SrsBuffer *buffer); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer *buffer); private: srs_error_t do_encode(SrsBuffer *buffer); @@ -351,7 +351,7 @@ public: // interface ISrsCodec public: virtual srs_error_t decode(SrsBuffer *buffer); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer *buffer); }; @@ -369,7 +369,7 @@ public: // interface ISrsCodec public: virtual srs_error_t decode(SrsBuffer *buffer); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer *buffer); }; @@ -382,7 +382,7 @@ public: // interface ISrsCodec public: virtual srs_error_t decode(SrsBuffer *buffer); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer *buffer); }; @@ -399,7 +399,7 @@ public: // interface ISrsCodec public: virtual srs_error_t decode(SrsBuffer *buffer); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer *buffer); }; @@ -418,7 +418,7 @@ public: // interface ISrsCodec public: virtual srs_error_t decode(SrsBuffer *buffer); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer *buffer); }; @@ -431,7 +431,7 @@ public: // interface ISrsCodec public: virtual srs_error_t decode(SrsBuffer *buffer); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer *buffer); }; @@ -457,7 +457,7 @@ public: // interface ISrsCodec public: virtual srs_error_t decode(SrsBuffer *buffer); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer *buffer); }; diff --git a/trunk/src/kernel/srs_kernel_rtc_rtp.cpp b/trunk/src/kernel/srs_kernel_rtc_rtp.cpp index aaecd8d0c..d07f18097 100644 --- a/trunk/src/kernel/srs_kernel_rtc_rtp.cpp +++ b/trunk/src/kernel/srs_kernel_rtc_rtp.cpp @@ -136,7 +136,7 @@ srs_error_t SrsRtpExtensionTwcc::decode(SrsBuffer* buf) return err; } -int SrsRtpExtensionTwcc::nb_bytes() +uint64_t SrsRtpExtensionTwcc::nb_bytes() { return 3; } @@ -260,7 +260,7 @@ srs_error_t SrsRtpExtensions::decode_0xbede(SrsBuffer* buf) return err; } -int SrsRtpExtensions::nb_bytes() +uint64_t SrsRtpExtensions::nb_bytes() { int size = 4 + (twcc_.has_twcc_ext() ? twcc_.nb_bytes() : 0); // add padding @@ -488,7 +488,7 @@ srs_error_t SrsRtpHeader::set_twcc_sequence_number(uint8_t id, uint16_t sn) return extensions_.set_twcc_sequence_number(id, sn); } -int SrsRtpHeader::nb_bytes() +uint64_t SrsRtpHeader::nb_bytes() { return kRtpHeaderFixedSize + cc * 4 + (extensions_.exists() ? extensions_.nb_bytes() : 0); } @@ -634,7 +634,7 @@ void SrsRtpPacket2::set_extension_types(const SrsRtpExtensionTypes* v) return header.set_extensions(v); } -int SrsRtpPacket2::nb_bytes() +uint64_t SrsRtpPacket2::nb_bytes() { if (!cached_payload_size) { int nn_payload = (payload? payload->nb_bytes():0); @@ -714,7 +714,7 @@ SrsRtpRawPayload::~SrsRtpRawPayload() { } -int SrsRtpRawPayload::nb_bytes() +uint64_t SrsRtpRawPayload::nb_bytes() { return nn_payload; } @@ -833,7 +833,7 @@ srs_error_t SrsRtpRawNALUs::read_samples(vector& samples, int packet return srs_success; } -int SrsRtpRawNALUs::nb_bytes() +uint64_t SrsRtpRawNALUs::nb_bytes() { int size = 0; @@ -944,7 +944,7 @@ SrsSample* SrsRtpSTAPPayload::get_pps() return NULL; } -int SrsRtpSTAPPayload::nb_bytes() +uint64_t SrsRtpSTAPPayload::nb_bytes() { int size = 1; @@ -1048,7 +1048,7 @@ SrsRtpFUAPayload::~SrsRtpFUAPayload() } } -int SrsRtpFUAPayload::nb_bytes() +uint64_t SrsRtpFUAPayload::nb_bytes() { int size = 2; @@ -1158,7 +1158,7 @@ SrsRtpFUAPayload2::~SrsRtpFUAPayload2() { } -int SrsRtpFUAPayload2::nb_bytes() +uint64_t SrsRtpFUAPayload2::nb_bytes() { return 2 + size; } diff --git a/trunk/src/kernel/srs_kernel_rtc_rtp.hpp b/trunk/src/kernel/srs_kernel_rtc_rtp.hpp index 8ba2fcc7f..76a39fbc5 100644 --- a/trunk/src/kernel/srs_kernel_rtc_rtp.hpp +++ b/trunk/src/kernel/srs_kernel_rtc_rtp.hpp @@ -135,7 +135,7 @@ public: // ISrsCodec virtual srs_error_t decode(SrsBuffer* buf); virtual srs_error_t encode(SrsBuffer* buf); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); }; class SrsRtpExtensions : public ISrsCodec @@ -160,7 +160,7 @@ private: srs_error_t decode_0xbede(SrsBuffer* buf); public: virtual srs_error_t encode(SrsBuffer* buf); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); }; class SrsRtpHeader : public ISrsCodec @@ -185,7 +185,7 @@ private: srs_error_t parse_extensions(SrsBuffer* buf); public: virtual srs_error_t encode(SrsBuffer* buf); - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); public: void set_marker(bool v); bool get_marker() const; @@ -262,7 +262,7 @@ public: void set_extension_types(const SrsRtpExtensionTypes* v); // interface ISrsEncoder public: - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer* buf); virtual srs_error_t decode(SrsBuffer* buf); }; @@ -280,7 +280,7 @@ public: virtual ~SrsRtpRawPayload(); // interface ISrsRtpPayloader public: - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer* buf); virtual srs_error_t decode(SrsBuffer* buf); virtual ISrsRtpPayloader* copy(); @@ -305,7 +305,7 @@ public: srs_error_t read_samples(std::vector& samples, int packet_size); // interface ISrsRtpPayloader public: - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer* buf); virtual srs_error_t decode(SrsBuffer* buf); virtual ISrsRtpPayloader* copy(); @@ -328,7 +328,7 @@ public: SrsSample* get_pps(); // interface ISrsRtpPayloader public: - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer* buf); virtual srs_error_t decode(SrsBuffer* buf); virtual ISrsRtpPayloader* copy(); @@ -353,7 +353,7 @@ public: virtual ~SrsRtpFUAPayload(); // interface ISrsRtpPayloader public: - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer* buf); virtual srs_error_t decode(SrsBuffer* buf); virtual ISrsRtpPayloader* copy(); @@ -378,7 +378,7 @@ public: virtual ~SrsRtpFUAPayload2(); // interface ISrsRtpPayloader public: - virtual int nb_bytes(); + virtual uint64_t nb_bytes(); virtual srs_error_t encode(SrsBuffer* buf); virtual srs_error_t decode(SrsBuffer* buf); virtual ISrsRtpPayloader* copy(); diff --git a/trunk/src/utest/srs_utest_kernel.cpp b/trunk/src/utest/srs_utest_kernel.cpp index 13caea980..9c69f5b70 100644 --- a/trunk/src/utest/srs_utest_kernel.cpp +++ b/trunk/src/utest/srs_utest_kernel.cpp @@ -361,7 +361,7 @@ MockSrsCodec::~MockSrsCodec() { } -int MockSrsCodec::nb_bytes() +uint64_t MockSrsCodec::nb_bytes() { return 0; }