diff --git a/.gitignore b/.gitignore index b8056ec48..b934528a6 100644 --- a/.gitignore +++ b/.gitignore @@ -28,12 +28,13 @@ # Apple-specific garbage files. .AppleDouble - .idea +.cursor/ .DS_Store *.heap *.exe + cmake-build-debug /build/ /trunk/cmake/build diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md index 0a623f25f..c02d7581b 100644 --- a/trunk/doc/CHANGELOG.md +++ b/trunk/doc/CHANGELOG.md @@ -7,6 +7,7 @@ The changelog for SRS. ## SRS 7.0 Changelog +* v7.0, 2025-10-31, Merge [#4547](https://github.com/ossrs/srs/pull/4547): Add ignore configuration for cursor. v7.0.115 (#4547) * v7.0, 2025-10-30, WebRTC: Use realtime for TWCC timestamp accuracy. v7.0.114 * v7.0, 2025-10-30, AI: HLS: Fix crash when segment is not open by adding NULL checks. v7.0.113 (#3431) * v7.0, 2025-10-29, AI: AAC: Fix mono audio reported as stereo in HTTP API. v7.0.112 (#3556) diff --git a/trunk/src/app/srs_app_hls.cpp b/trunk/src/app/srs_app_hls.cpp index 6fba8cb49..dcec05d49 100644 --- a/trunk/src/app/srs_app_hls.cpp +++ b/trunk/src/app/srs_app_hls.cpp @@ -1132,7 +1132,7 @@ srs_error_t SrsHlsFmp4Muxer::do_refresh_m3u8_segment(SrsHlsM4sSegment *segment, } // ss << segment->uri << SRS_CONSTS_LF; ss << path.filepath_base(seg_uri) << SRS_CONSTS_LF; - + return err; } @@ -2947,4 +2947,3 @@ void SrsHls::hls_show_mux_log() srsu2msi(controller_->duration()), controller_->deviation()); } // LCOV_EXCL_STOP - diff --git a/trunk/src/app/srs_app_hls.hpp b/trunk/src/app/srs_app_hls.hpp index e5014951b..df66a8d2f 100644 --- a/trunk/src/app/srs_app_hls.hpp +++ b/trunk/src/app/srs_app_hls.hpp @@ -9,9 +9,9 @@ #include +#include #include #include -#include #include #include diff --git a/trunk/src/app/srs_app_http_static.cpp b/trunk/src/app/srs_app_http_static.cpp index 07cb214cb..ac9ceb08c 100644 --- a/trunk/src/app/srs_app_http_static.cpp +++ b/trunk/src/app/srs_app_http_static.cpp @@ -731,4 +731,3 @@ srs_error_t SrsHttpStaticServer::mount_vhost(string vhost, string &pmount) return err; } // LCOV_EXCL_STOP - diff --git a/trunk/src/app/srs_app_listener.cpp b/trunk/src/app/srs_app_listener.cpp index b9bd2059e..6ea1bf8cc 100644 --- a/trunk/src/app/srs_app_listener.cpp +++ b/trunk/src/app/srs_app_listener.cpp @@ -817,7 +817,7 @@ srs_error_t SrsUdpMuxListener::cycle() pprint->elapse(); if (pprint->can_print()) { // LCOV_EXCL_START - + // For performance, only restore context when output log. _srs_context->set_id(cid_); diff --git a/trunk/src/app/srs_app_log.cpp b/trunk/src/app/srs_app_log.cpp index da45ad2e6..fda1e7c6d 100644 --- a/trunk/src/app/srs_app_log.cpp +++ b/trunk/src/app/srs_app_log.cpp @@ -172,4 +172,3 @@ void SrsFileLog::open_log_file() S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH); } // LCOV_EXCL_STOP - diff --git a/trunk/src/app/srs_app_process.cpp b/trunk/src/app/srs_app_process.cpp index 0e1a2f42c..f38d2b5d2 100644 --- a/trunk/src/app/srs_app_process.cpp +++ b/trunk/src/app/srs_app_process.cpp @@ -371,4 +371,3 @@ void SrsProcess::fast_kill() return; } // LCOV_EXCL_STOP - diff --git a/trunk/src/app/srs_app_reload.cpp b/trunk/src/app/srs_app_reload.cpp index 36a5caf29..6a33673ef 100644 --- a/trunk/src/app/srs_app_reload.cpp +++ b/trunk/src/app/srs_app_reload.cpp @@ -24,4 +24,3 @@ srs_error_t ISrsReloadHandler::on_reload_vhost_chunk_size(string /*vhost*/) return srs_success; } // LCOV_EXCL_STOP - diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp index 3036d708d..f549cc80c 100644 --- a/trunk/src/app/srs_app_rtc_conn.cpp +++ b/trunk/src/app/srs_app_rtc_conn.cpp @@ -1532,10 +1532,10 @@ srs_error_t SrsRtcPublishStream::on_twcc(uint16_t sn) { srs_error_t err = srs_success; - // To get more accurate timestamp, and avoid deviation caused by coroutine scheduler, + // To get more accurate timestamp, and avoid deviation caused by coroutine scheduler, // we use realtime for TWCC. srs_utime_t now = srs_time_now_realtime(); - + err = rtcp_twcc_->recv_packet(sn, now); return err; diff --git a/trunk/src/app/srs_app_rtc_dtls.cpp b/trunk/src/app/srs_app_rtc_dtls.cpp index 0c46a790d..d8c7104ea 100644 --- a/trunk/src/app/srs_app_rtc_dtls.cpp +++ b/trunk/src/app/srs_app_rtc_dtls.cpp @@ -1129,4 +1129,3 @@ srs_error_t SrsSRTP::unprotect_rtcp(void *packet, int *nb_plaintext) return err; } // LCOV_EXCL_STOP - diff --git a/trunk/src/app/srs_app_rtc_server.cpp b/trunk/src/app/srs_app_rtc_server.cpp index 414223faf..ad64dfbc9 100644 --- a/trunk/src/app/srs_app_rtc_server.cpp +++ b/trunk/src/app/srs_app_rtc_server.cpp @@ -596,4 +596,3 @@ srs_error_t SrsRtcSessionManager::on_udp_packet(ISrsUdpMuxSocket *skt) return srs_error_new(ERROR_RTC_UDP, "unknown packet"); } // LCOV_EXCL_STOP - diff --git a/trunk/src/app/srs_app_rtmp_conn.cpp b/trunk/src/app/srs_app_rtmp_conn.cpp index c2c1cce67..a221eeac1 100644 --- a/trunk/src/app/srs_app_rtmp_conn.cpp +++ b/trunk/src/app/srs_app_rtmp_conn.cpp @@ -634,7 +634,8 @@ srs_error_t SrsRtmpConn::stream_service_cycle() } default: { return srs_error_new(ERROR_SYSTEM_CLIENT_INVALID, "rtmp: unknown client type=%d", info_->type_); - }} + } + } // LCOV_EXCL_STOP return err; @@ -759,7 +760,7 @@ srs_error_t SrsRtmpConn::redirect_to_origin_cluster(SrsSharedPtr string rurl = srs_net_url_encode_rtmp_url(host, port, req->host_, req->vhost_, req->app_, req->stream_, req->param_); srs_trace("rtmp: redirect in cluster, from=%s:%d, target=%s:%d, url=%s, rurl=%s", - req->host_.c_str(), req->port_, host.c_str(), port, url.c_str(), rurl.c_str()); + req->host_.c_str(), req->port_, host.c_str(), port, url.c_str(), rurl.c_str()); // Ignore if host or port is invalid. if (host.empty() || port == 0) { @@ -1676,4 +1677,3 @@ void SrsRtmpConn::expire() trd_->interrupt(); } // LCOV_EXCL_STOP - diff --git a/trunk/src/app/srs_app_rtmp_source.cpp b/trunk/src/app/srs_app_rtmp_source.cpp index 58f92cbb5..07e058c49 100644 --- a/trunk/src/app/srs_app_rtmp_source.cpp +++ b/trunk/src/app/srs_app_rtmp_source.cpp @@ -2638,4 +2638,3 @@ void SrsLiveSource::on_edge_proxy_unpublish() publish_edge_->on_proxy_unpublish(); } // LCOV_EXCL_STOP - diff --git a/trunk/src/app/srs_app_server.cpp b/trunk/src/app/srs_app_server.cpp index 2a9c57604..cd6c0e5c4 100644 --- a/trunk/src/app/srs_app_server.cpp +++ b/trunk/src/app/srs_app_server.cpp @@ -2042,4 +2042,3 @@ void SrsPidFileLocker::close() } } // LCOV_EXCL_STOP - diff --git a/trunk/src/core/srs_core_autofree.hpp b/trunk/src/core/srs_core_autofree.hpp index a4d7eff84..e43ea00c8 100644 --- a/trunk/src/core/srs_core_autofree.hpp +++ b/trunk/src/core/srs_core_autofree.hpp @@ -10,7 +10,7 @@ #include // Unique ptr smart pointer, only support unique ptr, with limited APIs and features, -// see https://github.com/ossrs/srs/discussions/3667#discussioncomment-8969107 +// see https://github.com/ossrs/srs/issues/4551 // // Usage: // SrsUniquePtr ptr(new MyClass()); @@ -89,7 +89,7 @@ SRS_DECLARE_PRIVATE: // clang-format on }; // The unique ptr for array objects, only support unique ptr, with limited APIs and features, -// see https://github.com/ossrs/srs/discussions/3667#discussioncomment-8969107 +// see https://github.com/ossrs/srs/issues/4551 // // Usage: // SrsUniquePtr ptr(new MyClass[10]); @@ -156,7 +156,7 @@ SRS_DECLARE_PRIVATE: // clang-format on }; // Shared ptr smart pointer, only support shared ptr, no weak ptr, no shared from this, no inheritance, -// no comparing, see https://github.com/ossrs/srs/discussions/3667#discussioncomment-8969107 +// no comparing, see https://github.com/ossrs/srs/issues/4551 // // Usage: // SrsSharedPtr ptr(new MyClass()); diff --git a/trunk/src/core/srs_core_deprecated.hpp b/trunk/src/core/srs_core_deprecated.hpp index 02b087402..326cf34fc 100644 --- a/trunk/src/core/srs_core_deprecated.hpp +++ b/trunk/src/core/srs_core_deprecated.hpp @@ -23,7 +23,7 @@ // SrsAutoFree(MyClass, p); // p will be freed even p is changed later. // SrsUniquePtr ptr(p); // crash because p is an invalid pointer. // -// See https://github.com/ossrs/srs/discussions/3667#discussioncomment-8969107 for more details. +// See https://github.com/ossrs/srs/issues/4551 for more details. // // To delete array. Please use SrsUniquePtr instead. For example: // MyClass** pa = new MyClass*[size]; @@ -37,7 +37,7 @@ // SrsAutoFreeA(MyClass*, pa); // pa will be freed even pa is changed later. // SrsUniquePtr ptr(pa); // crash because pa is an invalid pointer. // -// See https://github.com/ossrs/srs/discussions/3667#discussioncomment-8969107 for more details. +// See https://github.com/ossrs/srs/issues/4551 for more details. // // Use hook instead of delete. Please use SrsUniquePtr instead. For example: // addrinfo* r = NULL; @@ -54,7 +54,7 @@ // SrsAutoFreeH(addrinfo, r, freeaddrinfo); // r will be freed even r is changed later. // SrsUniquePtr ptr(r, freeaddrinfo); // crash because r is an invalid pointer. // -// See https://github.com/ossrs/srs/discussions/3667#discussioncomment-8969107 for more details. +// See https://github.com/ossrs/srs/issues/4551 for more details. // // The template implementation. // template diff --git a/trunk/src/core/srs_core_version7.hpp b/trunk/src/core/srs_core_version7.hpp index 4a15376a6..c182b6510 100644 --- a/trunk/src/core/srs_core_version7.hpp +++ b/trunk/src/core/srs_core_version7.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 7 #define VERSION_MINOR 0 -#define VERSION_REVISION 114 +#define VERSION_REVISION 115 #endif \ No newline at end of file diff --git a/trunk/src/main/srs_main_server.cpp b/trunk/src/main/srs_main_server.cpp index 2d37c9e5a..d3ebce1ba 100644 --- a/trunk/src/main/srs_main_server.cpp +++ b/trunk/src/main/srs_main_server.cpp @@ -484,4 +484,3 @@ srs_error_t run_srs_server() return err; } // LCOV_EXCL_STOP - diff --git a/trunk/src/protocol/srs_protocol_utility.cpp b/trunk/src/protocol/srs_protocol_utility.cpp index b8f185674..0944d01c0 100644 --- a/trunk/src/protocol/srs_protocol_utility.cpp +++ b/trunk/src/protocol/srs_protocol_utility.cpp @@ -613,7 +613,7 @@ void retrieve_local_ips(SrsProtocolUtility *utility) bool loopback = (cur->ifa_flags & IFF_LOOPBACK); if (ipv4 && ready && !ignored) { discover_network_iface(utility, cur, ips, ss0, ss1, false, loopback); - } + } // LCOV_EXCL_STOP } } diff --git a/trunk/src/utest/srs_utest_ai13.cpp b/trunk/src/utest/srs_utest_ai13.cpp index 93851a4da..96888cdc1 100644 --- a/trunk/src/utest/srs_utest_ai13.cpp +++ b/trunk/src/utest/srs_utest_ai13.cpp @@ -1103,7 +1103,7 @@ VOID TEST(AppHlsTest, HlsControllerWriteAudioTypicalScenario) MockHlsRequest mock_request("__defaultVhost__", "live", "test"); // Cast to concrete type to access private members for testing - SrsHlsMuxer *muxer = dynamic_cast(controller->muxer_); + SrsHlsMuxer *muxer = dynamic_cast(controller->muxer_); srs_assert(muxer); // Set up muxer with required fields @@ -1419,7 +1419,7 @@ VOID TEST(AppHlsTest, HlsControllerSelectionTypicalScenario) HELPER_EXPECT_SUCCESS(controller->initialize()); // Cast to concrete type to access private members for testing - SrsHlsMuxer *muxer = dynamic_cast(controller->muxer_); + SrsHlsMuxer *muxer = dynamic_cast(controller->muxer_); srs_assert(muxer); // Test initial state - no current segment @@ -1490,7 +1490,7 @@ VOID TEST(AppHlsTest, HlsControllerOnPublishTypicalScenario) HELPER_EXPECT_SUCCESS(controller->initialize()); // Cast to concrete type to access private members for testing - SrsHlsMuxer *muxer = dynamic_cast(controller->muxer_); + SrsHlsMuxer *muxer = dynamic_cast(controller->muxer_); srs_assert(muxer); // Create mock request @@ -1560,7 +1560,7 @@ VOID TEST(AppHlsTest, HlsControllerOnUnpublishTypicalScenario) HELPER_EXPECT_SUCCESS(controller->initialize()); // Cast to concrete type to access private members for testing - SrsHlsMuxer *muxer = dynamic_cast(controller->muxer_); + SrsHlsMuxer *muxer = dynamic_cast(controller->muxer_); srs_assert(muxer); // Create mock request @@ -1616,7 +1616,7 @@ VOID TEST(AppHlsTest, HlsControllerWriteVideoTypicalScenario) HELPER_EXPECT_SUCCESS(controller->initialize()); // Cast to concrete type to access private members for testing - SrsHlsMuxer *muxer = dynamic_cast(controller->muxer_); + SrsHlsMuxer *muxer = dynamic_cast(controller->muxer_); srs_assert(muxer); // Create mock request diff --git a/trunk/src/utest/srs_utest_ai24.cpp b/trunk/src/utest/srs_utest_ai24.cpp index bdcace5b8..8825384d8 100644 --- a/trunk/src/utest/srs_utest_ai24.cpp +++ b/trunk/src/utest/srs_utest_ai24.cpp @@ -5,22 +5,22 @@ // #include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #ifdef SRS_FFMPEG_FIT #include @@ -389,7 +389,7 @@ VOID TEST(ParsedPacketTest, CopyParsedVideoPacket) // Add sample data uint8_t sample_data[] = {0x65, 0x88, 0x84, 0x00}; - HELPER_EXPECT_SUCCESS(packet.add_sample((char*)sample_data, sizeof(sample_data))); + HELPER_EXPECT_SUCCESS(packet.add_sample((char *)sample_data, sizeof(sample_data))); // Copy the packet SrsParsedVideoPacket *copied = packet.copy(); @@ -517,7 +517,7 @@ VOID TEST(DvrAsyncCallOnHlsTest, CallWithMultipleHooks) // Mock HLS muxer for testing SrsHlsController::reap_segment class MockHlsMuxerForReapSegment : public ISrsHlsMuxer { -SRS_DECLARE_PRIVATE: + SRS_DECLARE_PRIVATE: int segment_close_count_; int segment_open_count_; int flush_video_count_; @@ -659,7 +659,7 @@ VOID TEST(HlsControllerTest, ReapSegmentSuccess) // Mock HLS segment for testing do_segment_close class MockHlsSegmentForSegmentClose : public SrsHlsSegment { -SRS_DECLARE_PRIVATE: + SRS_DECLARE_PRIVATE: srs_error_t rename_error_; srs_utime_t mock_duration_; bool rename_called_; @@ -851,8 +851,8 @@ VOID TEST(HlsFmp4MuxerTest, DoRefreshM3u8SegmentWithEncryption) // Create mock segment MockHlsM4sSegment segment; - segment.sequence_no_ = 10; // 10 % 5 == 0, so key should be written - segment.is_sequence_header_ = true; // Should write discontinuity + segment.sequence_no_ = 10; // 10 % 5 == 0, so key should be written + segment.is_sequence_header_ = true; // Should write discontinuity segment.duration_ = 5000 * SRS_UTIME_MILLISECONDS; // 5 seconds segment.fullpath_ = "/path/to/segment-[duration].m4s"; @@ -885,7 +885,7 @@ VOID TEST(HlsFmp4MuxerTest, DoRefreshM3u8SegmentWithEncryption) // Mock HLS segment for testing SrsHlsMuxer::do_refresh_m3u8_segment class MockHlsSegmentForRefreshM3u8 : public SrsHlsSegment { -SRS_DECLARE_PRIVATE: + SRS_DECLARE_PRIVATE: bool is_sequence_header_; srs_utime_t duration_; @@ -931,8 +931,8 @@ VOID TEST(HlsMuxerTest, DoRefreshM3u8SegmentWithEncryption) // Create mock segment MockHlsSegmentForRefreshM3u8 segment; - segment.sequence_no_ = 10; // 10 % 5 == 0, so key should be written - segment.set_is_sequence_header(true); // Should write discontinuity + segment.sequence_no_ = 10; // 10 % 5 == 0, so key should be written + segment.set_is_sequence_header(true); // Should write discontinuity segment.set_duration(5000 * SRS_UTIME_MILLISECONDS); // 5 seconds // Call do_refresh_m3u8_segment