This commit is contained in:
parent
a83c9026f9
commit
1560077cbc
65
trunk/3rdparty/srs-docs/pages/product-en.md
vendored
65
trunk/3rdparty/srs-docs/pages/product-en.md
vendored
|
|
@ -16,6 +16,16 @@ For detail features of SRS, please see [FEATURES](https://github.com/ossrs/srs/b
|
|||
|
||||
Let's briefly introduce the history of SRS in reverse order.
|
||||
|
||||
From June to December 2025, AI became a major contributor to SRS development. AI was used extensively to cleanup
|
||||
issues, review pull requests, and improve unit test coverage from 40% to 88%. AI also helped implement new features
|
||||
and enhancements. While AI is now a major contributor, the human maintainer still reviews each line of code generated
|
||||
by AI and makes all final decisions, ensuring code quality and project direction remain under human oversight.
|
||||
|
||||
In January 2025, the paid star planet was closed and all paid support services were discontinued. The decision was
|
||||
made to build a purely volunteer-driven community without any monetization. While donations, sponsors, and backers
|
||||
are still needed and welcomed to support the project, no special paid services will be provided to anyone. With AI
|
||||
now working very well as a question answerer and problem solver, anyone who needs help should use AI first.
|
||||
|
||||
In January 2023, Star exceeded 20K and launched the Paid Star Planet. Oryx supported Virtual Live Broadcasting,
|
||||
confirmed the development codename for version 6.0 as Hang, and introduced new TOC rules.
|
||||
|
||||
|
|
@ -91,14 +101,59 @@ For a detailed interpretation, please see Welcome to SRS: Mission, Vision, and V
|
|||
|
||||
## Release 7.0
|
||||
|
||||
Code name: Kai. Named by TOC member [Haibo Chen](https://github.com/duiniuluantanqin). Planned for release by the end of 2026.
|
||||
Code name: Kai. Named by TOC member [Haibo Chen](https://github.com/duiniuluantanqin). Development started August 2024, planned for release by the end of 2026.
|
||||
|
||||
> Code Name Story: I am Haibo Chen, a core maintainer of SRS and a TOC member. The code name Kai is inspired by my son Chen Kaiqi's name. As a father, I aim to set a good example by doing meaningful and interesting work. I appreciate the support and collaboration from everyone in the community, making it more vibrant and warm. This upgrade aims to provide users with more powerful features and a smoother experience, laying a strong foundation for SRS's future.
|
||||
|
||||
- [x] Proxy Cluster - Support for more stream paths. [#4158](https://github.com/ossrs/srs/pull/4158)
|
||||
- [ ] WebRTC HEVC - WebRTC support for HEVC, recording HEVC to MP4 files, completing full HEVC support. [#4289](https://github.com/ossrs/srs/pull/4289), [#4349](https://github.com/ossrs/srs/pull/4349), [#4296](https://github.com/ossrs/srs/pull/4296)
|
||||
- [ ] HLS fMP4 - HLS protocol support for fMP4. [#4159](https://github.com/ossrs/srs/pull/4159)
|
||||
- [ ] RTSP Playback - Support for RTSP protocol playback. [#4333](https://github.com/ossrs/srs/pull/4333)
|
||||
**New Protocols & Major Features**
|
||||
|
||||
- [x] RTSP Playback - Support for viewing streams over RTSP protocol. [#4333](https://github.com/ossrs/srs/pull/4333)
|
||||
- [x] RTMPS Server - Support for RTMP over SSL server. [#4443](https://github.com/ossrs/srs/pull/4443)
|
||||
- [x] Proxy Cluster - Support for proxy server functionality with more stream paths. [#4158](https://github.com/ossrs/srs/pull/4158)
|
||||
- [x] IPv6 Support - Full IPv6 support for all protocols: RTMP, HTTP/HTTPS, WebRTC, SRT, RTSP. [#4457](https://github.com/ossrs/srs/pull/4457)
|
||||
|
||||
**WebRTC Enhancements**
|
||||
|
||||
- [x] VP9 Codec - Support for VP9 codec in WebRTC-to-WebRTC streaming. [#4548](https://github.com/ossrs/srs/pull/4548)
|
||||
- [x] G.711 Audio - Support for G.711 (PCMU/PCMA) audio codec for WebRTC. [#4075](https://github.com/ossrs/srs/pull/4075)
|
||||
- [x] HEVC Support - RTMP-to-WebRTC and WebRTC-to-RTMP conversion with HEVC. [#4289](https://github.com/ossrs/srs/pull/4289), [#4349](https://github.com/ossrs/srs/pull/4349)
|
||||
- [x] Audio Jitter Buffer - RTC audio packet jitter buffer for improved quality. [#4295](https://github.com/ossrs/srs/pull/4295)
|
||||
- [x] Dual Video Track - Support for dual video track with multiple codecs (AVC and HEVC) in RTMP2RTC bridge. [#4413](https://github.com/ossrs/srs/pull/4413)
|
||||
- [x] WHEP Support - WebRTC HTTP Egress Protocol for playback. [#3404](https://github.com/ossrs/srs/pull/3404)
|
||||
|
||||
**HLS Improvements**
|
||||
|
||||
- [x] HLS fMP4 - HLS protocol support for fMP4 segments for HEVC/LLHLS. [#4159](https://github.com/ossrs/srs/pull/4159)
|
||||
- [x] Query String Support - Support query string in hls_key_url for JWT tokens. [#4426](https://github.com/ossrs/srs/pull/4426)
|
||||
- [x] Master M3U8 Path - Support hls_master_m3u8_path_relative for reverse proxy. [#4338](https://github.com/ossrs/srs/pull/4338)
|
||||
|
||||
**Architecture Changes**
|
||||
|
||||
- [x] Single-Thread Architecture - Removed multi-threading support, changed to single-thread architecture for simplicity. [#4445](https://github.com/ossrs/srs/pull/4445)
|
||||
- [x] Always Enable WebRTC - WebRTC is now always enabled and enforces C++98 compatibility. [#4447](https://github.com/ossrs/srs/pull/4447)
|
||||
- [x] Always Enable SRT - SRT protocol is now always enabled. [#4460](https://github.com/ossrs/srs/pull/4460)
|
||||
- [x] Unified Server - Merged SRT and RTC servers into unified SrsServer. [#4459](https://github.com/ossrs/srs/pull/4459)
|
||||
- [x] HTTP Parser Upgrade - Upgraded from http-parser to llhttp. [#4469](https://github.com/ossrs/srs/pull/4469)
|
||||
- [x] Stream Publish Token - Implemented stream publish token system to prevent race conditions across all protocols. [#4452](https://github.com/ossrs/srs/pull/4452)
|
||||
|
||||
**DVR & Recording**
|
||||
|
||||
- [x] HEVC DVR to FLV - Support H.265 FLV fragments for DVR. [#4296](https://github.com/ossrs/srs/pull/4296)
|
||||
- [x] MP4 DVR Sync - Fix audio/video synchronization issues in WebRTC recordings. [#4230](https://github.com/ossrs/srs/pull/4230)
|
||||
|
||||
**Code Quality & Build**
|
||||
|
||||
- [x] Clang Format - Use clang-format to unify coding style. [#4366](https://github.com/ossrs/srs/pull/4366), [#4433](https://github.com/ossrs/srs/pull/4433)
|
||||
- [x] Memory Management - Multiple memory leak fixes and improved error handling throughout the codebase.
|
||||
- [x] Build Improvements - Better dependency detection and reporting. [#4293](https://github.com/ossrs/srs/pull/4293)
|
||||
|
||||
**Other Improvements**
|
||||
|
||||
- [x] GB28181 Changes - Removed embedded SIP server, enforce external SIP usage. [#4466](https://github.com/ossrs/srs/pull/4466)
|
||||
- [x] RTMP Config Section - Moved RTMP configs to rtmp{} section. [#4454](https://github.com/ossrs/srs/pull/4454)
|
||||
- [x] Cloud Features Removed - Removed cloud CLS and APM. [#4456](https://github.com/ossrs/srs/pull/4456)
|
||||
|
||||
SRS 7.0 development started at 2024.08.
|
||||
|
||||
## Release 6.0
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ The changelog for SRS.
|
|||
<a name="v7-changes"></a>
|
||||
|
||||
## SRS 7.0 Changelog
|
||||
* v7.0, 2025-12-06, SRT: Fix peer_idle_timeout not applied to publishers and players. v7.0.134 (#4600)
|
||||
* v7.0, 2025-12-04, SRT: Enable tlpktdrop by default to prevent 100% CPU usage. v7.0.133 (#4587)
|
||||
* v7.0, 2025-12-03, AI: WebRTC: Fix audio-only WHIP publish without SSRC. v7.0.132 (#4570)
|
||||
* v7.0, 2025-11-30, SRT: Support default_mode config for short streamid format. v7.0.131
|
||||
|
|
|
|||
|
|
@ -551,6 +551,12 @@ srs_error_t SrsMpegtsSrtConn::do_publishing()
|
|||
|
||||
srs_trace("SRT: start publish url=%s", req_->get_stream_url().c_str());
|
||||
|
||||
// Set socket timeout to peer_idle_timeout for publishers.
|
||||
// @see https://github.com/ossrs/srs/issues/4600
|
||||
srs_utime_t timeout = config_->get_srto_peeridletimeout();
|
||||
srt_conn_->set_recv_timeout(timeout);
|
||||
srt_conn_->set_send_timeout(timeout);
|
||||
|
||||
SrsUniquePtr<SrsPithyPrint> pprint(SrsPithyPrint::create_srt_publish());
|
||||
|
||||
int nb_packets = 0;
|
||||
|
|
@ -598,6 +604,12 @@ srs_error_t SrsMpegtsSrtConn::do_playing()
|
|||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
// Set socket timeout to peer_idle_timeout for players.
|
||||
// @see https://github.com/ossrs/srs/issues/4600
|
||||
srs_utime_t timeout = config_->get_srto_peeridletimeout();
|
||||
srt_conn_->set_recv_timeout(timeout);
|
||||
srt_conn_->set_send_timeout(timeout);
|
||||
|
||||
ISrsSrtConsumer *consumer_raw = NULL;
|
||||
if ((err = srt_source_->create_consumer(consumer_raw)) != srs_success) {
|
||||
return srs_error_wrap(err, "create consumer, ts source=%s", req_->get_stream_url().c_str());
|
||||
|
|
@ -619,7 +631,6 @@ srs_error_t SrsMpegtsSrtConn::do_playing()
|
|||
}
|
||||
|
||||
int nb_packets = 0;
|
||||
srs_utime_t timeout = config_->get_srto_peeridletimeout();
|
||||
|
||||
while (true) {
|
||||
// Check recv thread error first, so we can detect the client disconnecting event.
|
||||
|
|
|
|||
|
|
@ -9,6 +9,6 @@
|
|||
|
||||
#define VERSION_MAJOR 7
|
||||
#define VERSION_MINOR 0
|
||||
#define VERSION_REVISION 133
|
||||
#define VERSION_REVISION 134
|
||||
|
||||
#endif
|
||||
|
|
@ -386,17 +386,17 @@
|
|||
|
||||
/**************************************************/
|
||||
/* SRT protocol error. */
|
||||
#define SRS_ERRNO_MAP_SRT(XX) \
|
||||
XX(ERROR_SRT_EPOLL, 6000, "SrtEpoll", "SRT epoll operation failed") \
|
||||
XX(ERROR_SRT_IO, 6001, "SrtIo", "SRT read or write failed") \
|
||||
XX(ERROR_SRT_TIMEOUT, 6002, "SrtTimeout", "SRT connection is timeout") \
|
||||
XX(ERROR_SRT_INTERRUPT, 6003, "SrtInterrupt", "SRT connection is interrupted") \
|
||||
XX(ERROR_SRT_LISTEN, 6004, "SrtListen", "SRT listen failed") \
|
||||
XX(ERROR_SRT_SOCKOPT, 6005, "SrtSetSocket", "SRT set socket option failed") \
|
||||
XX(ERROR_SRT_CONN, 6006, "SrtConnection", "SRT connectin level error") \
|
||||
XX(ERROR_SRT_SOURCE_BUSY, 6007, "SrtStreamBusy", "SRT stream already exists or busy") \
|
||||
XX(ERROR_RTMP_TO_SRT, 6008, "SrtFromRtmp", "Covert RTMP to SRT failed") \
|
||||
XX(ERROR_SRT_STATS, 6009, "SrtStats", "SRT get statistic data failed") \
|
||||
#define SRS_ERRNO_MAP_SRT(XX) \
|
||||
XX(ERROR_SRT_EPOLL, 6000, "SrtEpoll", "SRT epoll operation failed") \
|
||||
XX(ERROR_SRT_IO, 6001, "SrtIo", "SRT read or write failed") \
|
||||
XX(ERROR_SRT_TIMEOUT, 6002, "SrtTimeout", "SRT connection is timeout") \
|
||||
XX(ERROR_SRT_INTERRUPT, 6003, "SrtInterrupt", "SRT connection is interrupted") \
|
||||
XX(ERROR_SRT_LISTEN, 6004, "SrtListen", "SRT listen failed") \
|
||||
XX(ERROR_SRT_SOCKOPT, 6005, "SrtSetSocket", "SRT set socket option failed") \
|
||||
XX(ERROR_SRT_CONN, 6006, "SrtConnection", "SRT connectin level error") \
|
||||
XX(ERROR_SRT_SOURCE_BUSY, 6007, "SrtStreamBusy", "SRT stream already exists or busy") \
|
||||
XX(ERROR_RTMP_TO_SRT, 6008, "SrtFromRtmp", "Covert RTMP to SRT failed") \
|
||||
XX(ERROR_SRT_STATS, 6009, "SrtStats", "SRT get statistic data failed") \
|
||||
XX(ERROR_SRT_TO_RTMP_EMPTY_SPS_PPS, 6010, "SrtToRtmpEmptySpsPps", "SRT to rtmp have empty sps or pps") \
|
||||
XX(ERROR_SRT_SOURCE_DISCONNECTED, 6011, "SrtSourceDisconnected", "SRT source publisher disconnected")
|
||||
|
||||
|
|
|
|||
|
|
@ -3612,3 +3612,57 @@ VOID TEST(ProcessTest, InitializeWithRedirections)
|
|||
// Verify cli_ contains full original command with redirections
|
||||
EXPECT_EQ(process->cli_, "/usr/bin/ffmpeg -i input.flv -c copy 1>stdout.log 2>stderr.log output.flv");
|
||||
}
|
||||
|
||||
// Test SrsSrtSocket::set_recv_timeout and set_send_timeout
|
||||
// @see https://github.com/ossrs/srs/issues/4600
|
||||
VOID TEST(SrtSocketTest, SetRecvSendTimeout)
|
||||
{
|
||||
// Test MockSrtSocket set_recv_timeout and set_send_timeout
|
||||
if (true) {
|
||||
MockSrtSocket mock_socket;
|
||||
|
||||
// Initial values should be 1 second as set in constructor
|
||||
EXPECT_EQ(mock_socket.get_recv_timeout(), 1 * SRS_UTIME_SECONDS);
|
||||
EXPECT_EQ(mock_socket.get_send_timeout(), 1 * SRS_UTIME_SECONDS);
|
||||
|
||||
// Set recv timeout to 10 seconds
|
||||
srs_utime_t timeout = 10 * SRS_UTIME_SECONDS;
|
||||
mock_socket.set_recv_timeout(timeout);
|
||||
EXPECT_EQ(mock_socket.get_recv_timeout(), timeout);
|
||||
EXPECT_EQ(mock_socket.get_send_timeout(), 1 * SRS_UTIME_SECONDS);
|
||||
|
||||
// Set send timeout to 10 seconds
|
||||
mock_socket.set_send_timeout(timeout);
|
||||
EXPECT_EQ(mock_socket.get_recv_timeout(), timeout);
|
||||
EXPECT_EQ(mock_socket.get_send_timeout(), timeout);
|
||||
|
||||
// Set to a different value (60 seconds, like peer_idle_timeout)
|
||||
timeout = 60 * SRS_UTIME_SECONDS;
|
||||
mock_socket.set_recv_timeout(timeout);
|
||||
mock_socket.set_send_timeout(timeout);
|
||||
EXPECT_EQ(mock_socket.get_recv_timeout(), timeout);
|
||||
EXPECT_EQ(mock_socket.get_send_timeout(), timeout);
|
||||
}
|
||||
|
||||
// Test individual set methods work independently
|
||||
if (true) {
|
||||
MockSrtSocket mock_socket;
|
||||
|
||||
// Set recv timeout only
|
||||
mock_socket.set_recv_timeout(5 * SRS_UTIME_SECONDS);
|
||||
EXPECT_EQ(mock_socket.get_recv_timeout(), 5 * SRS_UTIME_SECONDS);
|
||||
EXPECT_EQ(mock_socket.get_send_timeout(), 1 * SRS_UTIME_SECONDS);
|
||||
|
||||
// Set send timeout only
|
||||
mock_socket.set_send_timeout(15 * SRS_UTIME_SECONDS);
|
||||
EXPECT_EQ(mock_socket.get_recv_timeout(), 5 * SRS_UTIME_SECONDS);
|
||||
EXPECT_EQ(mock_socket.get_send_timeout(), 15 * SRS_UTIME_SECONDS);
|
||||
|
||||
// Set both to same value (simulating peer_idle_timeout usage)
|
||||
srs_utime_t peer_idle_timeout = 30 * SRS_UTIME_SECONDS;
|
||||
mock_socket.set_recv_timeout(peer_idle_timeout);
|
||||
mock_socket.set_send_timeout(peer_idle_timeout);
|
||||
EXPECT_EQ(mock_socket.get_recv_timeout(), peer_idle_timeout);
|
||||
EXPECT_EQ(mock_socket.get_send_timeout(), peer_idle_timeout);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user