Commit Graph

102 Commits

Author SHA1 Message Date
Winlin
2384f3fb06
AI: Fix naming problem for app module. v7.0.85 (#4485)
Co-authored-by: OSSRS-AI <winlinam@gmail.com>
2025-09-12 19:44:43 -04:00
Winlin
1fa2cba7c0
Organize utility functions to kernel. v7.0.65 (#4455) 2025-08-27 21:35:58 -04: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
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
Winlin
740f0d38ec
Edge: Fix flv edge crash when http unmount. v6.0.154 v7.0.13 (#4166)
Edge FLV is not working because it is stuck in an infinite loop waiting.
Previously, there was no need to wait for exit since resources were not
being cleaned up. Now, since resources need to be cleaned up, it must
wait for all active connections to exit, which causes this issue.

To reproduce the issue, start SRS edge, run the bellow command and press
`CTRL+C` to stop the request:

```bash
curl http://localhost:8080/live/livestream.flv -v >/dev/null
```

It will cause edge to fetch stream from origin, and free the consumer
when client quit. When `SrsLiveStream::do_serve_http` return, it will
free the consumer:

```cpp
srs_error_t SrsLiveStream::do_serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) {
    SrsUniquePtr<SrsLiveConsumer> consumer(consumer_raw);
```

Keep in mind that in this moment, the stream is alive, because only set
to not alive after this function return:

```cpp
    alive_viewers_++;
    err = do_serve_http(w, r); // Free 'this' alive stream.
    alive_viewers_--; // Crash here, because 'this' is freed.
```

When freeing the consumer, it will cause the source to unpublish and
attempt to free the HTTP handler, which ultimately waits for the stream
not to be alive:

```cpp
SrsLiveConsumer::~SrsLiveConsumer() {
    source_->on_consumer_destroy(this);

void SrsLiveSource::on_consumer_destroy(SrsLiveConsumer* consumer) {
    if (consumers.empty()) {
        play_edge->on_all_client_stop();

void SrsLiveSource::on_unpublish() {
    handler->on_unpublish(req);

void SrsHttpStreamServer::http_unmount(SrsRequest* r) {
    if (stream->entry) stream->entry->enabled = false;

    for (; i < 1024; i++) {
        if (!cache->alive() && !stream->alive()) {
            break;
        }
        srs_usleep(100 * SRS_UTIME_MILLISECONDS);
    }
```

After 120 seconds, it will free the stream and cause SRS to crash
because the stream is still active. In order to track this potential
issue, also add an important warning log:

```cpp
srs_warn("http: try to free a alive stream, cache=%d, stream=%d", cache->alive(), stream->alive());
```

SRS may crash if got this log.

---------

Co-authored-by: Jacob Su <suzp1984@gmail.com>
2024-09-01 06:44:35 +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
Winlin
6a4ace900d
Support FFmpeg timecode, fix AMF0 parsing failed. v5.0.179 v6.0.77 (#3804)
Please see https://github.com/ossrs/srs/issues/3803 for detail:

1. When using FFmpeg with the `-map 0` option, there may be a 4-byte
timecode in the AMF0 Data.
2. SRS should be able to handle this packet without causing a parsing
error, as it's generally expected to be an AMF0 string, not a 4-byte
timecode.
3. Disregard the timecode since SRS doesn't utilize it.

See [Error submitting a packet to the muxer: Broken pipe, Error muxing a
packet](https://trac.ffmpeg.org/ticket/10565)

---------

Co-authored-by: john <hondaxiao@tencent.com>
2023-09-18 13:48:07 +08:00
winlin
c46ef81ff2 SRS5: Update license date to 2023. v5.0.123
PICK 72f8ed4916
2023-01-01 08:56:20 +08:00
winlin
5d48c9ce1b Refine code to allow search for conflicts. 2022-12-25 16:26:15 +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
mapengfei53
eb04f92176
Config: Support overwrote by environment variables. (#3197)
* Support overwrite by environment virable.

* modify duplicated code

* Config: Add stat for envrionment config.

* Config: Fix utest fail.

Co-authored-by: pengfei.ma <pengfei.ma@ctechm.com>
Co-authored-by: winlin <winlin@vip.126.com>
2022-10-03 13:00:12 +08:00
winlin
d117145b95 Update date from 2021 to 2022. 2022-06-20 19:22:25 +08:00
winlin
665ad564fb Rename service to protocol files. 2022-06-09 19:59:51 +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
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
8b74c7cb89 SquashSRS4: Happy 2021 2021-04-16 09:29:43 +08:00
winlin
3a7c742f07 RTC: Stat the drop of UDP packets. 2021-02-24 18:53:49 +08:00
winlin
77b6151857 RTC: Use srs_string_dumps_hex to dump some bytes when error 2020-08-05 16:23:31 +08:00
winlin
81a7c252d6 TCP: Log the remote port for client. 2020-07-04 17:19:08 +08:00
winlin
2f0b150588 For #1638, #307, accept srs_string_dumps_hex to app utility. 2020-03-16 18:05:42 +08:00
winlin
51af2b4779 For #1638, #307, rtc conf support ENV. 2020-03-14 17:15:46 +08:00
HuyaJohn
da72caf8b9 h264 packet done, chrome play well 2020-03-11 04:21:44 -07:00
winlin
10464a5fbe Always use string instance to avoid crash risk. 3.0.95 2020-01-05 22:17:15 +08:00
winlin
d783a12f89 Happy 2020 2019-12-30 10:10:35 +08:00
winlin
2115d5d22a For #1488, add test and improve coverage for parsing client ip. 2019-12-26 12:07:52 +08:00
winlin
316cab794a For #1488, pass client ip to http callback.3.0.85 2019-12-26 11:42:19 +08:00
winlin
d367730883 For #1488, support parsing original ip from header for proxy 2019-12-26 11:33:26 +08:00
winlin
4382ced3bf For #1508, Refactor srs_is_digital, support all zeros. 2019-12-20 14:49:25 +08:00
winlin
5d8fb01b45 Fix #1352, fix typo of daemon. 2019-05-07 07:46:20 +08:00
winlin
aac8a13f42 Refine typo in app. 2019-04-28 09:08:05 +08:00
winlin
b2d1d84634 Change to 2019 2019-01-01 21:37:28 +08:00
winlin
ca1395a807 Change date from 2017 to 2018 2018-01-07 10:58:53 +08:00
winlin
922a8f3a5c For #988, refine code. 2018-01-01 22:45:22 +08:00
Thomas Dreibholz
feaae341b9 IPv6 support (for 3.0 release) (#988)
* IPv6 support, part 1.

* IPv6 support, part 2.

* Some more IPv6 work.

* Made functions for address:port paŕsing IPv6-capable.

* Fixed type (compile warning).

* Fixed formatting.

* Reverted option change.

* Replaced abort() by proper error handling.

* Also retrieving local IPv6 addresses now.
2018-01-01 22:43:58 +08:00
winlin
6eae93258a For #913, APP support complex error. 2018-01-01 19:39:57 +08:00
winlin
e3526c0cf6 For #820, modules use service only. 2017-03-26 13:40:39 +08:00
winlin
ff822b55cd For #820, extract service module. 2017-03-26 10:16:21 +08:00
winlin
0a57a46016 Refine LICENSE 2017-03-25 21:29:29 +08:00
winlin
f32aab3d92 For #299, refine code. 2017-03-25 17:21:39 +08:00
winlin
b16ab038ce for #742, refine the u_intxx_t to uintxx_t 2017-01-30 17:32:18 +08:00
winlin
3fe338d1c5 for #742, use ms for application clock tbn. 2017-01-17 12:25:30 +08:00
winlin
7ac932cfa0 update to 2013-2017 2016-12-16 11:57:25 +08:00
winlin
28080efec8 fix http reader bug, support infinite chunkted. 2.0.209 2016-01-13 12:44:51 +08:00
winlin
f971538cf3 refine http, support no host. 2016-01-12 11:53:52 +08:00
winlin
f1e7e9d933 support gmd. change work_dir. hourglass. add utilies. 2016-01-08 13:58:19 +08:00
winlin
d0c74fa7cd update 2015 to 2016 2015-12-23 11:35:40 +08:00
winlin
ffef3905af merge from srs2. 2015-12-11 11:35:56 +08:00
winlin
2830ee12c1 fix the on_hls.ts_url bug. 2015-12-11 11:29:10 +08:00