From 29dea37dbb63fc6b0cde91b97e25b918c34aac99 Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 10 Aug 2021 12:10:35 +0800 Subject: [PATCH 1/2] Squash: Merge SRS4 --- CHANGELOG.md | 1 + trunk/src/app/srs_app_rtc_conn.cpp | 1 + trunk/src/core/srs_core_version4.hpp | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c9bea3681..4349f22e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ The changelog for SRS. ## SRS 4.0 Changelog +* v4.0, 2021-08-10, RTC: Merge [#2509](https://github.com/ossrs/srs/pull/2514), support http hooks n_play/stop/publish/unpublish. 4.0.151 * v4.0, 2021-08-07, Merge [#2514](https://github.com/ossrs/srs/pull/2514), Get original client ip instead of proxy ip, for rtc api #2514. 4.0.150 * v4.0, 2021-08-07, Fix [#2508](https://github.com/ossrs/srs/pull/2508), Support features query by API. 4.0.149 * v4.0, 2021-07-25, Fix build failed. 4.0.146 diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp index a765046f9..59723b322 100644 --- a/trunk/src/app/srs_app_rtc_conn.cpp +++ b/trunk/src/app/srs_app_rtc_conn.cpp @@ -379,6 +379,7 @@ SrsRtcPlayStream::SrsRtcPlayStream(SrsRtcConnection* s, const SrsContextId& cid) SrsRtcPlayStream::~SrsRtcPlayStream() { + // TODO: FIXME: Use SrsAsyncCallWorker in http hooks instead, to covert to async call. if (req_) { http_hooks_on_stop(); } diff --git a/trunk/src/core/srs_core_version4.hpp b/trunk/src/core/srs_core_version4.hpp index e856ee24a..2facadc77 100644 --- a/trunk/src/core/srs_core_version4.hpp +++ b/trunk/src/core/srs_core_version4.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 4 #define VERSION_MINOR 0 -#define VERSION_REVISION 150 +#define VERSION_REVISION 151 #endif From aad90c7f4261b03136bfa1ca2cc93ef99d246841 Mon Sep 17 00:00:00 2001 From: Haibo Chen Date: Fri, 13 Aug 2021 12:05:28 +0800 Subject: [PATCH 2/2] fix coredump bug: caused by publish stream that codec is unsupport, sush as G.711, H.263 (#2526) --- trunk/src/app/srs_app_dash.cpp | 12 ++++++++++-- trunk/src/app/srs_app_source.cpp | 6 ++++++ trunk/src/kernel/srs_kernel_ts.cpp | 12 ++++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/trunk/src/app/srs_app_dash.cpp b/trunk/src/app/srs_app_dash.cpp index 3accea0b0..e4c4ac11a 100644 --- a/trunk/src/app/srs_app_dash.cpp +++ b/trunk/src/app/srs_app_dash.cpp @@ -540,7 +540,11 @@ srs_error_t SrsDash::on_audio(SrsSharedPtrMessage* shared_audio, SrsFormat* form if (!enabled) { return err; } - + + if (!format->acodec) { + return err; + } + if ((err = controller->on_audio(shared_audio, format)) != srs_success) { return srs_error_wrap(err, "Consume audio failed"); } @@ -555,7 +559,11 @@ srs_error_t SrsDash::on_video(SrsSharedPtrMessage* shared_video, SrsFormat* form if (!enabled) { return err; } - + + if (!format->vcodec) { + return err; + } + if ((err = controller->on_video(shared_video, format)) != srs_success) { return srs_error_wrap(err, "Consume video failed"); } diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index 414d4e099..d3d26e7b6 100755 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -931,6 +931,12 @@ srs_error_t SrsOriginHub::on_audio(SrsSharedPtrMessage* shared_audio) if ((err = format->on_audio(msg)) != srs_success) { return srs_error_wrap(err, "format consume audio"); } + + // Ignore if no format->acodec, it means the codec is not parsed, or unsupport/unknown codec + // such as G.711 codec + if (!format->acodec) { + return err; + } // cache the sequence header if aac // donot cache the sequence header to gop_cache, return here. diff --git a/trunk/src/kernel/srs_kernel_ts.cpp b/trunk/src/kernel/srs_kernel_ts.cpp index 4b80c7101..9d63cc414 100644 --- a/trunk/src/kernel/srs_kernel_ts.cpp +++ b/trunk/src/kernel/srs_kernel_ts.cpp @@ -3064,7 +3064,11 @@ srs_error_t SrsTsTransmuxer::write_audio(int64_t timestamp, char* data, int size if ((err = format->on_audio(timestamp, data, size)) != srs_success) { return srs_error_wrap(err, "ts: format on audio"); } - + + if (!format->acodec) { + return err; + } + // ts support audio codec: aac/mp3 srs_assert(format->acodec && format->audio); if (format->acodec->id != SrsAudioCodecIdAAC && format->acodec->id != SrsAudioCodecIdMP3) { @@ -3100,7 +3104,11 @@ srs_error_t SrsTsTransmuxer::write_video(int64_t timestamp, char* data, int size if ((err = format->on_video(timestamp, data, size)) != srs_success) { return srs_error_wrap(err, "ts: on video"); } - + + if (!format->vcodec) { + return err; + } + // ignore info frame, // @see https://github.com/ossrs/srs/issues/288#issuecomment-69863909 srs_assert(format->video && format->vcodec);