Commit Graph

82 Commits

Author SHA1 Message Date
Winlin
3ca4f0a068 AI: Always enable SRT protocol. v7.0.69 (#4460)
Co-authored-by: OSSRS-AI <winlinam@gmail.com>
2025-08-31 17:30:19 -04:00
Winlin
7a927c5bae AI: Remove cloud CLS and APM. v7.0.66 (#4456)
Co-authored-by: chundonglinlin <chundonglinlin@163.com>
Co-authored-by: OSSRS-AI <winlinam@gmail.com>
2025-08-28 10:37:57 -04:00
Winlin
6ec97067de AI: Remove cygwin64, always enable WebRTC, and enforce C++98 compatibility. v7.0.60 (#4447)
This PR makes WebRTC a core feature of SRS and enforces C++98
compatibility by:

1. Always Enable WebRTC Support
- Remove `--rtc=on|off` configuration option - WebRTC is now always
enabled
- Eliminate all `#ifdef SRS_RTC` conditional compilation blocks
- Include WebRTC-related modules (RTC, SRTP, DTLS) in all builds
- Update build scripts to always link WebRTC dependencies

2. Enforce C++98 Compatibility  
- Remove `--cxx11=on|off` and `--cxx14=on|off` configuration options
- Force `SRS_CXX11=NO` and `SRS_CXX14=NO` in build system
- Move these options to deprecated section with warnings
- Ensure codebase maintains C++98 standard compatibility

3. Remove Windows/Cygwin Support
- Remove all Windows and Cygwin64 conditional compilation blocks (#ifdef
_WIN32, #ifdef CYGWIN64)
- Delete Cygwin64 build configurations from build scripts (
auto/options.sh, auto/depends.sh, configure)
- Remove Cygwin64 assembly files and State Threads platform support (
md_cygwin64.S)
- Eliminate Windows-specific GitHub Actions workflows and CI/CD jobs
- Remove NSIS packaging files and Windows installer generation
- Delete Windows documentation and update feature lists to mark support
as removed in v7.0
- Simplify OS detection to only support Unix-like systems (Linux, macOS)

4. Code Cleanup
- Remove conditional WebRTC code blocks throughout the codebase
- Simplify build configuration by removing WebRTC-related conditionals
- Update constructor delegation patterns to be C++98 compatible
- Fix vector initialization to use C++98 syntax
- Eliminate Windows-specific implementations for file operations, time
handling, and networking
- Unified platform handling with consistent POSIX API usage

---------

Co-authored-by: OSSRS-AI <winlinam@gmail.com>
2025-08-21 10:03:38 -06:00
Haibo Chen(陈海博)
5dc292ce64 NEW PROTOCOL: Support viewing stream over RTSP. v7.0.47 (#4333)
## Introduce

This PR adds support for viewing streams via the RTSP protocol. Note
that it only supports viewing streams, not publishing streams via RTSP.

Currently, only publishing via RTMP is supported, which is then
converted to RTSP. Further work is needed to support publishing RTC/SRT
streams and converting them to RTSP.

## Usage

Build and run SRS with RTSP support:

```
cd srs/trunk && ./configure --rtsp=on && make -j16
./objs/srs -c conf/rtsp.conf
```

Push stream via RTMP by FFmpeg:

```
ffmpeg -re -i doc/source.flv -c copy -f flv rtmp://localhost/live/livestream
```

View the stream via RTSP protocol, try UDP first, then use TCP:

```
ffplay -i rtsp://localhost:8554/live/livestream
```

Or specify the transport protocol with TCP:

```
ffplay -rtsp_transport tcp -i rtsp://localhost:8554/live/livestream
```

## Unit Test

Run utest for RTSP:

```
./configure --utest=on & make utest -j16
./objs/srs_utest
```

## Regression Test

You need to start SRS for regression testing.

```
./objs/srs -c conf/regression-test-for-clion.conf
```

Then run regression tests for RTSP.

```
cd srs/trunk/3rdparty/srs-bench
go test ./srs -mod=vendor -v -count=1 -run=TestRtmpPublish_RtspPlay
```

## Blackbox Test

For blackbox testing, SRS will be started by utest, so there is no need
to start SRS manually.

```
cd srs/trunk/3rdparty/srs-bench
go test ./blackbox -mod=vendor -v -count=1 -run=TestFast_RtmpPublish_RtspPlay_Basic
```

## UDP Transport

As UDP requires port allocation, this PR doesn't support delivering
media stream via UDP transport, so it will fail if you try to use UDP as
transport:

```
ffplay -rtsp_transport udp -i rtsp://localhost:8554/live/livestream

[rtsp @ 0x7fbc99a14880] method SETUP failed: 461 Unsupported Transport
rtsp://localhost:8554/live/livestream: Protocol not supported

[2025-07-05 21:30:52.738][WARN][14916][7d7gf623][35] RTSP: setup failed: code=2057
(RtspTransportNotSupported) : UDP transport not supported, only TCP/interleaved mode is supported
```

There are no plans to support UDP transport for RTSP. In the real world,
UDP is rarely used; the vast majority of RTSP traffic uses TCP.

## Play Before Publish

RTSP supports audio with AAC and OPUS codecs, which is significantly
different from RTMP or WebRTC.

RTSP uses commands to exchange SDP and specify the audio track to play,
unlike WHEP or HTTP-FLV, which use the query string of the URL. RTSP
depends on the player’s behavior, making it very difficult to use and
describe.

Considering the feature that allows playing the stream before publishing
it, it requires generating some default parameters in the SDP. For OPUS,
the sample rate is 48 kHz with 2 channels, while AAC is more complex,
especially regarding the sample rate, which may be 44.1 kHz, 32 kHz, or
48 kHz.

Therefore, for RTSP, we cannot support play-then-publish. Instead, there
must already be a stream when playing it, so that the audio codec is
determined.

## Opus Codec

No Opus codec support for RTSP, because for RTC2RTSP, it always converts
RTC to RTMP frames, then converts them to RTSP packets. Therefore, the
audio codec is always AAC after converting RTC to RTMP.

This means the bridge architecture needs some changes. We need a new
bridge that binds to the target protocol. For example, RTC2RTMP converts
the audio codec, but RTC2RTSP keeps the original audio codec.

Furthermore, the RTC2RTMP bridge should also support bypassing the Opus
codec if we use enhanced-RTMP, which supports the Opus audio codec. I
think it should be configurable to either transcode or bypass the audio
codec. However, this is not relevant to RTSP.

## AI Contributor

Below commits are contributed by AI:

* [AI: Remove support for media transport via
UDP.](755686229f)
* [AI: Add crutial logs for each RTSP
stage.](9c8cbe7bde)
* [AI: Support AAC doec for
RTSP.](7d7cc12bae)
* [AI: Add option --rtsp for
RTSP.](f67414d9ee)
* [AI: Extract SrsRtpVideoBuilder for RTC and
RTSP.](562e76b904)

---------

Co-authored-by: Jacob Su <suzp1984@gmail.com>
Co-authored-by: winlin <winlinvip@gmail.com>
2025-07-11 08:18:40 -04:00
Winlin
b2a827f8cf Refine code and add tests for #4289. v7.0.45 (#4412)
Use AI to understand, add comments, add utests, refactor code for PR
#4289
2025-07-04 17:26:12 -04:00
winlin
dcde554907 Debugging: Drop the specified N original SRTP packet for testing NACK. 2025-06-15 10:01:08 -04:00
Winlin
f8319d6b6d Fix crash when quiting. v6.0.151 v7.0.10 (#4157)
1. Remove the srs_global_dispose, which causes the crash when still
publishing when quit.
2. Always call _srs_thread_pool->initialize for single thread.
3. Support `--signal-api` to send signal by HTTP API, because CLion
eliminate the signals.

---

Co-authored-by: Jacob Su <suzp1984@gmail.com>
2024-08-24 22:40:39 +08:00
Winlin
0d76081430 API: Support new HTTP API for VALGRIND. v6.0.149 v7.0.6 (#4150)
New features for valgrind:

1. ST: Support /api/v1/valgrind for leaking check.
2. ST: Support /api/v1/valgrind?check=full|added|changed|new|quick

To use Valgrind to detect memory leaks in SRS, even though Valgrind
hooks are supported in ST, there are still many false positives. A more
reasonable approach is to have Valgrind report incremental memory leaks.
This way, global and static variables can be avoided, and detection can
be achieved without exiting the program. Follow these steps:

1. Compile SRS with Valgrind support: `./configure --valgrind=on &&
make`
2. Start SRS with memory leak detection enabled: `valgrind
--leak-check=full ./objs/srs -c conf/console.conf`
3. Trigger memory detection by using curl to access the API and generate
calibration data. There will still be many false positives, but these
can be ignored: `curl http://127.0.0.1:1985/api/v1/valgrind?check=added`
4. Perform load testing or test the suspected leaking functionality,
such as RTMP streaming: `ffmpeg -re -i doc/source.flv -c copy -f flv
rtmp://127.0.0.1/live/livestream`
5. Stop streaming and wait for SRS to clean up the Source memory,
approximately 30 seconds.
6. Perform incremental memory leak detection. The reported leaks will be
very accurate at this point: `curl
http://127.0.0.1:1985/api/v1/valgrind?check=added`

> Note: To avoid interference from the HTTP request itself on Valgrind,
SRS uses a separate coroutine to perform periodic checks. Therefore,
after accessing the API, you may need to wait a few seconds for the
detection to be triggered.

---------

Co-authored-by: Jacob Su <suzp1984@gmail.com>
2024-08-21 15:39:01 +08:00
winlin
3c6ade8721 SRS5: FFmpeg: Support build with FFmpeg native opus. v5.0.131 (#3140)
PICK a27ce1d50f
2023-01-06 17:46:37 +08:00
winlin
6ad7787c14 Asan: Refine asan warning message for macOS.
PICK 7bdb7270cf
2022-12-31 21:20:51 +08:00
winlin
e6c395e473 Merge branch v5.0.105 into develop.
* v5.0, 2022-12-04, Cygwin: Enable gb28181 for Windows. v5.0.105
* v5.0, 2022-12-04, Asan: Set asan loging callback. v5.0.104
2022-12-04 22:39:30 +08:00
chengh
8be4c8e334 Asan: Set asan loging callback. v5.0.104 2022-12-04 22:24:37 +08:00
winlin
5999e446de Merge branch v5.0.103 into develop
1. GB28181: Enable GB for CentOS 7 package. v5.0.103
2. Package script support extra options. v5.0.102
3. Disable CLS and APM by default. v5.0.101
2022-12-03 21:15:22 +08:00
winlin
e86e0c8999 Disable CLS and APM by default. v5.0.101 2022-12-03 18:35:41 +08:00
Winlin
178e40a5fc H265: Support HEVC over RTMP or HTTP-FLV. (#3272)
1. Support configure with --h265=on.
2. Parse HEVC(H.265) from FLV or RTMP packet.
3. Support HEVC over RTMP or HTTP-FLV.

Co-authored-by: runner365 <shi.weibd@hotmail.com>
2022-11-23 08:34:13 +08:00
Winlin
d741f81110 For #2532: Windows: Support CYGWIN64 for SRS (#3255)
1. Support cygwin by '--cygwin64=on'
2. Detect cygwin automatically.
3. Disalbe sanitizer, srt and srtp with openssl.
4. Disable multiple threads, use single threads.
5. Support utest for cygwin64.
6. Query features for windows by API.
7. Disable stat APIs for cygwin.
8. Use ST select event driver.

Co-authored-by: wenjie.zhao <740936897@qq.com>
2022-11-20 12:29:57 +08:00
winlin
3d0dcb2a17 Windows: Support run in single thread mode. 2022-11-19 12:11:03 +08:00
wenjie.zhao
e9503a9c9a For #2532: Windows: Replace ln by cp for windows. v5.0.87 (#3246)
1. Replase ln by cp for windows.
2. Refine OS and CPU arch detecting.
3. Support configure from any directory by `SRS_WORKDIR`.
4. Support output to any directory by `SRS_OUTPUT`.
5. Disable sanitizer for gperf.
6. Use parallels build for make.
7. Refine bash variable check.
2022-11-18 23:02:38 +08:00
Winlin
2d1ba46e37 Fix #3218: Log: Follow Java/log4j log level specs. v5.0.83 (#3219)
1. Support Java/log4j log level text.
2. Support configuring by `--log-new-level=on` which is enabled by default.
3. Support `--log-new-level=off` to use SRS 4.0 log level for compatibility.
2022-10-26 21:23:03 +08:00
winlin
e10fa6dc91 Kernel: Support grab backtrace stack when assert fail. v5.0.80 2022-10-21 23:37:30 +08:00
Winlin
5a420ece3b GB28181: Support GB28181-2016 protocol. v5.0.74 (#3201)
01. Support GB config as StreamCaster.
02. Support disable GB by --gb28181=off.
03. Add utests for SIP examples.
04. Wireshark plugin to decode TCP/9000 as rtp.rfc4571
05. Support MPEGPS program stream codec.
06. Add utest for PS stream codec.
07. Decode MPEGPS packet stream.
08. Carry RTP and PS packet as helper in PS message.
09. Support recover from error mode.
10. Support process by a pack of PS/TS messages.
11. Add statistic for recovered and msgs dropped.
12. Recover from err position fastly.
13. Define state machine for GB session.
14. Bind context to GB session.
15. Re-invite when media disconnected.
16. Update GitHub actions with GB28181.
17. Support parse CANDIDATE by env or pip.
18. Support mux GB28181 to RTMP.
19. Support regression test by srs-bench.
2022-10-06 17:40:58 +08:00
winlin
93aa0eb5ba Squash: Fix bugs 2022-01-13 18:26:28 +08:00
winlin
69faf06f0f API: For #2508, query feature docker and packager. 2021-08-07 21:35:00 +08:00
winlin
12ba584ea3 Fix build failed 2021-07-09 09:00:35 +08:00
Winlin
c8a1e0f3da Refine AUTHORS.txt to AUTHORS.md, etc. 5.0.8 (#2464)
* Refine AUTHORS.txt to AUTHORS.md, etc. 5.0.8

* Update README.md

* Update README.md

* Refine format for AUTHORS.md
2021-07-08 14:30:47 +08:00
winlin
9f5d011687 Squash: Fix build fail for arm/aarch64 2021-06-30 10:28:23 +08:00
winlin
efdbf37255 Squash: Move GB28181 to feature/gb28181. 5.0.4 2021-06-16 14:03:55 +08:00
winlin
6dc8d9dd6f SquashSRS4: Remove srs-librtmp 2021-05-20 20:07:13 +08:00
winlin
4ef1acb700 Remove dead code: memory watch 2021-02-15 19:33:40 +08:00
winlin
25be6d6bc0 Support to disable stats by default 2021-02-15 13:09:13 +08:00
winlin
1371a47962 Refine options with default value 2021-01-18 17:28:51 +08:00
winlin
d552a1a5fb For #1657, support HTTPS client, for http-callback. 4.0.45 2020-11-03 15:45:52 +08:00
winlin
4984bcbaef Revert "supprot LAS(live adaptive stream)"
This reverts commit c1f98ddcc8.
2020-08-06 12:02:32 +08:00
liulichuan
c1f98ddcc8 supprot LAS(live adaptive stream)
Change-Id: I2f9fd889fc924a3b080667bd2114f4632be461a0
2020-07-03 11:18:10 +08:00
winlin
be5d76009e RTC: Support build without RTMP2RTC bridger, no FFmpeg fit. 2020-06-24 12:44:13 +08:00
莫战
db8d91cbee add c++14 support 2020-06-11 18:15:45 +08:00
winlin
6e04c66402 Support enable C++11. 4.0.29 2020-06-03 19:18:41 +08:00
winlin
a3388bf624 RTC: Remove export srs-librtmp support 2020-05-27 14:20:40 +08:00
winlin
01f05f920f RTC: Remove sendmmsg 2020-05-21 16:52:25 +08:00
winlin
db503975fb Disable simulator API by default. 2020-05-07 16:29:11 +08:00
winlin
2a0562da5e Refine RTC, disable NASM, SENDMMSG, SRTP-NASM 2020-05-03 11:14:11 +08:00
winlin
ed338f4c0a Refactor macro SRS_AUTO_XXX to SRS_XXX. 2020-04-29 20:02:28 +08:00
winlin
a80084289b Support debug 2020-04-14 20:12:33 +08:00
winlin
b8db61bd9c For #307, Support disable sendmmsg 2020-04-05 22:13:49 +08:00
winlin
dc3df926eb For #307, support configure with sendmmsg. 2020-04-05 18:34:57 +08:00
winlin
608f3d0fae For #1500, support push stream by GB28181. 4.0.18 2020-03-31 23:06:07 +08:00
winlin
c2b02f86fa Merge 4.0release 2020-03-28 17:46:47 +08:00
winlin
217b8b94b6 Merge 3.0release 2020-03-28 17:45:14 +08:00
winlin
c339542ce0 Support macOS OSX 2020-03-28 17:20:40 +08:00
winlin
602a478e1b For #1659, #307, add switch to disable rtc 2020-03-22 18:17:05 +08:00