1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00
Commit graph

42 commits

Author SHA1 Message Date
Winlin
41b3623296 API: Support new HTTP API for VALGRIND. v6.0.149 (#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:59 +08:00
Haibo Chen
65ad907fe4
GB28181: Support external SIP server. v6.0.144 (#4101)
For #3369 to support an external powerful SIP server, do not use the
embedded SIP server of SRS.
For more information, detailed steps, system architecture, and
background explanation, please see
https://ossrs.net/lts/zh-cn/docs/v6/doc/gb28181#external-sip

---------

Co-authored-by: Jacob Su <suzp1984@gmail.com>
Co-authored-by: winlin <winlinvip@gmail.com>
2024-07-27 09:06:12 +08:00
Winlin
6834ec208d
SmartPtr: Use shared ptr to manage GB objects. v6.0.126 (#4080)
The object relations: 

![gb](266e8a4e-3f1e-4805-8406-9008d6a63aa0)

Session manages SIP and Media object using shared resource or shared
ptr. Note that I actually use SrsExecutorCoroutine to delete the object
when each coroutine is done, because there is always a dedicate
coroutine for each object.

For SIP and Media object, they directly use the session by raw pointer,
it's safe because session always live longer than session and media
object.

---

Co-authored-by: Jacob Su <suzp1984@gmail.com>
2024-06-12 22:40:20 +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
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
winlin
c46ef81ff2 SRS5: Update license date to 2023. v5.0.123
PICK 72f8ed4916
2023-01-01 08:56:20 +08:00
Winlin
6f3d6b9b65
GB: Refine lazy object GC. v5.0.114 (#3321)
* GB: Refine lazy object GC.

1. Remove gc_set_creator_wrapper, pass by resource constructor.
2. Remove SRS_LAZY_WRAPPER_GENERATOR macro, use template directly.
3. Remove interfaces ISrsGbSipConn and ISrsGbSipConnWrapper.
4. Remove ISrsGbMediaConn and ISrsGbMediaConnWrapper.

* GC: Refine wrapper constructor.

* GB: Refine lazy object GC. v5.0.114
2022-12-20 19:54:25 +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
efdbf37255 Squash: Move GB28181 to feature/gb28181. 5.0.4 2021-06-16 14:03:55 +08:00
winlin
15901cacee SquashSRS4: Use SPDX-License-Identifier: MIT. 5.0.3 2021-05-31 13:42:20 +08:00
cfw11
4d6f00e6bf
GB28181: fix parse rtp-tcp failed (#2378)
* fix parse rtp-tcp failed

* fix parse rtp-tcp failed

Co-authored-by: cfw <fangwei.cheng@transwarp.io>
2021-05-28 21:19:05 +08:00
xialixin
2e14d80aa4 SquashSRS4: Refine GB28181 2021-05-18 09:11:57 +08:00
winlin
e3bca883e1 SuqashSRS4: Build SRT native 2021-05-16 16:14:00 +08:00
winlin
a1d7fe46c1 SquashSRS4: Rename SrsRtpPacket2 to SrsRtpPacket. 2021-05-15 08:53:54 +08:00
winlin
aa07f45545 SquashSRS4: Happy 2021 2021-04-20 19:03:02 +08:00
xialixin@kanzhun.com
4df6fa540f For #2200, Enable RTC and FLV for GB28181 2021-02-18 21:51:49 +08:00
xbpeng121
47422b7819
GB28181: 无法对接平台问题及一些小bug (#2109)
* 1-新增srs_string_split2函数,该函数支持空串也能按照原有顺序进行切分并放入数组
2-SrsGb28181Device增加属性字段,并在收到catalog命令时能够更新该属性
3-修复sip包解包不严谨bug(body中有可能会有SRS_RTSP_CRLFCRLF那么导致header_body[1]就不一定是body了可能只是body的一部分)

* 1-修复停用rtp多路复用参数(invite_port_fixed)不起作用bug

* bugfix: 当srs发送invite时会指定一个ssrc作为流媒体序列号,但有些平台发流时并不使用这个作为ssrc,而是自己新生成一个。(修复该bug是在invite response时解析内容中的sdp,把对方生成的流媒体序列号ssrc读出来,并且更新srs的channel映射)

* Update push.gb28181.conf

恢复成原来的conf

* bugfix,在取得muxer时需要更新。之前写反了

* Merge branch 'develop' into 4.0release

* 解决冲突时,优先选择原有代码(还原选择develop的代码)

* 解决冲突时,优先选择原有代码(还原选择develop的代码)

* 解决冲突时,优先选择原有代码(还原选择develop的代码)

* 解决冲突时,优先选择原有代码(还原选择develop的代码)

* 修改sdp_map相同属性的连接符

* 解决冲突时,优先选择原有代码(还原选择develop的代码)

* 修改sdp_map相同属性的连接符

* 解决冲突时,优先选择原有代码(还原选择develop的代码)

* 解决冲突时,优先选择原有代码(还原选择develop的代码)

* 回退原来代码

* 删除parse_sdp存储至map相关代码

* 格式恢复

* 格式恢复

* 恢复格式

* srs_string_split() 函数的bugfix

Co-authored-by: xbpeng <xianbin.peng@sibat.cn>
2021-01-06 15:37:02 +08:00
Pieere Pi
ffae1720ec gb28181模块可用性增强
主要改动,
1. 支持作为GB/T 28181上级平台
2. 新的目录接口sip_query_devicelist (/api/v1/gb28181?action=sip_query_devicelist)
3. 各种异常和问题修复
4. 其他一些小改动

以上改动基于feature/rtc分支,因为需要网页用WebRTC来拉GB28181的监控流,gb28181分支代码有点老了。

下面的序号n是指第n个差异块("@@ -"之间的内容)。

srs_gb28181.html
1. 原页面上多加了一个端口号
2-4. 给摄像头加上名称显示
5. 查询目录去掉chid
6. 删除通道参数分解为id和chid
7. API端口固定为1985

srs_app_gb28181.cpp
1-4. 四处因为错误而退出GB28181媒体处理循环,修改为不退出
5. payload为空异常
6. 修正判断startcode越界一个字符导致内存写越界的问题
ps流有可能末尾是全零填充,而且越界的那个字符正好是0x01,这样会多出一个nalu(末尾的三个0x00和一个越界的0x01),后面写video_data内存越界(if (first_pos != pre_pos){块,此处size - pre_pos - 4为-1,uint32_t naluLen得到的值为0,video_data[pre_pos+3] = p[0];写越界)破坏了其他数据,后续video_stream析构出错程序异常退出。
7. 此处srs后来已修复
8. 更新ssrc为被叫返回的值
原代码只支持标准中的《点播域内设备媒体流SSRC处理方式》(设备注册上来),不支持《点播外域设备媒体流SSRC处理方式》(即作为上级平台)。
这是因为如果srs作为上级平台,ssrc不是自己生成的,而是下级平台生成的。
9. 删除通道参数分解为id和chid
10. notify_sip_unregister后delete_stream_channel无效
11. notify_sip_query_catalog清空内存中的设备列表
12. 新函数query_device_list

srs_app_gb28181.hpp
1. update_rtmpmuxer_to_newssrc_by_id声明
2. 新函数get_gb28181_config_ptr和函数delete_stream_channel声明修改
3. 新函数query_device_list

srs_app_gb28181_sip.cpp
1-4. 在调试界面给摄像头加上名称显示;新函数clear_device_list和新函数dumpItemList
5-6. 两处因为错误而退出GB28181信令处理循环,修改为不退出
7. 设备注册上来,不检查服务器ID匹不匹配(支持作为上级平台)
8. 收到一个目录上报消息,更新内存中的数据
9. 更新ssrc为被叫返回的值
10. 新函数query_device_list

srs_app_gb28181_sip.hpp
1. 在调试界面给摄像头加上名称显示
2. 每个设备加上item_list,用于存储目录;新函数clear_device_list和新函数dumpItemList
3. 新函数clear_device_list

srs_app_http_api.cpp
1. 删除通道参数分解为id和chid
2. 新的接口sip_query_devicelist,用于查询所有设备的目录

srs_sip_stack.cpp
1. GB2312转UTF-8类
2. 被叫返回的ssrc初始化
3. parse_xml声明修改
4. 对XML内容进行字符集检测和转换
5-7. parse_xml定义修改
8. SIP BODY里面也有可能有\r\n
9-10. 防止恶意SIP消息 by vicious sip prober
11-12. 新的XML解析目录代码
13. 获取被叫返回的ssrc

srs_sip_stack.hpp
1. 依赖vector
2. 每个设备加上item_list,用于存储目录
3. 被叫返回的ssrc
4. parse_xml声明修改
2020-11-15 23:14:34 +08:00
yinjiaoyuan
fe65c7bf84 For 2034, GB28181: Support transport over TCP 2020-11-15 22:50:59 +08:00
winlin
7e3dfa7149 GB28181: Fix build fail 2020-09-20 18:01:03 +08:00
winlin
8bf677e3c8 Refine code 2020-09-19 10:53:55 +08:00
winlin
1661876633 Fix build fail 2020-09-19 10:41:58 +08:00
winlin
64705d1cc8 RTC: Refine resouce management 2020-09-19 10:30:05 +08:00
winlin
4eae93d27b Rename SrsCoroutineManager to SrsConnectionManager 2020-09-11 17:20:41 +08:00
winlin
2135b638b1 Merge srs_app_thread.hpp to srs_app_conn.hpp 2020-09-11 16:44:40 +08:00
kyxlx550
d02b560217 remove 28181 is_aac define 2020-08-30 12:06:34 +08:00
kyxlx550
5864ea3472 supprot ps jitbuffer different timestamp of audio and video 2020-08-30 12:06:34 +08:00
kyxlx550
83c2586d79 support audio g711 2020-07-02 09:06:05 +08:00
kyxlx550
9855e6a715 ps to rtmp via source, h264 start code with replace nalulen 2020-06-07 21:51:06 +08:00
kyxlx550
6a070a9a64 support sip ptz cmd 2020-04-20 21:34:18 +08:00
kyxlx550
33b91cd6f2 fix gb28181 api error code 2020-04-16 12:30:11 +08:00
kyxlx550
28bde1d448 fix rtmp send timeout, first key frame wait 2020-04-11 20:36:28 +08:00
winlin
cf48a5594d Refactor code for #1691 2020-04-09 08:37:28 +08:00
xialixin
d2b8b937d6 fix generate ssrc, rtmp muxer cycle sleep, ps steam parase etc.. 2020-04-05 13:53:14 +08:00
xialixin
92d351ef35 fix 'output' format define; support 'host' auto get; time config use SRS internal format; support auto create stream channel on/off 2020-04-04 16:07:23 +08:00
xialixin
5e4fdfd1d4 fix after RTMP is closed, empty PPS and SPS. sip client sockaddr set 2020-04-04 16:07:23 +08:00
xialixin
ac8acc0b22 fix 28281 to 28181, sip heart message, timeout channel peer ip and port reset 2020-04-04 16:07:23 +08:00
winlin
d81cde695d Refactor code 2020-03-31 22:48:38 +08:00
winlin
6012ac4eb0 Refine code 2020-03-31 22:30:57 +08:00
xialixin
c99fb99ab6 refactor gb28181, supporting SIP server enable, multiplex, API interface 2020-03-31 00:39:10 +08:00
xialixin
cbe9c1dabc Support gb28181 sip over udp, ps steam over rtp 2020-03-20 00:01:48 +08:00