Commit Graph

8892 Commits

Author SHA1 Message Date
vivisoymilkhappy
57c74d1cdb Add ignore configuration for cursor. v7.0.115 (#4547)
Cursor ignored.

---------

Co-authored-by: Haibo Chen <495810242@qq.com>
Co-authored-by: ZhangWei <zhangwei@jlsoft.com>
Co-authored-by: winlin <winlinvip@gmail.com>
2025-10-31 19:11:51 -04:00
winlin
abacd680ba WebRTC: Use realtime for TWCC timestamp accuracy. v7.0.114 2025-10-30 21:37:45 -04:00
OSSRS-AI
8acceb1b1b AI: HLS: Fix crash when segment is not open by adding NULL checks. v7.0.113 (#3431) 2025-10-30 21:37:37 -04:00
OSSRS-AI
91a051b45d AI: AAC: Fix mono audio reported as stereo in HTTP API. v7.0.112 (#3556) 2025-10-29 22:22:02 -04:00
OSSRS-AI
8438c8a799 AI: Improve utest coverage. 2025-10-29 08:09:40 -04:00
OSSRS-AI
75d35b7817 AI: Ignore some code that is no need to cover. 2025-10-28 23:10:31 -04:00
OSSRS-AI
1faadd0c73 AI: Improve utest coverage for HLS. 2025-10-28 20:57:58 -04:00
winlin
758906353c Enable default configure test. 2025-10-28 10:04:53 -04:00
Haibo Chen(陈海博)
ef048b0d65 RTC: Fix DVR missing first 4-6 seconds by initializing rate from SDP (#4541)
for issue #4418, #4151, #4076 .DVR Missing First Few Seconds of
Audio/Video

### Root Cause
When recording WebRTC streams to FLV files using DVR, the first 4-6
seconds of audio/video are missing. This occurs because:

1. **Packets are discarded before A/V sync is available**: The
RTC-to-RTMP conversion pipeline actively discards all RTP packets when
avsync_time <= 0.
2. **Original algorithm requires 2 RTCP SR packets**: The previous
implementation needed to receive two RTCP Sender Report (SR) packets
before it could calculate the rate for audio/video synchronization
timestamp conversion.
3. **Delay causes packet loss**: Since RTCP SR packets typically arrive
every 2-3 seconds, waiting for 2 SRs means 4-6 seconds of packets are
discarded before A/V sync becomes available.
4. **Audio SR arrives slower than video SR**: As reported in the issue,
video RTCP SR packets arrive much faster than audio SR packets. This
asymmetry causes audio packets to be discarded for a longer period,
resulting in the audio loss observed in DVR recordings.

### Solution
1. **Initialize rate from SDP**: Use the sample rate from SDP (Session
Description Protocol) to calculate the initial rate immediately when the
track is created.
Audio (Opus): 48000 Hz → rate = 48 (RTP units per millisecond)
Video (H.264/H.265): 90000 Hz → rate = 90 (RTP units per millisecond)
2. **Enable immediate A/V sync:** With the SDP rate available,
cal_avsync_time() can calculate valid timestamps from the very first RTP
packet, eliminating packet loss.
3. **Smooth transition to precise rate**: After receiving the 2nd RTCP
SR, update to the precisely calculated rate based on actual RTP/NTP
timestamp mapping.

## Configuration

Added new configuration option `init_rate_from_sdp` in the RTC vhost
section:

```nginx
vhost rtc.vhost.srs.com {
    rtc {
        # Whether initialize RTP rate from SDP sample rate for immediate A/V sync.
        # When enabled, the RTP rate (units per millisecond) is initialized from the SDP
        # sample rate (e.g., 90 for video 90kHz, 48 for audio 48kHz) before receiving
        # 2 RTCP SR packets. This allows immediate audio/video synchronization.
        # The rate will be updated to a more precise value after receiving the 2nd SR.
        # Overwrite by env SRS_VHOST_RTC_INIT_RATE_FROM_SDP for all vhosts.
        # Default: off
        init_rate_from_sdp off;
    }
}
```

**⚠️ Important Note**: This config defaults to **off** because:
-  When **enabled**: Fixes the audio loss problem (no missing first 4-6
seconds)
-  When **enabled**: VLC on macOS cannot play the video properly
-  Other platforms work fine (Windows, Linux)
-  FFplay works fine on all platforms

Users experiencing audio loss in DVR recordings can enable this option
if they don't need VLC macOS compatibility. We're investigating the VLC
macOS issue to make this feature safe to enable by default in the
future.

---------

Co-authored-by: winlin <winlinvip@gmail.com>
Co-authored-by: OSSRS-AI <winlinam@gmail.com>
2025-10-28 09:33:40 -04:00
winlin
550760f2d0 HLS/DASH: Fix dispose to skip unpublish when not enabled, and add forbidden directory protection to SrsPath::unlink. v7.0.111 2025-10-27 08:14:48 -04:00
OSSRS-AI
3dc7b405ca AI: HTTP-FLV: Enforce minimum 10ms sleep to prevent CPU busy-wait when mw_latency=0. v7.0.110 (#3963) 2025-10-26 20:17:46 -04:00
OSSRS-AI
547b0c0ed5 AI: Edge: Fix stream names with dots being incorrectly truncated in source URL generation. v7.0.109 (#4011) 2025-10-26 18:44:12 -04:00
OSSRS-AI
19b603a0d7 AI: HTTPS: Handle SSL_ERROR_ZERO_RETURN as graceful connection closure. v7.0.108 (#4036) 2025-10-26 17:45:06 -04:00
OSSRS-AI
5fc1f2d2e5 AI: API: Add clients field to on_play/on_stop webhooks and total field to HTTP API. v7.0.107 (#4147) 2025-10-26 16:28:22 -04:00
winlin
1d9105396d Update guideline for AI about sanitizer. 2025-10-26 16:28:02 -04:00
OSSRS-AI
4ae9871285 AI: Remove deprecated SrsRtcPublisherAsync and SrsRtcPlayerAsync use WHIP/WHEP. 2025-10-26 10:00:05 -04:00
OSSRS-AI
51ab6403a3 AI: WebRTC: Fix camera/microphone not released after closing publisher. v7.0.106 (#4261) 2025-10-26 08:43:53 -04:00
OSSRS-AI
9eae868e91 AI: Build: Improve dependency checking to report all missing dependencies at once. v7.0.105 (#4293) 2025-10-25 22:21:09 -04:00
OSSRS-AI
6590871ca8 AI: HLS: Support hls_master_m3u8_path_relative for reverse proxy compatibility. v7.0.104 (#4338) 2025-10-25 21:10:21 -04:00
OSSRS-AI
b7828e1fba API: Remove minimum limit of 10 for count parameter in /api/v1/streams and /api/v1/clients. v7.0.103 (#4358) 2025-10-25 19:44:03 -04:00
OSSRS-AI
d9ea25b441 AI: Update conf description for multiple ep for callback. #4421 2025-10-24 22:22:14 -04:00
Haibo Chen(陈海博)
8f1578e0e3 Refactor: Rename ide/ directory to cmake/ for better clarity (#4539)
This PR renames the trunk/ide/ directory to trunk/cmake/ to better
reflect its actual purpose. The directory contains CMake build
configuration files used by multiple IDEs (CLion, VSCode), not
IDE-specific files.

* Directory rename: trunk/ide/ → trunk/cmake/
* Build output location: trunk/ide/vscode-build/ → trunk/cmake/build/
* CMakeLists.txt: Moved from trunk/ide/srs_clion/CMakeLists.txt to
trunk/cmake/CMakeLists.txt
2025-10-23 20:38:48 -04:00
OSSRS-AI
2fb216e86d AI: Refine utest file rules. 2025-10-23 09:44:28 -04:00
winlin
2893f43327 Compress guideline for AI. 2025-10-23 07:30:53 -04:00
OSSRS-AI
2810d32d60 AI: Only support AAC/MP3/Opus audio codec. v7.0.102 (#4516) 2025-10-22 22:08:25 -04:00
OSSRS-AI
0c9868b4a2 AI: Fix AAC audio sample rate reporting in API. v7.0.101 (#4518) 2025-10-22 21:28:45 -04:00
winlin
0e28422d12 Update guideline for AI. 2025-10-22 11:46:11 -04:00
OSSRS-AI
8fd92d1598 AI: Add utest to cover forwarding module. #4531 2025-10-21 23:33:29 -04:00
Winlin
845e0287c0 Forward: Reject RTMPS destinations with clear error message. v7.0.100 (#4537)
SRS forward feature only supports plain RTMP protocol, not RTMPS (RTMP over SSL/TLS). This is by design - SRS SSL is server-side only (accepting connections), not client-side (initiating connections). The forward feature uses SrsSimpleRtmpClient which has no SSL handshake or encryption capabilities for outgoing connections.

Changes:
1. Add RTMPS URL detection in SrsForwarder::initialize()
2. Return ERROR_NOT_SUPPORTED error when RTMPS destination is detected
3. Add unit test to verify RTMPS URLs are properly rejected
4. Add FAQ section to .augment-guidelines explaining the limitation

For users who need to forward to RTMPS destinations (e.g., AWS IVS), the recommended solution is to use FFmpeg with SRS HTTP Hooks:
- on_publish event: Automatically start FFmpeg to relay stream to RTMPS destination
- on_unpublish event: Automatically stop FFmpeg process when stream ends

This provides a fully automated, production-ready RTMPS relay solution without adding complexity to SRS core.

Related: #4536

---------

Co-authored-by: OSSRS-AI <winlinam@gmail.com>
2025-10-20 08:03:07 -04:00
OSSRS-AI
4e35b6cacc AI: Add utest to cover signal manager 2025-10-19 22:46:06 -04:00
OSSRS-AI
341c0c000c AI: Add workflow utest for http stream. 2025-10-19 21:55:45 -04:00
OSSRS-AI
ce7ac11eae AI: Add workflow test for HTTP conn 2025-10-19 19:10:52 -04:00
OSSRS-AI
35d0e3d7c7 AI: Add workflow utest for SRT conn 2025-10-19 13:23:20 -04:00
OSSRS-AI
2913d5b827 AI: Refine utests. 2025-10-18 23:12:59 -04:00
OSSRS-AI
f86c1348b1 AI: Add workflow utest for RTMP conn 2025-10-18 22:13:15 -04:00
OSSRS-AI
054d3a3563 AI: Add workflow utest for rtc conn. 2025-10-17 21:55:29 -04:00
OSSRS-AI
8b76e1f6d2 AI: Add workflow utest for rtc publisher 2025-10-17 09:23:47 -04:00
Haibo Chen(陈海博)
0d43ed5dd6 HLS: Fix a iterator bug in hls_ctx cleanup function. v6.0.182 v7.0.99 (#4534)
Co-authored-by: OSSRS-AI <winlinam@gmail.com>
2025-10-17 07:16:42 -04:00
winlin
3f706f9c37 Refine utest mock. 2025-10-16 10:57:31 -04:00
OSSRS-AI
c9fe296342 AI: Add utest to cover 3 streams play stream. 2025-10-16 10:30:05 -04:00
winlin
5cf615f1d4 Update README for v6.0-b2 2025-10-16 10:21:36 -04:00
OSSRS-AI
ed120ba88b AI: Add utest to manually verify rtc play workflow 2025-10-16 10:16:31 -04:00
Haibo Chen(陈海博)
abaffdd4b9 fix crash issue caused by reload configuration file. v7.0.98 (#4530)
fix crash issue caused by reload configuration file, which occurs when a
vhost is added/removed in the new configuration.

Introduced by https://github.com/ossrs/srs/pull/4458

see https://github.com/ossrs/srs/issues/4529
2025-10-16 07:30:16 -04:00
Jack Lau
6f526284a3 RTC2RTMP: fix illegal memory access. v7.0.97 (#4520)
Regression since 20f6cd595c

The early code might meet bridge is empty when
there is no bridge(e.x. rtc to rtc). Then srs_freep will free the brige.

Remove this code that seems redundant.

---------

Co-authored-by: Jacob Su <suzp1984@gmail.com>
Signed-off-by: Jack Lau <jacklau1222@qq.com>
2025-10-15 10:16:03 -04:00
OSSRS-AI
44c3dab79e AI: Add utest to cover heatbeat. 2025-10-15 09:59:45 -04:00
OSSRS-AI
223202f121 AI: Add utest to cover version query 2025-10-15 09:11:04 -04:00
OSSRS-AI
5d01393307 AI: Add utest to cover process module 2025-10-15 07:52:46 -04:00
OSSRS-AI
315ae2cd3a AI: Add utest to cover encoder module. 2025-10-14 22:31:16 -04:00
winlin
1bc18509a2 Disable sanitizer by default to fix memory leak. #4364 v7.0.96 2025-10-14 20:32:37 -04:00
winlin
bf7e93140b Refine access specifier for utest. 2025-10-13 22:26:38 -04:00