Commit Graph

273 Commits

Author SHA1 Message Date
john
02c6e60e3a update copyright to 2025. v6.0.159 (#4271)
update copyright to 2025

---------

Co-authored-by: john <hondaxiao@tencent.com>
Co-authored-by: winlin <winlinvip@gmail.com>
2025-02-24 19:34:34 +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
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>
2024-06-21 07:13:12 +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
a1e4f61dd3
Solve the problem of inaccurate HLS TS duration. v5.0.187 v6.0.87 (#3824)
1. The comment on the ratio configuration says it can affect the slice
duration, but there is no effect after configuring it.
2. The default hls_td_ratio is 1.5, and after setting it to 1, the
duration is still slightly more than 10 seconds.
3. Even if the GOP is an integer, like 1 second, the slice is still a
non-integer, like 0.998 seconds, which seems a bit unreliable.
4. In the duration of the TS in the m3u8 file, it is one frame less than
the duration of the slice.
5. Set hls_dispose to 120s to dispose HLS files when no stream.
6. Use docker.conf for docker.

Before this patch:

```
#EXTINF:10.983, no desc
livestream-0.ts?hls_ctx=3p095hq0
```

After this patch:

```
#EXTINF:10.000, no desc
livestream-0.ts?hls_ctx=3p095hq0
```

Note: If the fragment is set to 10 seconds, but the GOP size cannot be
divided by 10, such as not 1, 2, 5, or 10, then the duration of ts will
still be more than 10 seconds.


---------

Co-authored-by: john <hondaxiao@tencent.com>
2023-10-09 06:22:41 -05:00
Haibo Chen
6e6b80d837
Remove unreachable issues in code (#3793)
remove unreachable links by python scripts:
```
def is_delete_issue(link):
    try:
        response = requests.get(link)
    except RequestException as e:
        print(f"An error occurred while trying to get the link: {e}")
        return False

    return "This issue has been deleted." in response.text


def remove_unreachable_links(dir):
    string_to_search = re.compile(r'// @see https://github\.com/ossrs/srs/issues/.*')
    file_list = util.find_files_with_extension(dir, ".cpp", True)
    for file in file_list:
        lines = []
        with open(file, "r", encoding="utf-8") as f:
            lines = f.readlines()
        with open(file, "w", encoding="utf-8", newline="\n") as f:    
            for line in lines:
                if string_to_search.search(line):
                    result = re.search(r'https://github\.com/ossrs/srs/issues/\d+', line)
                    if result:
                        link = result.group()
                        if is_delete_issue(link):
                            print("is_delete_issue link: file: %s, line: %s" % (file, line))
                            continue
                    
                f.write(line)

if __name__ == "__main__":
    remove_unreachable_links("srs/trunk/src/")
```
2023-09-04 16:31:54 +08:00
Winlin
cff5064d0b HLS: Fix on_hls and hls_dispose critical zone issue. v5.0.174 v6.0.69 (#3781)
on_hls and hls_dispose are two coroutines, with potential race
conditions. That is, during on_hls, if the API Server being accessed is
slower, it will switch to the hls_dispose coroutine to start cleaning
up. However, when the API Server is processing the slice, a situation
may occur where the slice does not exist, resulting in the following
log:

```
[2023-08-22 12:03:20.309][WARN][40][x5l48q7b][11] ignore task failed code=4005(HttpStatus)(Invalid HTTP status code) : callback on_hls http://localhost:2024/terraform/v1/hooks/srs/hls : http: post http://localhost:2024/terraform/v1/hooks/srs/hls with {"server_id":"vid-5d7dxn8","service_id":"cu153o7g","action":"on_hls","client_id":"x5l48q7b","ip":"172.17.0.1","vhost":"__defaultVhost__","app":"live","tcUrl":"srt://172.17.0.2/live","stream":"stream-44572-2739617660809856576","param":"secret=1ed8e0ffbc53439c8fc8da30ab8c19f0","duration":4.57,"cwd":"/usr/local/srs-stack/platform","file":"./objs/nginx/html/live/stream-44572-2739617660809856576-1.ts","url":"live/stream-44572-2739617660809856576-1.ts","m3u8":"./objs/nginx/html/live/stream-44572-2739617660809856576.m3u8","m3u8_url":"live/stream-44572-2739617660809856576.m3u8","seq_no":1,"stream_url":"/live/stream-44572-2739617660809856576","stream_id":"vid-0n9zoz3"}, status=500, res=invalid ts file ./objs/nginx/html/live/stream-44572-2739617660809856576-1.ts: stat ./objs/nginx/html/live/stream-44572-2739617660809856576-1.ts: no such file or directory
thread [40][x5l48q7b]: call() [./src/app/srs_app_hls.cpp:122][errno=11]
thread [40][x5l48q7b]: on_hls() [./src/app/srs_app_http_hooks.cpp:401][errno=11]
thread [40][x5l48q7b]: do_post() [./src/app/srs_app_http_hooks.cpp:638][errno=11]

[error] 2023/08/22 12:03:20.076984 [52][1001] Serve /terraform/v1/hooks/srs/hls failed, err is stat ./objs/nginx/html/live/stream-44572-2739617660809856576-1.ts: no such file or directory
invalid ts file ./objs/nginx/html/live/stream-44572-2739617660809856576-1.ts
main.handleOnHls.func1.1
	/g/platform/srs-hooks.go:684
main.handleOnHls.func1
	/g/platform/srs-hooks.go:720
net/http.HandlerFunc.ServeHTTP
	/usr/local/go/src/net/http/server.go:2084
net/http.(*ServeMux).ServeHTTP
	/usr/local/go/src/net/http/server.go:2462
net/http.serverHandler.ServeHTTP
	/usr/local/go/src/net/http/server.go:2916
net/http.(*conn).serve
	/usr/local/go/src/net/http/server.go:1966
runtime.goexit
	/usr/local/go/src/runtime/asm_amd64.s:1571
```

Similarly, when stopping the stream, on_hls will also be called to
handle the last slice. If the API Server is slower at this time, it will
enter hls_dispose and call unpublish repeatedly. Since the previous
unpublish is still blocked in on_hls, the following interference log
will appear:

```
[2023-08-22 12:03:18.748][INFO][40][6498088c] hls cycle to dispose hls /live/stream-44572-2739617660809856576, timeout=10000000ms
[2023-08-22 12:03:18.752][WARN][40][6498088c][115] flush audio ignored, for segment is not open.
[2023-08-22 12:03:18.752][WARN][40][6498088c][115] ignore the segment close, for segment is not open.
```

Although this log will not cause problems, it can interfere with
judgment.

The solution is to add an 'unpublishing' status. If it is in the
'unpublishing' status, then do not clean up the slices.

---------

Co-authored-by: Haibo Chen <495810242@qq.com>
2023-08-28 11:41:08 +08:00
Winlin
b5347e19f7 HLS: Support reload HLS asynchronously. v5.0.172 v6.0.67 (#3782)
When reloading HLS, it directly operates unpublish and publish. At this
time, if HLS is pushed, an exception may occur.

The reason is that these two coroutines operated on the HLS object at
the same time, causing a null pointer.

Solution: Use asynchronous reload. During reload, only set variables and
let the message processing coroutine implement the reload.

---------

Co-authored-by: Haibo Chen <495810242@qq.com>
Co-authored-by: chundonglinlin <chundonglinlin@163.com>
2023-08-25 09:46:21 +08:00
terrencetang2023
6babf01de2
Bugfix: Log format output type does not match. v5.0.171, v6.0.66 (#3775)
A segmentation fault occurred on arm
https://github.com/ossrs/srs/issues/3714

---------

Co-authored-by: Haibo Chen <495810242@qq.com>
2023-08-22 09:38:21 +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
c46ef81ff2 SRS5: Update license date to 2023. v5.0.123
PICK 72f8ed4916
2023-01-01 08:56:20 +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
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
d117145b95 Update date from 2021 to 2022. 2022-06-20 19:22:25 +08:00
winlin
fa78cf3354 Prefix with srs_protocol in protocol directory. 2022-06-09 20:26:58 +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
716e578a19 Squash: Fix bugs 2021-12-26 17:30:51 +08:00
winlin
2f52d0aefa Fix bug for HLS log printing. (#2807). v4.0.209 2021-12-23 18:38:18 +08:00
Haibo Chen
eb3bbf1bca For #2549: Fix duration issue for HLS on_hls. v4.0.176 2021-10-12 09:18:39 +08:00
Haibo Chen
93cd025e2a
replace the placeholder of ts url in m3u8 (#2549) 2021-10-12 09:15:21 +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
Xiaoniu
7bf03ef2ba Fix #2068, losing of last HLS ts file 4.0.133
fix bug: last segment of ts not trigger 'on_hls',
because of 'on_unpublish' earlier than 'segment_close' (#2438)
2021-06-28 07:28:46 +08:00
Xiaoniu
d987e194ff
fix bug: last segment of ts not trigger 'on_hls', because of 'on_unpublish' earlier than 'segment_close' (#2438) 2021-06-28 07:25:25 +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
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
6bc83e1041 HLS: Fix memory leak 2020-08-20 11:37:25 +08:00
winlin
6624b8acca Log: Use object as context id for complex context 2020-07-05 23:26:55 +08:00
jinxue.cgh
83ce78a015 tfsfu: fix compile error for bind, and warning 2020-06-18 11:48:10 +08:00
winlin
8a0c2e01f8 Log: Change cid from int to string 2020-06-18 11:45:43 +08:00
winlin
ed338f4c0a Refactor macro SRS_AUTO_XXX to SRS_XXX. 2020-04-29 20:02:28 +08:00
winlin
2775a391e0 Fix #878, remove deprecated #EXT-X-ALLOW-CACHE for HLS. 3.0.108 2020-01-25 20:03:22 +08:00
winlin
857c783efc For #1509, release coroutine when source is idle. 3.0.98 2020-01-15 19:51:33 +08:00
winlin
d783a12f89 Happy 2020 2019-12-30 10:10:35 +08:00
winlin
1c227f4f8a Refine logger for hls_dts_directly 2019-12-10 15:59:15 +08:00
winlin
b4870a6d6f Fix #1506, support directly turn FLV timestamp to TS DTS. 3.0.68 2019-12-05 20:47:23 +08:00
winlin
31f341e205 For #1506, refine the AAC samples guess algorithm. 2019-12-05 20:16:23 +08:00
winlin
52c6c7c45d For #1506, ignore video when codec is unknown. 2019-12-05 19:21:43 +08:00
winlin
ffe391aa49 Fix HLS no PMT/PAT bug. 2019-05-07 07:40:19 +08:00
winlin
1626942d29 Fix SrsHlsMuxer::segment_close bug, reopen segment when close failed. 2019-04-18 09:28:08 +08:00
winlin
6380e8f1c0 Fix HLS segment close bug 2019-04-16 09:32:26 +08:00
winlin
917f6d066d Refine get_hls_window in time unit 2019-04-16 08:20:32 +08:00
winlin
ca705a6f62 Refine get_hls_fragment in time unit 2019-04-16 08:14:12 +08:00
winlin
465d255940 Refine SRS_AUTO_HLS_SEGMENT_MIN_DURATION_MS in time unit 2019-04-15 07:56:16 +08:00
winlin
980c32aee6 Refine on_hls duration in time unit 2019-04-15 07:53:29 +08:00