From 0e9c9db3f41f0685935d47d5ae902cc99abc06b9 Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 7 Jan 2015 15:37:44 +0800 Subject: [PATCH] fix the aggregate bug, adjust to starttime of msg. 2.0.91 --- trunk/src/app/srs_app_source.cpp | 9 +++++++++ trunk/src/core/srs_core.hpp | 2 +- trunk/src/libs/srs_librtmp.cpp | 4 +++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index a7cbea204..ed2ce0a2e 100644 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -1481,6 +1481,9 @@ int SrsSource::on_aggregate(SrsCommonMessage* msg) return ret; } + // the aggregate message always use abs time. + int delta = -1; + while (!stream->empty()) { if (!stream->require(1)) { ret = ERROR_RTMP_AGGREGATE; @@ -1519,6 +1522,12 @@ int SrsSource::on_aggregate(SrsCommonMessage* msg) timestamp |= time_h<<24; timestamp &= 0x7FFFFFFF; + // adjust abs timestamp in aggregate msg. + if (delta < 0) { + delta = (int)msg->header.timestamp - (int)timestamp; + } + timestamp += delta; + if (!stream->require(3)) { ret = ERROR_RTMP_AGGREGATE; srs_error("invalid aggregate message stream_id. ret=%d", ret); diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 3d2a02572..a963d6a30 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 2 #define VERSION_MINOR 0 -#define VERSION_REVISION 90 +#define VERSION_REVISION 91 // server info. #define RTMP_SIG_SRS_KEY "SRS" #define RTMP_SIG_SRS_ROLE "origin/edge server" diff --git a/trunk/src/libs/srs_librtmp.cpp b/trunk/src/libs/srs_librtmp.cpp index 5a05f8c99..dac2d33e9 100644 --- a/trunk/src/libs/srs_librtmp.cpp +++ b/trunk/src/libs/srs_librtmp.cpp @@ -823,7 +823,9 @@ int __srs_rtmp_on_aggregate(Context* context, SrsCommonMessage* msg) return ret; } + // the aggregate message always use abs time. int delta = -1; + while (!stream->empty()) { if (!stream->require(1)) { ret = ERROR_RTMP_AGGREGATE; @@ -862,7 +864,7 @@ int __srs_rtmp_on_aggregate(Context* context, SrsCommonMessage* msg) timestamp |= time_h<<24; timestamp &= 0x7FFFFFFF; - // adjust timestamp. + // adjust abs timestamp in aggregate msg. if (delta < 0) { delta = (int)msg->header.timestamp - (int)timestamp; }