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