diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 621ba7569d..65875cb5a8 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -195,7 +195,8 @@ jobs:
- name: Run SRS regression-test
run: |
docker run --rm srs:test bash -c './objs/srs -c conf/regression-test.conf && \
- cd 3rdparty/srs-bench && ./objs/srs_test -test.v && ./objs/srs_gb28181_test -test.v'
+ cd 3rdparty/srs-bench && (./objs/srs_test -test.v || (cat ../../objs/srs.log && exit 1)) && \
+ ./objs/srs_gb28181_test -test.v'
runs-on: ubuntu-20.04
coverage:
diff --git a/trunk/auto/options.sh b/trunk/auto/options.sh
index 2f8c7dad37..2f97baee94 100755
--- a/trunk/auto/options.sh
+++ b/trunk/auto/options.sh
@@ -448,8 +448,7 @@ function parse_user_option() {
--ffmpeg-tool) SRS_FFMPEG_TOOL=$(switch2value $value) ;;
# use cache for build.
- --build-cache) SRS_BUILD_CACHE=YES ;;
- --without-build-cache) SRS_BUILD_CACHE=NO ;;
+ --build-cache) SRS_BUILD_CACHE=$(switch2value $value) ;;
*)
echo "$0: error: invalid option \"$option\""
diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md
index b9cf22414c..99e21db91c 100644
--- a/trunk/doc/CHANGELOG.md
+++ b/trunk/doc/CHANGELOG.md
@@ -7,6 +7,7 @@ The changelog for SRS.
## SRS 5.0 Changelog
+* v5.0, 2023-11-04, Merge [#3852](https://github.com/ossrs/srs/pull/3852): RTC: Refine FFmpeg opus audio noisy issue. v5.0.197 (#3852)
* v5.0, 2023-11-01, Merge [#3858](https://github.com/ossrs/srs/pull/3858): Support build without cache to test if actions fail. v5.0.196 (#3858)
* v5.0, 2023-10-25, Merge [#3845](https://github.com/ossrs/srs/pull/3845): RTC: Fix FFmpeg opus audio noisy issue. v5.0.195 (#3845)
* v5.0, 2023-10-21, Merge [#3847](https://github.com/ossrs/srs/pull/3847): WebRTC: TCP transport should use read_fully instead of read. v5.0.194 (#3847)
diff --git a/trunk/research/players/js/srs.page.js b/trunk/research/players/js/srs.page.js
index ff4415445b..520491e48d 100755
--- a/trunk/research/players/js/srs.page.js
+++ b/trunk/research/players/js/srs.page.js
@@ -13,7 +13,6 @@ function srs_get_player_height() { return srs_get_player_width() * 9 / 19; }
* update the navigator, add same query string.
*/
function update_nav() {
- $("#srs_index").attr("href", "index.html" + window.location.search);
$("#nav_srs_player").attr("href", "srs_player.html" + window.location.search);
$("#nav_rtc_player").attr("href", "rtc_player.html" + window.location.search);
$("#nav_rtc_publisher").attr("href", "rtc_publisher.html" + window.location.search);
diff --git a/trunk/research/players/srs_player.html b/trunk/research/players/srs_player.html
index 8ce4b616e0..40bc042404 100755
--- a/trunk/research/players/srs_player.html
+++ b/trunk/research/players/srs_player.html
@@ -15,7 +15,7 @@
diff --git a/trunk/research/players/whep.html b/trunk/research/players/whep.html
index ead5018fdf..af896da774 100644
--- a/trunk/research/players/whep.html
+++ b/trunk/research/players/whep.html
@@ -20,7 +20,7 @@
diff --git a/trunk/research/players/whip.html b/trunk/research/players/whip.html
index cff306656c..4f804621f1 100644
--- a/trunk/research/players/whip.html
+++ b/trunk/research/players/whip.html
@@ -20,7 +20,7 @@
diff --git a/trunk/src/app/srs_app_rtc_codec.cpp b/trunk/src/app/srs_app_rtc_codec.cpp
index cbc46d1388..c3db8e7b70 100644
--- a/trunk/src/app/srs_app_rtc_codec.cpp
+++ b/trunk/src/app/srs_app_rtc_codec.cpp
@@ -260,6 +260,13 @@ srs_error_t SrsAudioTranscoder::init_enc(SrsAudioCodecId dst_codec, int dst_chan
if (!enc_frame_) {
return srs_error_new(ERROR_RTC_RTP_MUXER, "Could not allocate audio encode in frame");
}
+ enc_frame_->format = enc_->sample_fmt;
+ enc_frame_->nb_samples = enc_->frame_size;
+ enc_frame_->channel_layout = enc_->channel_layout;
+
+ if (av_frame_get_buffer(enc_frame_, 0) < 0) {
+ return srs_error_new(ERROR_RTC_RTP_MUXER, "Could not get audio frame buffer");
+ }
enc_packet_ = av_packet_alloc();
if (!enc_packet_) {
@@ -381,26 +388,21 @@ srs_error_t SrsAudioTranscoder::encode(std::vector
&pkts)
}
while (av_audio_fifo_size(fifo_) >= enc_->frame_size) {
- enc_frame_->format = enc_->sample_fmt;
- enc_frame_->nb_samples = enc_->frame_size;
- enc_frame_->channel_layout = enc_->channel_layout;
-
- if (av_frame_get_buffer(enc_frame_, 0) < 0) {
- av_frame_free(&enc_frame_);
- return srs_error_new(ERROR_RTC_RTP_MUXER, "Could not get audio frame buffer");
+ // make sure the frame is writable
+ if (av_frame_make_writable(enc_frame_) < 0) {
+ return srs_error_new(ERROR_RTC_RTP_MUXER, "Could not make writable frame");
}
/* Read as many samples from the FIFO buffer as required to fill the frame.
* The samples are stored in the frame temporarily. */
if (av_audio_fifo_read(fifo_, (void **)enc_frame_->data, enc_->frame_size) < enc_->frame_size) {
- av_frame_free(&enc_frame_);
return srs_error_new(ERROR_RTC_RTP_MUXER, "Could not read data from FIFO");
}
+
/* send the frame for encoding */
enc_frame_->pts = next_out_pts_;
next_out_pts_ += enc_->frame_size;
int error = avcodec_send_frame(enc_, enc_frame_);
- av_frame_unref(enc_frame_);
if (error < 0) {
return srs_error_new(ERROR_RTC_RTP_MUXER, "Error sending the frame to the encoder(%d,%s)", error,
av_make_error_string(err_buf, AV_ERROR_MAX_STRING_SIZE, error));
diff --git a/trunk/src/core/srs_core_version5.hpp b/trunk/src/core/srs_core_version5.hpp
index 554b2f70b0..014b230324 100644
--- a/trunk/src/core/srs_core_version5.hpp
+++ b/trunk/src/core/srs_core_version5.hpp
@@ -9,6 +9,6 @@
#define VERSION_MAJOR 5
#define VERSION_MINOR 0
-#define VERSION_REVISION 196
+#define VERSION_REVISION 197
#endif