mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Merge SRS4
This commit is contained in:
commit
90b61ad952
12 changed files with 106 additions and 95 deletions
|
@ -208,6 +208,7 @@ For previous versions, please read:
|
||||||
|
|
||||||
## V3 changes
|
## 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-12-17, Fix [#1548][bug #1548], Add edts in MP4 for Windows10. 3.0.154
|
||||||
* <strong>v3.0, 2020-10-31, [3.0 release2(3.0.153)][r3.0r2] released. 122663 lines.</strong>
|
* <strong>v3.0, 2020-10-31, [3.0 release2(3.0.153)][r3.0r2] released. 122663 lines.</strong>
|
||||||
* v3.0, 2020-10-31, Fix [#509][bug #509], Always malloc stack on heap. 3.0.153
|
* v3.0, 2020-10-31, Fix [#509][bug #509], Always malloc stack on heap. 3.0.153
|
||||||
|
@ -1784,6 +1785,7 @@ Winlin
|
||||||
[bug #1780]: https://github.com/ossrs/srs/issues/1780
|
[bug #1780]: https://github.com/ossrs/srs/issues/1780
|
||||||
[bug #1987]: https://github.com/ossrs/srs/issues/1987
|
[bug #1987]: https://github.com/ossrs/srs/issues/1987
|
||||||
[bug #1548]: https://github.com/ossrs/srs/issues/1548
|
[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
|
[bug #yyyyyyyyyyyyy]: https://github.com/ossrs/srs/issues/yyyyyyyyyyyyy
|
||||||
|
|
||||||
[bug #1631]: https://github.com/ossrs/srs/issues/1631
|
[bug #1631]: https://github.com/ossrs/srs/issues/1631
|
||||||
|
|
|
@ -24,6 +24,6 @@
|
||||||
#ifndef SRS_CORE_VERSION3_HPP
|
#ifndef SRS_CORE_VERSION3_HPP
|
||||||
#define SRS_CORE_VERSION3_HPP
|
#define SRS_CORE_VERSION3_HPP
|
||||||
|
|
||||||
#define SRS_VERSION3_REVISION 154
|
#define SRS_VERSION3_REVISION 155
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -41,8 +41,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* get the number of bytes to code to.
|
* get the number of bytes to code to.
|
||||||
*/
|
*/
|
||||||
// TODO: FIXME: change to uint64_t.
|
virtual uint64_t nb_bytes() = 0;
|
||||||
virtual int nb_bytes() = 0;
|
|
||||||
/**
|
/**
|
||||||
* encode object to bytes in SrsBuffer.
|
* encode object to bytes in SrsBuffer.
|
||||||
*/
|
*/
|
||||||
|
@ -80,9 +79,12 @@ public:
|
||||||
ISrsCodec();
|
ISrsCodec();
|
||||||
virtual ~ISrsCodec();
|
virtual ~ISrsCodec();
|
||||||
public:
|
public:
|
||||||
/**
|
// Get the number of bytes to code to.
|
||||||
* decode object from bytes in SrsBuffer.
|
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.
|
||||||
virtual srs_error_t decode(SrsBuffer* buf) = 0;
|
virtual srs_error_t decode(SrsBuffer* buf) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -282,12 +282,13 @@
|
||||||
#define ERROR_DASH_WRITE_FAILED 3087
|
#define ERROR_DASH_WRITE_FAILED 3087
|
||||||
#define ERROR_TS_CONTEXT_NOT_READY 3088
|
#define ERROR_TS_CONTEXT_NOT_READY 3088
|
||||||
#define ERROR_MP4_ILLEGAL_MOOF 3089
|
#define ERROR_MP4_ILLEGAL_MOOF 3089
|
||||||
#define ERROR_OCLUSTER_DISCOVER 3090
|
#define ERROR_MP4_ILLEGAL_MDAT 3090
|
||||||
#define ERROR_OCLUSTER_REDIRECT 3091
|
#define ERROR_OCLUSTER_DISCOVER 3091
|
||||||
#define ERROR_INOTIFY_CREATE 3092
|
#define ERROR_OCLUSTER_REDIRECT 3092
|
||||||
#define ERROR_INOTIFY_OPENFD 3093
|
#define ERROR_INOTIFY_CREATE 3093
|
||||||
#define ERROR_INOTIFY_WATCH 3094
|
#define ERROR_INOTIFY_OPENFD 3094
|
||||||
#define ERROR_HTTP_URL_UNESCAPE 3095
|
#define ERROR_INOTIFY_WATCH 3095
|
||||||
|
#define ERROR_HTTP_URL_UNESCAPE 3096
|
||||||
|
|
||||||
///////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////
|
||||||
// HTTP/StreamCaster protocol error.
|
// HTTP/StreamCaster protocol error.
|
||||||
|
|
|
@ -190,17 +190,18 @@ int SrsMp4Box::sz_header()
|
||||||
return nb_header();
|
return nb_header();
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsMp4Box::update_size()
|
uint64_t SrsMp4Box::update_size()
|
||||||
{
|
{
|
||||||
uint64_t size = nb_bytes();
|
uint64_t size = nb_bytes();
|
||||||
|
|
||||||
if (size > 0xffffffff) {
|
if (size > 0xffffffff) {
|
||||||
largesize = size;
|
largesize = size;
|
||||||
|
smallsize = SRS_MP4_USE_LARGE_SIZE;
|
||||||
} else {
|
} else {
|
||||||
smallsize = (uint32_t)size;
|
smallsize = (uint32_t)size;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (int)size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsMp4Box::left_space(SrsBuffer* buf)
|
int SrsMp4Box::left_space(SrsBuffer* buf)
|
||||||
|
@ -299,11 +300,11 @@ srs_error_t SrsMp4Box::discovery(SrsBuffer* buf, SrsMp4Box** ppbox)
|
||||||
*ppbox = NULL;
|
*ppbox = NULL;
|
||||||
|
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
|
||||||
if (!buf->require(8)) {
|
if (!buf->require(8)) {
|
||||||
return srs_error_new(ERROR_MP4_BOX_REQUIRE_SPACE, "requires 8 only %d bytes", buf->left());
|
return srs_error_new(ERROR_MP4_BOX_REQUIRE_SPACE, "requires 8 only %d bytes", buf->left());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Discovery the size and type.
|
// Discovery the size and type.
|
||||||
uint64_t largesize = 0;
|
uint64_t largesize = 0;
|
||||||
uint32_t smallsize = (uint32_t)buf->read_4bytes();
|
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());
|
return srs_error_new(ERROR_MP4_BOX_REQUIRE_SPACE, "requires 16 only %d bytes", buf->left());
|
||||||
}
|
}
|
||||||
largesize = (uint64_t)buf->read_8bytes();
|
largesize = (uint64_t)buf->read_8bytes();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset the buffer, because we only peek it.
|
||||||
|
buf->skip(-8);
|
||||||
|
if (smallsize == SRS_MP4_USE_LARGE_SIZE) {
|
||||||
buf->skip(-8);
|
buf->skip(-8);
|
||||||
}
|
}
|
||||||
buf->skip(-8);
|
|
||||||
|
|
||||||
// Only support 31bits size.
|
|
||||||
if (largesize > 0x7fffffff) {
|
|
||||||
return srs_error_new(ERROR_MP4_BOX_OVERFLOW, "overflow 31bits, largesize=%" PRId64, largesize);
|
|
||||||
}
|
|
||||||
|
|
||||||
SrsMp4Box* box = NULL;
|
SrsMp4Box* box = NULL;
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case SrsMp4BoxTypeFTYP: box = new SrsMp4FileTypeBox(); break;
|
case SrsMp4BoxTypeFTYP: box = new SrsMp4FileTypeBox(); break;
|
||||||
|
@ -382,9 +382,9 @@ srs_error_t SrsMp4Box::discovery(SrsBuffer* buf, SrsMp4Box** ppbox)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsMp4Box::nb_bytes()
|
uint64_t SrsMp4Box::nb_bytes()
|
||||||
{
|
{
|
||||||
int sz = nb_header();
|
uint64_t sz = nb_header();
|
||||||
|
|
||||||
vector<SrsMp4Box*>::iterator it;
|
vector<SrsMp4Box*>::iterator it;
|
||||||
for (it = boxes.begin(); it != boxes.end(); ++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;
|
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();
|
int size = SrsMp4Box::nb_header();
|
||||||
if (!buf->require(size)) {
|
if (!buf->require(size)) {
|
||||||
return srs_error_new(ERROR_MP4_BOX_REQUIRE_SPACE, "requires %d only %d bytes", size, buf->left());
|
return srs_error_new(ERROR_MP4_BOX_REQUIRE_SPACE, "requires %d only %d bytes", size, buf->left());
|
||||||
}
|
}
|
||||||
|
|
||||||
buf->write_4bytes(smallsize);
|
buf->write_4bytes(smallsize);
|
||||||
|
buf->write_4bytes(type);
|
||||||
if (smallsize == SRS_MP4_USE_LARGE_SIZE) {
|
if (smallsize == SRS_MP4_USE_LARGE_SIZE) {
|
||||||
buf->write_8bytes(largesize);
|
buf->write_8bytes(largesize);
|
||||||
}
|
}
|
||||||
buf->write_4bytes(type);
|
|
||||||
|
|
||||||
if (type == SrsMp4BoxTypeUUID) {
|
if (type == SrsMp4BoxTypeUUID) {
|
||||||
buf->write_bytes(&usertype[0], 16);
|
buf->write_bytes(&usertype[0], 16);
|
||||||
|
@ -1071,7 +1066,7 @@ SrsMp4TrunEntry::~SrsMp4TrunEntry()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsMp4TrunEntry::nb_bytes()
|
uint64_t SrsMp4TrunEntry::nb_bytes()
|
||||||
{
|
{
|
||||||
int size = 0;
|
int size = 0;
|
||||||
|
|
||||||
|
@ -1291,7 +1286,7 @@ SrsMp4MediaDataBox::~SrsMp4MediaDataBox()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsMp4MediaDataBox::nb_bytes()
|
uint64_t SrsMp4MediaDataBox::nb_bytes()
|
||||||
{
|
{
|
||||||
return SrsMp4Box::nb_header() + nb_data;
|
return SrsMp4Box::nb_header() + nb_data;
|
||||||
}
|
}
|
||||||
|
@ -1315,7 +1310,7 @@ srs_error_t SrsMp4MediaDataBox::decode(SrsBuffer* buf)
|
||||||
return srs_error_wrap(err, "decode box");
|
return srs_error_wrap(err, "decode box");
|
||||||
}
|
}
|
||||||
|
|
||||||
nb_data = (int)(sz() - nb_header());
|
nb_data = sz() - (uint64_t)nb_header();
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -3270,7 +3265,7 @@ int SrsMp4BaseDescriptor::left_space(SrsBuffer* buf)
|
||||||
return srs_max(0, left);
|
return srs_max(0, left);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsMp4BaseDescriptor::nb_bytes()
|
uint64_t SrsMp4BaseDescriptor::nb_bytes()
|
||||||
{
|
{
|
||||||
// 1 byte tag.
|
// 1 byte tag.
|
||||||
int size = 1;
|
int size = 1;
|
||||||
|
@ -5964,16 +5959,15 @@ srs_error_t SrsMp4Encoder::flush()
|
||||||
|
|
||||||
// Write mdat box.
|
// Write mdat box.
|
||||||
if (true) {
|
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,
|
// Write mdat box with size of data,
|
||||||
// its payload already writen by samples,
|
// its payload already writen by samples,
|
||||||
// and we will update its header(size) when flush.
|
// and we will update its header(size) when flush.
|
||||||
SrsMp4MediaDataBox* mdat = new SrsMp4MediaDataBox();
|
SrsMp4MediaDataBox* mdat = new SrsMp4MediaDataBox();
|
||||||
SrsAutoFree(SrsMp4MediaDataBox, mdat);
|
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();
|
int nb_data = mdat->sz_header();
|
||||||
uint8_t* data = new uint8_t[nb_data];
|
uint8_t* data = new uint8_t[nb_data];
|
||||||
|
@ -5981,12 +5975,25 @@ srs_error_t SrsMp4Encoder::flush()
|
||||||
|
|
||||||
SrsBuffer* buffer = new SrsBuffer((char*)data, nb_data);
|
SrsBuffer* buffer = new SrsBuffer((char*)data, nb_data);
|
||||||
SrsAutoFree(SrsBuffer, buffer);
|
SrsAutoFree(SrsBuffer, buffer);
|
||||||
|
|
||||||
// TODO: FIXME: Support 64bits size.
|
|
||||||
mdat->nb_data = (int)mdat_bytes;
|
|
||||||
if ((err = mdat->encode(buffer)) != srs_success) {
|
if ((err = mdat->encode(buffer)) != srs_success) {
|
||||||
return srs_error_wrap(err, "encode mdat");
|
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.
|
// TODO: FIXME: Ensure all bytes are writen.
|
||||||
if ((err = wsio->write(data, nb_data, NULL)) != srs_success) {
|
if ((err = wsio->write(data, nb_data, NULL)) != srs_success) {
|
||||||
|
@ -6448,7 +6455,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.
|
// @remark Remember the data_offset of turn is size(moof)+header(mdat), not including styp or sidx.
|
||||||
int moof_bytes = moof->nb_bytes();
|
int moof_bytes = moof->nb_bytes();
|
||||||
trun->data_offset = (int32_t)(moof_bytes + mdat->sz_header());
|
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.
|
// Update the size of sidx.
|
||||||
SrsMp4SegmentIndexEntry* entry = &sidx->entries[0];
|
SrsMp4SegmentIndexEntry* entry = &sidx->entries[0];
|
||||||
|
|
|
@ -205,7 +205,7 @@ public:
|
||||||
// @remark For mdat box, we must codec its header, use this instead of sz().
|
// @remark For mdat box, we must codec its header, use this instead of sz().
|
||||||
virtual int sz_header();
|
virtual int sz_header();
|
||||||
// Update the size of box.
|
// Update the size of box.
|
||||||
virtual int update_size();
|
virtual uint64_t update_size();
|
||||||
// Get the left space of box, for decoder.
|
// Get the left space of box, for decoder.
|
||||||
virtual int left_space(SrsBuffer* buf);
|
virtual int left_space(SrsBuffer* buf);
|
||||||
// Box type helper.
|
// Box type helper.
|
||||||
|
@ -227,7 +227,7 @@ public:
|
||||||
static srs_error_t discovery(SrsBuffer* buf, SrsMp4Box** ppbox);
|
static srs_error_t discovery(SrsBuffer* buf, SrsMp4Box** ppbox);
|
||||||
// Interface ISrsCodec
|
// Interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual srs_error_t decode(SrsBuffer* buf);
|
virtual srs_error_t decode(SrsBuffer* buf);
|
||||||
protected:
|
protected:
|
||||||
|
@ -495,7 +495,7 @@ public:
|
||||||
SrsMp4TrunEntry(SrsMp4FullBox* o);
|
SrsMp4TrunEntry(SrsMp4FullBox* o);
|
||||||
virtual ~SrsMp4TrunEntry();
|
virtual ~SrsMp4TrunEntry();
|
||||||
|
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual srs_error_t decode(SrsBuffer* buf);
|
virtual srs_error_t decode(SrsBuffer* buf);
|
||||||
|
|
||||||
|
@ -581,8 +581,7 @@ class SrsMp4MediaDataBox : public SrsMp4Box
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// The contained media data, which we never directly read/write it.
|
// The contained media data, which we never directly read/write it.
|
||||||
// TODO: FIXME: Support 64bits size.
|
uint64_t nb_data;
|
||||||
int nb_data;
|
|
||||||
public:
|
public:
|
||||||
SrsMp4MediaDataBox();
|
SrsMp4MediaDataBox();
|
||||||
virtual ~SrsMp4MediaDataBox();
|
virtual ~SrsMp4MediaDataBox();
|
||||||
|
@ -590,7 +589,7 @@ public:
|
||||||
public:
|
public:
|
||||||
// The total size of bytes, including the sz_header() and nb_data,
|
// The total size of bytes, including the sz_header() and nb_data,
|
||||||
// which used to write the smallsize or largesize of mp4.
|
// 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(),
|
// To encode the mdat box, the buf should only contains the sz_header(),
|
||||||
// because the mdata only encode the header.
|
// because the mdata only encode the header.
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
|
@ -1369,7 +1368,7 @@ public:
|
||||||
virtual int left_space(SrsBuffer* buf);
|
virtual int left_space(SrsBuffer* buf);
|
||||||
// Interface ISrsCodec
|
// Interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual srs_error_t decode(SrsBuffer* buf);
|
virtual srs_error_t decode(SrsBuffer* buf);
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -115,7 +115,7 @@ srs_error_t SrsRtcpCommon::decode(SrsBuffer *buffer)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtcpCommon::nb_bytes()
|
uint64_t SrsRtcpCommon::nb_bytes()
|
||||||
{
|
{
|
||||||
return sizeof(SrsRtcpHeader) + 4 + payload_len_;
|
return sizeof(SrsRtcpHeader) + 4 + payload_len_;
|
||||||
}
|
}
|
||||||
|
@ -255,7 +255,7 @@ srs_error_t SrsRtcpApp::decode(SrsBuffer *buffer)
|
||||||
return srs_success;
|
return srs_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtcpApp::nb_bytes()
|
uint64_t SrsRtcpApp::nb_bytes()
|
||||||
{
|
{
|
||||||
return sizeof(SrsRtcpHeader) + sizeof(ssrc_) + sizeof(name_) + payload_len_;
|
return sizeof(SrsRtcpHeader) + sizeof(ssrc_) + sizeof(name_) + payload_len_;
|
||||||
}
|
}
|
||||||
|
@ -422,7 +422,7 @@ block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtcpSR::nb_bytes()
|
uint64_t SrsRtcpSR::nb_bytes()
|
||||||
{
|
{
|
||||||
return (header_.length + 1) * 4;
|
return (header_.length + 1) * 4;
|
||||||
}
|
}
|
||||||
|
@ -644,7 +644,7 @@ block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtcpRR::nb_bytes()
|
uint64_t SrsRtcpRR::nb_bytes()
|
||||||
{
|
{
|
||||||
return (header_.length + 1) * 4;
|
return (header_.length + 1) * 4;
|
||||||
}
|
}
|
||||||
|
@ -863,7 +863,7 @@ srs_error_t SrsRtcpTWCC::decode(SrsBuffer *buffer)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtcpTWCC::nb_bytes()
|
uint64_t SrsRtcpTWCC::nb_bytes()
|
||||||
{
|
{
|
||||||
return kRtcpPacketSize;
|
return kRtcpPacketSize;
|
||||||
}
|
}
|
||||||
|
@ -1271,7 +1271,7 @@ srs_error_t SrsRtcpNack::decode(SrsBuffer *buffer)
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
int SrsRtcpNack::nb_bytes()
|
uint64_t SrsRtcpNack::nb_bytes()
|
||||||
{
|
{
|
||||||
return kRtcpPacketSize;
|
return kRtcpPacketSize;
|
||||||
}
|
}
|
||||||
|
@ -1403,7 +1403,7 @@ srs_error_t SrsRtcpPsfbCommon::decode(SrsBuffer *buffer)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtcpPsfbCommon::nb_bytes()
|
uint64_t SrsRtcpPsfbCommon::nb_bytes()
|
||||||
{
|
{
|
||||||
return kRtcpPacketSize;
|
return kRtcpPacketSize;
|
||||||
}
|
}
|
||||||
|
@ -1455,7 +1455,7 @@ srs_error_t SrsRtcpPli::decode(SrsBuffer *buffer)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtcpPli::nb_bytes()
|
uint64_t SrsRtcpPli::nb_bytes()
|
||||||
{
|
{
|
||||||
return 12;
|
return 12;
|
||||||
}
|
}
|
||||||
|
@ -1548,7 +1548,7 @@ srs_error_t SrsRtcpSli::decode(SrsBuffer *buffer)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtcpSli::nb_bytes()
|
uint64_t SrsRtcpSli::nb_bytes()
|
||||||
{
|
{
|
||||||
return kRtcpPacketSize;
|
return kRtcpPacketSize;
|
||||||
}
|
}
|
||||||
|
@ -1619,7 +1619,7 @@ srs_error_t SrsRtcpRpsi::decode(SrsBuffer *buffer)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtcpRpsi::nb_bytes()
|
uint64_t SrsRtcpRpsi::nb_bytes()
|
||||||
{
|
{
|
||||||
return kRtcpPacketSize;
|
return kRtcpPacketSize;
|
||||||
}
|
}
|
||||||
|
@ -1672,7 +1672,7 @@ srs_error_t SrsRtcpXr::decode(SrsBuffer *buffer)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtcpXr::nb_bytes()
|
uint64_t SrsRtcpXr::nb_bytes()
|
||||||
{
|
{
|
||||||
return kRtcpPacketSize;
|
return kRtcpPacketSize;
|
||||||
}
|
}
|
||||||
|
@ -1775,7 +1775,7 @@ srs_error_t SrsRtcpCompound::decode(SrsBuffer *buffer)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtcpCompound::nb_bytes()
|
uint64_t SrsRtcpCompound::nb_bytes()
|
||||||
{
|
{
|
||||||
return kRtcpPacketSize;
|
return kRtcpPacketSize;
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,7 +103,7 @@ public:
|
||||||
// interface ISrsCodec
|
// interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t decode(SrsBuffer *buffer);
|
virtual srs_error_t decode(SrsBuffer *buffer);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer *buffer);
|
virtual srs_error_t encode(SrsBuffer *buffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ public:
|
||||||
// interface ISrsCodec
|
// interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t decode(SrsBuffer *buffer);
|
virtual srs_error_t decode(SrsBuffer *buffer);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer *buffer);
|
virtual srs_error_t encode(SrsBuffer *buffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ public:
|
||||||
// interface ISrsCodec
|
// interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t decode(SrsBuffer *buffer);
|
virtual srs_error_t decode(SrsBuffer *buffer);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer *buffer);
|
virtual srs_error_t encode(SrsBuffer *buffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -215,7 +215,7 @@ public:
|
||||||
// interface ISrsCodec
|
// interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t decode(SrsBuffer *buffer);
|
virtual srs_error_t decode(SrsBuffer *buffer);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer *buffer);
|
virtual srs_error_t encode(SrsBuffer *buffer);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -322,7 +322,7 @@ public:
|
||||||
// interface ISrsCodec
|
// interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t decode(SrsBuffer *buffer);
|
virtual srs_error_t decode(SrsBuffer *buffer);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer *buffer);
|
virtual srs_error_t encode(SrsBuffer *buffer);
|
||||||
private:
|
private:
|
||||||
srs_error_t do_encode(SrsBuffer *buffer);
|
srs_error_t do_encode(SrsBuffer *buffer);
|
||||||
|
@ -351,7 +351,7 @@ public:
|
||||||
// interface ISrsCodec
|
// interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t decode(SrsBuffer *buffer);
|
virtual srs_error_t decode(SrsBuffer *buffer);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer *buffer);
|
virtual srs_error_t encode(SrsBuffer *buffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -369,7 +369,7 @@ public:
|
||||||
// interface ISrsCodec
|
// interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t decode(SrsBuffer *buffer);
|
virtual srs_error_t decode(SrsBuffer *buffer);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer *buffer);
|
virtual srs_error_t encode(SrsBuffer *buffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -382,7 +382,7 @@ public:
|
||||||
// interface ISrsCodec
|
// interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t decode(SrsBuffer *buffer);
|
virtual srs_error_t decode(SrsBuffer *buffer);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer *buffer);
|
virtual srs_error_t encode(SrsBuffer *buffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -399,7 +399,7 @@ public:
|
||||||
// interface ISrsCodec
|
// interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t decode(SrsBuffer *buffer);
|
virtual srs_error_t decode(SrsBuffer *buffer);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer *buffer);
|
virtual srs_error_t encode(SrsBuffer *buffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -418,7 +418,7 @@ public:
|
||||||
// interface ISrsCodec
|
// interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t decode(SrsBuffer *buffer);
|
virtual srs_error_t decode(SrsBuffer *buffer);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer *buffer);
|
virtual srs_error_t encode(SrsBuffer *buffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -431,7 +431,7 @@ public:
|
||||||
// interface ISrsCodec
|
// interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t decode(SrsBuffer *buffer);
|
virtual srs_error_t decode(SrsBuffer *buffer);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer *buffer);
|
virtual srs_error_t encode(SrsBuffer *buffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -457,7 +457,7 @@ public:
|
||||||
// interface ISrsCodec
|
// interface ISrsCodec
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t decode(SrsBuffer *buffer);
|
virtual srs_error_t decode(SrsBuffer *buffer);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer *buffer);
|
virtual srs_error_t encode(SrsBuffer *buffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -136,7 +136,7 @@ srs_error_t SrsRtpExtensionTwcc::decode(SrsBuffer* buf)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtpExtensionTwcc::nb_bytes()
|
uint64_t SrsRtpExtensionTwcc::nb_bytes()
|
||||||
{
|
{
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
@ -260,7 +260,7 @@ srs_error_t SrsRtpExtensions::decode_0xbede(SrsBuffer* buf)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtpExtensions::nb_bytes()
|
uint64_t SrsRtpExtensions::nb_bytes()
|
||||||
{
|
{
|
||||||
int size = 4 + (twcc_.has_twcc_ext() ? twcc_.nb_bytes() : 0);
|
int size = 4 + (twcc_.has_twcc_ext() ? twcc_.nb_bytes() : 0);
|
||||||
// add padding
|
// 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);
|
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);
|
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);
|
return header.set_extensions(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtpPacket2::nb_bytes()
|
uint64_t SrsRtpPacket2::nb_bytes()
|
||||||
{
|
{
|
||||||
if (!cached_payload_size) {
|
if (!cached_payload_size) {
|
||||||
int nn_payload = (payload? payload->nb_bytes():0);
|
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;
|
return nn_payload;
|
||||||
}
|
}
|
||||||
|
@ -833,7 +833,7 @@ srs_error_t SrsRtpRawNALUs::read_samples(vector<SrsSample*>& samples, int packet
|
||||||
return srs_success;
|
return srs_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtpRawNALUs::nb_bytes()
|
uint64_t SrsRtpRawNALUs::nb_bytes()
|
||||||
{
|
{
|
||||||
int size = 0;
|
int size = 0;
|
||||||
|
|
||||||
|
@ -944,7 +944,7 @@ SrsSample* SrsRtpSTAPPayload::get_pps()
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtpSTAPPayload::nb_bytes()
|
uint64_t SrsRtpSTAPPayload::nb_bytes()
|
||||||
{
|
{
|
||||||
int size = 1;
|
int size = 1;
|
||||||
|
|
||||||
|
@ -1048,7 +1048,7 @@ SrsRtpFUAPayload::~SrsRtpFUAPayload()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtpFUAPayload::nb_bytes()
|
uint64_t SrsRtpFUAPayload::nb_bytes()
|
||||||
{
|
{
|
||||||
int size = 2;
|
int size = 2;
|
||||||
|
|
||||||
|
@ -1158,7 +1158,7 @@ SrsRtpFUAPayload2::~SrsRtpFUAPayload2()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtpFUAPayload2::nb_bytes()
|
uint64_t SrsRtpFUAPayload2::nb_bytes()
|
||||||
{
|
{
|
||||||
return 2 + size;
|
return 2 + size;
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,7 +135,7 @@ public:
|
||||||
// ISrsCodec
|
// ISrsCodec
|
||||||
virtual srs_error_t decode(SrsBuffer* buf);
|
virtual srs_error_t decode(SrsBuffer* buf);
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
};
|
};
|
||||||
|
|
||||||
class SrsRtpExtensions : public ISrsCodec
|
class SrsRtpExtensions : public ISrsCodec
|
||||||
|
@ -160,7 +160,7 @@ private:
|
||||||
srs_error_t decode_0xbede(SrsBuffer* buf);
|
srs_error_t decode_0xbede(SrsBuffer* buf);
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
};
|
};
|
||||||
|
|
||||||
class SrsRtpHeader : public ISrsCodec
|
class SrsRtpHeader : public ISrsCodec
|
||||||
|
@ -185,7 +185,7 @@ private:
|
||||||
srs_error_t parse_extensions(SrsBuffer* buf);
|
srs_error_t parse_extensions(SrsBuffer* buf);
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
public:
|
public:
|
||||||
void set_marker(bool v);
|
void set_marker(bool v);
|
||||||
bool get_marker() const;
|
bool get_marker() const;
|
||||||
|
@ -262,7 +262,7 @@ public:
|
||||||
void set_extension_types(const SrsRtpExtensionTypes* v);
|
void set_extension_types(const SrsRtpExtensionTypes* v);
|
||||||
// interface ISrsEncoder
|
// interface ISrsEncoder
|
||||||
public:
|
public:
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual srs_error_t decode(SrsBuffer* buf);
|
virtual srs_error_t decode(SrsBuffer* buf);
|
||||||
};
|
};
|
||||||
|
@ -280,7 +280,7 @@ public:
|
||||||
virtual ~SrsRtpRawPayload();
|
virtual ~SrsRtpRawPayload();
|
||||||
// interface ISrsRtpPayloader
|
// interface ISrsRtpPayloader
|
||||||
public:
|
public:
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual srs_error_t decode(SrsBuffer* buf);
|
virtual srs_error_t decode(SrsBuffer* buf);
|
||||||
virtual ISrsRtpPayloader* copy();
|
virtual ISrsRtpPayloader* copy();
|
||||||
|
@ -305,7 +305,7 @@ public:
|
||||||
srs_error_t read_samples(std::vector<SrsSample*>& samples, int packet_size);
|
srs_error_t read_samples(std::vector<SrsSample*>& samples, int packet_size);
|
||||||
// interface ISrsRtpPayloader
|
// interface ISrsRtpPayloader
|
||||||
public:
|
public:
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual srs_error_t decode(SrsBuffer* buf);
|
virtual srs_error_t decode(SrsBuffer* buf);
|
||||||
virtual ISrsRtpPayloader* copy();
|
virtual ISrsRtpPayloader* copy();
|
||||||
|
@ -328,7 +328,7 @@ public:
|
||||||
SrsSample* get_pps();
|
SrsSample* get_pps();
|
||||||
// interface ISrsRtpPayloader
|
// interface ISrsRtpPayloader
|
||||||
public:
|
public:
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual srs_error_t decode(SrsBuffer* buf);
|
virtual srs_error_t decode(SrsBuffer* buf);
|
||||||
virtual ISrsRtpPayloader* copy();
|
virtual ISrsRtpPayloader* copy();
|
||||||
|
@ -353,7 +353,7 @@ public:
|
||||||
virtual ~SrsRtpFUAPayload();
|
virtual ~SrsRtpFUAPayload();
|
||||||
// interface ISrsRtpPayloader
|
// interface ISrsRtpPayloader
|
||||||
public:
|
public:
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual srs_error_t decode(SrsBuffer* buf);
|
virtual srs_error_t decode(SrsBuffer* buf);
|
||||||
virtual ISrsRtpPayloader* copy();
|
virtual ISrsRtpPayloader* copy();
|
||||||
|
@ -378,7 +378,7 @@ public:
|
||||||
virtual ~SrsRtpFUAPayload2();
|
virtual ~SrsRtpFUAPayload2();
|
||||||
// interface ISrsRtpPayloader
|
// interface ISrsRtpPayloader
|
||||||
public:
|
public:
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual srs_error_t decode(SrsBuffer* buf);
|
virtual srs_error_t decode(SrsBuffer* buf);
|
||||||
virtual ISrsRtpPayloader* copy();
|
virtual ISrsRtpPayloader* copy();
|
||||||
|
|
|
@ -361,7 +361,7 @@ MockSrsCodec::~MockSrsCodec()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
int MockSrsCodec::nb_bytes()
|
uint64_t MockSrsCodec::nb_bytes()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,7 +130,7 @@ public:
|
||||||
MockSrsCodec();
|
MockSrsCodec();
|
||||||
virtual ~MockSrsCodec();
|
virtual ~MockSrsCodec();
|
||||||
public:
|
public:
|
||||||
virtual int nb_bytes();
|
virtual uint64_t nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer* buf);
|
virtual srs_error_t encode(SrsBuffer* buf);
|
||||||
virtual srs_error_t decode(SrsBuffer* buf);
|
virtual srs_error_t decode(SrsBuffer* buf);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue