Commit Graph

137 Commits (6d38331acbda0d8a3a98c31ca3d6096cd105020c)

Author SHA1 Message Date
jkb3 6d38331acb
Merge a2dd63b678 into 93cba246bc 1 month ago
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>
3 months ago
khjiang a2dd63b678 fix: Problem that the source is regularly cleared before setting the status after the stream publishing completes the create_of_fatch() operation 3 months ago
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>
7 months ago
Winlin 1f9309ae25
SmartPtr: Support load test for source by srs-bench. v6.0.130 (#4097)
1. Add live benchmark support in srs-bench, which only connects and
disconnects without any media transport, to test source creation and
disposal and verify source memory leaks.
2. SmartPtr: Support cleanup of HTTP-FLV stream. Unregister the HTTP-FLV
handler for the pattern and clean up the objects and resources.
3. Support benchmarking RTMP/SRT with srs-bench by integrating the gosrt
and oryx RTMP libraries.
4. Refine SRT and RTC sources by using a timer to clean up the sources,
following the same strategy as the Live source.

---------

Co-authored-by: Haibo Chen <495810242@qq.com>
Co-authored-by: Jacob Su <suzp1984@gmail.com>
9 months ago
Winlin e7069788e9
SmartPtr: Support shared ptr for live source. v6.0.129 (#4089)
Detail change log:

1. [Simple,Refactor] Remove member fields of http entry, etc.
e34b3d3aa4
2. [Ignore] Rename source to live_source.
846f95ec96
3. [Ignore] Use directly ptr in consumer.
d38af021ad
4. [Complex, Important] Use shared ptr for live source.
88f922413a

The object relationship:

![live-source](https://github.com/ossrs/srs/assets/2777660/1adb59af-6e7a-40f3-9a4a-1cc849d7dae1)

---

Co-authored-by: Jacob Su <suzp1984@gmail.com>
10 months ago
Winlin 9dba99a1cc
SmartPtr: Support shared ptr for RTC source. v6.0.128 (#4085)
---------

Co-authored-by: Haibo Chen <495810242@qq.com>
10 months ago
Jacob Su 1656391c67
RTC: Support dropping h.264 SEI from NALUs. v5.0.213 v6.0.125 (#4057)
try to fix #4052.

---------

Co-authored-by: winlin <winlinvip@gmail.com>
10 months ago
Winlin 7209b73660
WHIP: Fix bug for converting WHIP to RTMP/HLS. v5.0.208 v6.0.113 (#3920)
1. When converting RTC to RTMP, it is necessary to synchronize the audio
and video timestamps. When the synchronization status changes, whether
it is unsynchronized or synchronized, print logs to facilitate
troubleshooting of such issues.
2. Chrome uses the STAP-A packet, which means a single RTP packet
contains SPS/PPS information. OBS WHIP, on the other hand, sends SPS and
PPS in separate RTP packets. Therefore, SPS and PPS are in two
independent RTP packets, and SRS needs to cache these two packets.

---------

Co-authored-by: john <hondaxiao@tencent.com>
1 year ago
winlin 2a2da2253f Switch to 2013-2024. v6.0.109 1 year ago
john 15601b4b2a
RTC: Support OPUS stereo SDP option. v5.0.203 v6.0.105 (#3910)
In an SDK that supports RTC Opus stereo, the parameter "stereo=1" may
appear. SRS (Spatial Reference System) needs to handle this correctly
and return an answer to enable WebRTC stereo support.



---------

`TRANS_BY_GPT4`
1 year ago
winlin 29eff1a242 Refine LICENSE. 1 year ago
Winlin dcd02fe69c
Support composited bridges for 1:N protocols converting. v6.0.41 (#3392)
Co-authored-by: john <hondaxiao@tencent.com>
Co-authored-by: chundonglinlin <chundonglinlin@163.com>
2 years ago
john 7922057467
RTC: fix rtc publisher pli cid (#3318)
* RTC: fix rtc publisher pli cid
* RTC: log bridge request keyframe
* Update release v6.0.19 v5.0.138

Co-authored-by: Winlin <winlin@vip.126.com>
Co-authored-by: ChenGH <chengh_math@126.com>
2 years ago
winlin c46ef81ff2 SRS5: Update license date to 2023. v5.0.123
PICK 72f8ed4916
2 years ago
winlin 6875876349 SRS5: MP3: Convert RTMP(MP3) to WebRTC(OPUS). v5.0.118 (#296) (#3340)
PICK 37867533cd
2 years ago
johzzy 6eb10afca2
WebRTC: Fix no audio and video issue for Firefox. (#3079)
* Remove extern SrsPps* duplicate declarations

* fix(rtmp2rtc): fix video payload type for rtmp to rtc bridge (#3041)

* Revert changes not belongs to this PR.

* Fix naming issue, follow SRS style.

* Use srs_assert instead of assert.

* Fix firefox no audio issue.

Co-authored-by: winlin <winlin@vip.126.com>
2 years ago
winlin 0c6d30861b Merge branch '4.0release' into develop 3 years ago
winlin 386b92e9ab For #3167: WebRTC: Refine sequence jitter algorithm. v4.0.266 3 years ago
winlin 6d18093e16 Merge branch '4.0release' into develop 3 years ago
winlin aea2bfbaf9 For #3174: WebRTC: Support Unity to publish or play stream. v4.0.264 3 years ago
winlin 79358673ef Merge branch '4.0release' into develop 3 years ago
winlin 34196ea7f7 Fix #3167: WebRTC: Play stucked when republish. v4.0.260 3 years ago
winlin d117145b95 Update date from 2021 to 2022. 3 years ago
winlin 665ad564fb Rename service to protocol files. 3 years ago
winlin f1840b87e5 Fix typo, change bridger to bridge. 3 years ago
winlin d5c86dc5fa Switch LICENSE from MIT to **MIT or MulanPSL-2.0**. v5.0.21 3 years ago
winlin 93aa0eb5ba Squash: Fix bugs 3 years ago
chundonglinlin 584889754c
RTC: fix play rtc judge for config rtc2rtmp on.(#2863) (#2872) 3 years ago
chundonglinlin 7580341a1e
LiveSource/RtcSource: Refine fetch for external exposed interface. (#2873) 3 years ago
winlin 8576fa7052 Squash: Merge v4.0.203 3 years ago
john f3c4023c25
Fix bugs for RTC2RTMP. (#2768)
1. Cache IDR frame's rtp timestamp instead of avsync timestamp.
2. Cache clock rate calculate by sender report.
3. Using srs_rtp_seq_distance instead of direct minus.
4. Add utest of av timestamp sync when duplicated sender report.
3 years ago
winlin 5f85d405e7 Squash: Merge #2721, #2729 3 years ago
john 878833bb95
Rtc2Rtmp: Using rtp timestamp to distinguish different video frame (#2721) 3 years ago
winlin b874d9c9ba Squash: Merge SRS 4.0, regression test for RTMP. 4 years ago
winlin 71ed6e5dc5 RTC: Refine config, aac to rtmp_to_rtc, bframe to keep_bframe. v4.0.174 4 years ago
winlin a81aa2edc5 Squash: Merge SRS 4.0 4 years ago
winlin 19e857ada4 Remove dead link for issues 4 years ago
winlin 85620a34f5 Squash: Fix rtc to rtmp sync timestamp using sender report. #2470 4 years ago
john ea8cff6163
RTC: Fix rtc to rtmp sync timestamp using sender report. (#2470)
* fix annotation spell failed

* RTC to RTMP using SenderReport to sync av timestamp

* update pion/webrtc versio from v3.0.4 -> v3.0.13, auto config sender/receiver report

* Add rtc push flv play regression test

* Add unit test of ntp and av sync time

* Take flag CXX to makefile of utest

* Add annotation about rtc unit test

* Fix compiler error in C++98

* Add FFmpeg log callback funciton.
4 years ago
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
4 years ago
winlin 15901cacee SquashSRS4: Use SPDX-License-Identifier: MIT. 5.0.3 4 years ago
winlin 3cd22b6e6e Use SPDX-License-Identifier: MIT. 4.0.124 4 years ago
winlin f043a7eb48 SquashSRS4: Allow RTC play before publish. 4 years ago
root d55af6be44 Fix #2362: Allow WebRTC to play before publishing, for GB28181 as such. 4.0.117 4 years ago
winlin e3bca883e1 SuqashSRS4: Build SRT native 4 years ago
winlin dae6dc5395 Rename SrsRtcStream* to SrsRtcSource*. 4.0.113 4 years ago
winlin 2dd58665fa Rename SrsSource* to SrsLiveSource*. 4.0.112 4 years ago
winlin a1d7fe46c1 SquashSRS4: Rename SrsRtpPacket2 to SrsRtpPacket. 4 years ago
winlin ddd7a378b1 Rename SrsRtpPacket2 to SrsRtpPacket. 4.0.111 4 years ago