Commit Graph

163 Commits

Author SHA1 Message Date
OSSRS-AI
3948f0d4fe AI: Add utest to cover app http module. 2025-10-05 21:55:49 -04:00
winlin
49594b1846 Update stable version to SRS 6.0 2025-09-15 11:23:02 -04:00
Winlin
8f87d4092b
AI: Fix naming problem in kernel module. v7.0.82 (#4479)
Co-authored-by: OSSRS-AI <winlinam@gmail.com>
2025-09-07 21:09:08 -04:00
Winlin
3e8cb3f9d5
AI: Replace SrsSharedPtrMessage with SrsMediaPacket for unified media packet handling. v7.0.74 (#4465)
This PR introduces a major refactoring to replace `SrsSharedPtrMessage`
with `SrsMediaPacket` throughout the SRS codebase, providing a more
unified and cleaner approach to media packet handling.

---------

Co-authored-by: OSSRS-AI <winlinam@gmail.com>
2025-09-01 18:06:24 -04:00
Winlin
1fa2cba7c0
Organize utility functions to kernel. v7.0.65 (#4455) 2025-08-27 21:35:58 -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
Winlin
6e1134fe9b
Use clang format. v7.0.52 (#4433)
---------

Co-authored-by: ChenGH <chengh_math@126.com>
2025-08-11 23:19:19 -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
Haibo Chen(陈海博)
cbc98dc0d9
rtc2rtmp: Support RTC-to-RTMP remuxing with HEVC. v7.0.43 (#4349)
**Introduce**

This pull request builds upon the foundation laid in
https://github.com/ossrs/srs/pull/4289 . While the previous work solely
implemented unidirectional HEVC support from RTMP to RTC, this
submission further enhances it by introducing support for the RTC to
RTMP direction.

**Usage**

Launch SRS with `rtc2rtmp.conf`

```bash
./objs/srs -c conf/rtc2rtmp.conf
```

**Push with WebRTC**

Upgrade browser to Chrome(136+) or Safari(18+), then open [WHIP
encoder](http://localhost:8080/players/whip.html?schema=http&&codec=hevc),
push stream with URL that enables HEVC by query string `codec=hevc`:

```bash
http://localhost:1985/rtc/v1/whip/?app=live&stream=livestream&codec=hevc
```

This query string `codec=hevc` is used to select the video codec, and
generate lines in the answer SDP.

```
m=video 9 UDP/TLS/RTP/SAVPF 49 123
a=rtpmap:49 H265/90000
```

The encoder log also show the codec:

```
Audio: opus, 48000HZ, channels: 2, pt: 111
Video: H265, 90000HZ, pt: 49
```

**Play with RTMP**

Play HEVC stream via RTMP.

```bash
ffplay -i rtmp://localhost/live/livestream
```

You will see the codec in logs:

```
  Stream #0:0: Audio: aac (LC), 48000 Hz, stereo, fltp
  Stream #0:1: Video: hevc (Main), yuv420p(tv, bt709), 320x240, 30 fps, 30 tbr, 1k tbn
```

You can also use [WHEP
player](http://localhost:8080/players/whep.html?schema=http&&codec=hevc)
to play the stream.

Important refactor with AI:

* [AI: Refactor packet cache for RTC frame
builder.](b8ffa1630e)
* [AI: Refactor the packet copy and free for
SrsRtcFrameBuilder](f3487b45d7)
* [AI: Refactor the frame detector for
SrsRtcFrameBuilder](4ffc1526b9)
* [AI: Refactor the packet_video_rtmp for
SrsRtcFrameBuilder](81f6aef4ed)
* [AI: Add utests for
SrsCodecPayload.codec](61eb1c0bfc)
* [AI: Add utests for VideoPacketCache in
SrsRtcFrameBuilder.](fd25480dfa)
* [AI: Add utests for VideoFrameDetector in
SrsRtcFrameBuilder.](b4aa977bbd)
* [AI: Add regression test for RTC2RTMP with
HEVC.](5259a2aac3)

---------

Co-authored-by: Jacob Su <suzp1984@gmail.com>
Co-authored-by: winlin <winlinvip@gmail.com>
2025-07-03 08:24:42 -04:00
ChenGH
13597d1b7f
update copyright to 2025. v5.0.218 v6.0.159 v7.0.21 (#4271)
update copyright to 2025

---------

Co-authored-by: john <hondaxiao@tencent.com>
Co-authored-by: winlin <winlinvip@gmail.com>
2025-01-14 17:35:18 +08:00
Jacob Su
eb788a62ad
HTTP-TS: Support guess_has_av for audio only stream. v6.0.141 (#4063)
## Describe ##
http_remux feature support config `has_audio`, `has_video` &
`guess_has_av` prop.


282d94d7bb/trunk/src/app/srs_app_http_stream.cpp (L630-L632)

Take `http_flv` as example, `srs` can accept both RTMP streams with only
audio, only video or both audio and video streams. It is controlled by
above three properties.

But `guess_has_av` is not implemented by `http_ts`. The problem is that
if I want publish a RTMP stream with audio or video track, the
`has_audio` and `has_video`, which are default true/on, must to be
config to match the RTMP stream, otherwise the `mpegts.js` player can't
play the `http-ts` stream.

## How to reproduce  ##

1. `export SRS_VHOST_HTTP_REMUX_HAS_AUDIO=on; export
SRS_VHOST_HTTP_REMUX_HAS_VIDEO=on; export
SRS_VHOST_HTTP_REMUX_GUESS_HAS_AV=on; ./objs/srs -c
conf/http.ts.live.conf`
2. publish rtmp stream without video: `ffmpeg -re -stream_loop -1 -i
srs/trunk/doc/source.200kbps.768x320.flv -vn -acodec copy -f flv
rtmp://localhost/live/livestream`
3. open chrome browser, open
`http://localhost:8080/players/srs_player.html?schema=http`, go to
`LivePlayer`, input URL: `http://localhost:8080/live/livestream.ts`,
click play.
4. the `http://localhost:8080/live/livestream.ts` can not play.

## Solution ##

Let `http-ts` support `guess_has_av`, `http-flv` already supported. The
`guess_has_av` default value is ture/on, so the `http-ts|flv` can play
any streams with audio, video or both.

---------

Co-authored-by: Winlin <winlinvip@gmail.com>
2024-07-24 11:00:18 +08:00
Winlin
23d2602c34
UniquePtr: Support SrsUniquePtr to replace SrsAutoFree. v6.0.136 (#4109)
To manage an object:

```cpp
// Before
MyClass* ptr = new MyClass();
SrsAutoFree(MyClass, ptr);
ptr->do_something();

// Now
SrsUniquePtr<MyClass> ptr(new MyClass());
ptr->do_something();
```

To manage an array of objects:

```cpp
// Before
char* ptr = new char[10];
SrsAutoFreeA(char, ptr);
ptr[0] = 0xf;

// Now
SrsUniquePtr<char[]> ptr(new char[10]);
ptr[0] = 0xf;
```

In fact, SrsUniquePtr is a limited subset of SrsAutoFree, mainly
managing pointers and arrays. SrsUniquePtr is better than SrsAutoFree
because it has the same API to standard unique ptr.

```cpp
SrsUniquePtr<MyClass> ptr(new MyClass());
ptr->do_something();
MyClass* p = ptr.get();
```

SrsAutoFree actually uses a pointer to a pointer, so it can be set to
NULL, allowing the pointer's value to be changed later (this usage is
different from SrsUniquePtr).

```cpp
// OK to free ptr correctly.
MyClass* ptr;
SrsAutoFree(MyClass, ptr);
ptr = new MyClass();

// Crash because ptr is an invalid pointer.
MyClass* ptr;
SrsUniquePtr<MyClass> ptr(ptr);
ptr = new MyClass();
```

Additionally, SrsAutoFreeH can use specific release functions, which
SrsUniquePtr does not support.

---------

Co-authored-by: Jacob Su <suzp1984@gmail.com>
2024-07-09 10:29:36 +08:00
winlin
2a2da2253f Switch to 2013-2024. v6.0.109 2024-01-01 10:51:24 +08:00
winlin
29eff1a242 Refine LICENSE. 2023-10-23 14:33:19 +08:00
qyt
4362df743b Bugfix: HEVC SRT stream supports multiple PPS fields. v6.0.76 (#3722)
When the srs have multiple pps in hevc.the srs can't parse for this.
problem fixed this #3604

---------

Co-authored-by: chundonglinlin <chundonglinlin@163.com>
Co-authored-by: john <hondaxiao@tencent.com>
2023-09-18 10:58:05 +08:00
Haibo Chen
4a5f479a0c
GB: Support H.265 for GB28181 (#3408)
Co-authored-by: chundonglinlin <chundonglinlin@163.com>
Co-authored-by: stone <bluestn@163.com>
Co-authored-by: Winlin <winlin@vip.126.com>
2023-02-14 14:28:41 +08:00
chundonglinlin
fff8d9863c
H265: Support HEVC over HLS. v6.0.11 (#465) (#3354)
* H265: Support HEVC over HLS.(#465)

* HLS: Support HEVC over HLS. v6.0.11 (#465)

Co-authored-by: winlin <winlin@vip.126.com>
2023-01-02 09:04:50 +08:00
winlin
4bfc4de710 SRS5: MP3: Upgrade mpegts.js to support HTTP-TS with mp3. v5.0.126 (#296)
PICK 02a18b328c
2023-01-01 20:26:44 +08:00
winlin
c46ef81ff2 SRS5: Update license date to 2023. v5.0.123
PICK 72f8ed4916
2023-01-01 08:56:20 +08:00
winlin
d5bf0ba2da TS: Support disable audio or video to make mpegts.js happy. v6.0.9 (#465) (#939) 2022-12-26 19:03:49 +08:00
winlin
4b6f1b0fd6 TS: Fix bug for codec detecting for HTTP-TS. v6.0.8 (#465) 2022-12-26 18:30:12 +08:00
winlin
5d48c9ce1b Refine code to allow search for conflicts. 2022-12-25 16:26:15 +08:00
winlin
b5aaf67c93 Merge branch v5.0.116 into develop
1. MP3: Fix bug for TS or HLS with mp3 codec. v4.0.269 (#296) (#3333)
2. MP3: Add config examples for MP3. #296
3. Script: Refine GitHub actions.
2022-12-25 16:23:23 +08:00
winlin
05d7400cd5 Merge branch v4.0.269 into 5.0release
1. MP3: Fix bug for TS or HLS with mp3 codec. v4.0.269 (#296) (#3333)
2022-12-25 12:10:03 +08:00
Winlin
577cd299e1
MP3: Fix bug for TS or HLS with mp3 codec. v4.0.269 (#296) (#3333)
* MP3: Fix bug for TS or HLS with mp3 codec. v4.0.269 (#296)

1. Refresh HLS audio codec if changed in stream.
2. Refresh TS audio codec if changed in stream.
3. Fix mp3 demux bug in SrsFormat::audio_mp3_demux.
4. Use 3(MPEG1) not 4(MPEG2) as PMT stream type, follow FFmpeg.
5. MP3: Update utest for mp3 sample parsing.
6. MP3: Ignore empty frame sample.
7. UTest: Fix utest failed, do not copy files.
2022-12-25 11:43:26 +08:00
Winlin
476a32d417
Build: Fix build warnings (#3302)
1. Avoid default guess for expression.
2. Force to void* for memset.
2022-12-13 21:03:27 +08:00
Winlin
70d5618979
H265: Support HEVC over HTTP-TS. v6.0.4 (#3275)
1. Update TS video codec to HEVC during streaming.
2. Return error when HEVC is disabled.
3. Parse HEVC NALU type by SrsHevcNaluTypeParse.
4. Show message when codec change for TS.

Co-authored-by: runner365 <shi.weibd@hotmail.com>
2022-11-23 17:05:21 +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
9c81a0e1bd UTest: Fix utest warnings. 2022-10-06 16:09:07 +08:00
winlin
d117145b95 Update date from 2021 to 2022. 2022-06-20 19:22:25 +08:00
winlin
d5c86dc5fa Switch LICENSE from MIT to **MIT or MulanPSL-2.0**. v5.0.21 2022-01-13 18:40:22 +08:00
Haibo Chen
ab988abc59 For #2516, fix codec issue for G.711 or H.263. 4.0.152 2021-08-13 12:08:10 +08:00
Haibo Chen
aad90c7f42
fix coredump bug: caused by publish stream that codec is unsupport, sush as G.711, H.263 (#2526) 2021-08-13 12:05:28 +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
15901cacee SquashSRS4: Use SPDX-License-Identifier: MIT. 5.0.3 2021-05-31 13:42:20 +08:00
winlin
3cd22b6e6e Use SPDX-License-Identifier: MIT. 4.0.124 2021-05-31 12:59:21 +08:00
winlin
6dc8d9dd6f SquashSRS4: Remove srs-librtmp 2021-05-20 20:07:13 +08:00
winlin
af04285baa Tools: Remove srs-librtmp 2021-05-20 18:52:21 +08:00
winlin
8b74c7cb89 SquashSRS4: Happy 2021 2021-04-16 09:29:43 +08:00
winlin
d01e603b25 Happy 2021 2021-04-16 09:25:55 +08:00
winlin
a826926073 SRS: Fix bug 2020-08-21 21:14:18 +08:00
winlin
2b725b8167 Fix bug 2020-08-20 18:46:11 +08:00
winlin
3900179685 For #307, #1070, define FLV CodecID for AV1 and Opus. 3.0.101 2020-01-19 11:22:35 +08:00
winlin
9cb2449175 Fix mp4 url/urn bug. 2019-12-31 15:35:45 +08:00
winlin
d783a12f89 Happy 2020 2019-12-30 10:10:35 +08:00
winlin
e2f86464c5 Ignore some coverage for ts. 2019-12-24 17:29:46 +08:00
winlin
5560b529a7 Remove unused macros in ts. 2019-04-19 08:06:44 +08:00
winlin
a0ba17b397 CI: Cover kernel ts 2019-02-05 16:49:29 +08:00
winlin
073d42ca7d CI: Refine hls ts context writer 2019-02-05 16:26:43 +08:00
winlin
8eccfeceb9 CI: Cover kernel ts 2019-02-05 08:33:29 +08:00