# rtc_server **Repository Path**: wingsmm/rtc_server ## Basic Information - **Project Name**: rtc_server - **Description**: xrtc server/client - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-28 - **Last Updated**: 2025-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # rtc_server ## 学习地址 [XRTC1.0-基于WebRTC的大型分布式实时音视频系统实战(课程)](https://app2n0riqjg1172.h5.xiaoeknow.com/p/course/ecourse/course_2YkmdWO7a7A0vij8nwb2NPkOj4S) [基于WebRTC的大型分布式实时音视频系统项目实战_v1.1.pdf](./doc/基于WebRTC的大型分布式实时音视频系统项目实战_v1.1.pdf) ## 第1部分 桌面共享 [目录:桌面共享(4-14)](./screen_share/README.md) ## 第2部分 基础系统架构-go部分 [目录:基础系统架构(15-32)](./signaling/README.md) ## 第2部分 基础系统架构-cpp部分 [目录:基础系统架构(33-59)](./rtc_server/README.md) - 源码:signaling_1.18 xrtcserver_1.22 ## 第3阶段:WebRTC推流 (79 小节) [目录:WebRTC推流(60-138)](./rtc_server/README_PUSH.md) ## 第4阶段:WebRTC拉流 (30 小节) ```bash send push: /signaling/push push response: {"errNo":0,"errMsg":"success","data":{"type":"offer","sdp":"v=0\r\no=- 0 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:2757197131 1 udp 2113937151 124.70.49.224 10028 typ host\r\na=ice-ufrag:XWJV\r\na=ice-pwd:BIkvenMJ7Vd6wfOpVSlDf1tW\r\na=fingerprint:sha-256 90:3A:45:F1:AB:5A:AD:65:90:74:7C:7A:ED:E0:BB:22:7B:B8:A2:F8:E3:29:05:B5:CC:E4:3E:5E:2C:EA:76:82\r\na=setup:actpass\r\na=mid:audio\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\nm=video 9 UDP/TLS/RTP/SAVPF 107 99\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:XWJV\r\na=ice-pwd:BIkvenMJ7Vd6wfOpVSlDf1tW\r\na=fingerprint:sha-256 90:3A:45:F1:AB:5A:AD:65:90:74:7C:7A:ED:E0:BB:22:7B:B8:A2:F8:E3:29:05:B5:CC:E4:3E:5E:2C:EA:76:82\r\na=setup:actpass\r\na=mid:video\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:107 H264/90000\r\na=rtcp-fb:107 goog-remb\r\na=rtcp-fb:107 transport-cc\r\na=rtcp-fb:107 ccm fir\r\na=rtcp-fb:107 nack\r\na=rtcp-fb:107 nack pli\r\na=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=107\r\n"}} offer sdp: v=0 o=- 0 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE audio video a=msid-semantic: WMS m=audio 9 UDP/TLS/RTP/SAVPF 111 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=candidate:2757197131 1 udp 2113937151 124.70.49.224 10028 typ host a=ice-ufrag:XWJV a=ice-pwd:BIkvenMJ7Vd6wfOpVSlDf1tW a=fingerprint:sha-256 90:3A:45:F1:AB:5A:AD:65:90:74:7C:7A:ED:E0:BB:22:7B:B8:A2:F8:E3:29:05:B5:CC:E4:3E:5E:2C:EA:76:82 a=setup:actpass a=mid:audio a=recvonly a=rtcp-mux a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc a=fmtp:111 minptime=10;useinbandfec=1 m=video 9 UDP/TLS/RTP/SAVPF 107 99 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:XWJV a=ice-pwd:BIkvenMJ7Vd6wfOpVSlDf1tW a=fingerprint:sha-256 90:3A:45:F1:AB:5A:AD:65:90:74:7C:7A:ED:E0:BB:22:7B:B8:A2:F8:E3:29:05:B5:CC:E4:3E:5E:2C:EA:76:82 a=setup:actpass a=mid:video a=recvonly a=rtcp-mux a=rtpmap:107 H264/90000 a=rtcp-fb:107 goog-remb a=rtcp-fb:107 transport-cc a=rtcp-fb:107 ccm fir a=rtcp-fb:107 nack a=rtcp-fb:107 nack pli a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:99 rtx/90000 a=fmtp:99 apt=107 pc set remote description success request screen share 用户同意屏幕共享, streamId: wNl1jIRDChlW3HcJMHJ7vg== answer sdp: v=0 o=- 4342878217710247554 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE audio video a=msid-semantic: WMS bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed m=audio 9 UDP/TLS/RTP/SAVPF 111 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:s6Ec a=ice-pwd:NyRjlHYmeY5SFvGKnePYsTT1 a=ice-options:trickle a=fingerprint:sha-256 7A:31:07:CF:EB:8D:05:17:1C:B6:FC:BD:EB:FA:AE:DD:33:74:37:6F:67:D4:67:E8:A1:C8:7D:AC:C4:59:F8:7B a=setup:active a=mid:audio a=sendonly a=msid:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed 21e0c6dd-4547-4d71-8684-40e2c104d1df a=rtcp-mux a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc a=fmtp:111 minptime=10;useinbandfec=1 a=ssrc:3067709294 cname:ZsZj+/VH5+E59Fsn a=ssrc:3067709294 msid:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed 21e0c6dd-4547-4d71-8684-40e2c104d1df m=video 9 UDP/TLS/RTP/SAVPF 107 99 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:s6Ec a=ice-pwd:NyRjlHYmeY5SFvGKnePYsTT1 a=ice-options:trickle a=fingerprint:sha-256 7A:31:07:CF:EB:8D:05:17:1C:B6:FC:BD:EB:FA:AE:DD:33:74:37:6F:67:D4:67:E8:A1:C8:7D:AC:C4:59:F8:7B a=setup:active a=mid:video a=sendonly a=msid:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed c0a89b78-2bf9-4e39-91b3-bf05330cf6c0 a=rtcp-mux a=rtpmap:107 H264/90000 a=rtcp-fb:107 goog-remb a=rtcp-fb:107 transport-cc a=rtcp-fb:107 ccm fir a=rtcp-fb:107 nack a=rtcp-fb:107 nack pli a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:99 rtx/90000 a=fmtp:99 apt=107 a=ssrc-group:FID 1413395643 2748179492 a=ssrc:1413395643 cname:ZsZj+/VH5+E59Fsn a=ssrc:1413395643 msid:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed c0a89b78-2bf9-4e39-91b3-bf05330cf6c0 a=ssrc:2748179492 cname:ZsZj+/VH5+E59Fsn a=ssrc:2748179492 msid:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed c0a89b78-2bf9-4e39-91b3-bf05330cf6c0 pc set local sdp send answer: /signaling/sendanswer set local description success send answer response: {"errNo":0,"errMsg":"success","data":null} ======================================================================================================================== send pull: /signaling/pull push response: {"errNo":0,"errMsg":"success","data":{"type":"offer","sdp":"v=0\r\no=- 0 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:2757197131 1 udp 2113937151 124.70.49.224 10029 typ host\r\na=ice-ufrag:od32\r\na=ice-pwd:DLlb3AKcns4LaNWxyhEG4mIt\r\na=fingerprint:sha-256 90:3A:45:F1:AB:5A:AD:65:90:74:7C:7A:ED:E0:BB:22:7B:B8:A2:F8:E3:29:05:B5:CC:E4:3E:5E:2C:EA:76:82\r\na=setup:actpass\r\na=mid:audio\r\na=sendonly\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=ssrc:3067709294 cname:ZsZj+/VH5+E59Fsn\r\na=ssrc:3067709294 msid:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed 21e0c6dd-4547-4d71-8684-40e2c104d1df\r\na=ssrc:3067709294 mslabel:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed\r\na=ssrc:3067709294 lable:21e0c6dd-4547-4d71-8684-40e2c104d1df\r\nm=video 9 UDP/TLS/RTP/SAVPF 107 99\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:od32\r\na=ice-pwd:DLlb3AKcns4LaNWxyhEG4mIt\r\na=fingerprint:sha-256 90:3A:45:F1:AB:5A:AD:65:90:74:7C:7A:ED:E0:BB:22:7B:B8:A2:F8:E3:29:05:B5:CC:E4:3E:5E:2C:EA:76:82\r\na=setup:actpass\r\na=mid:video\r\na=sendonly\r\na=rtcp-mux\r\na=rtpmap:107 H264/90000\r\na=rtcp-fb:107 goog-remb\r\na=rtcp-fb:107 transport-cc\r\na=rtcp-fb:107 ccm fir\r\na=rtcp-fb:107 nack\r\na=rtcp-fb:107 nack pli\r\na=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=107\r\na=ssrc-group:FID 1413395643 2748179492\r\na=ssrc:1413395643 cname:ZsZj+/VH5+E59Fsn\r\na=ssrc:1413395643 msid:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed c0a89b78-2bf9-4e39-91b3-bf05330cf6c0\r\na=ssrc:1413395643 mslabel:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed\r\na=ssrc:1413395643 lable:c0a89b78-2bf9-4e39-91b3-bf05330cf6c0\r\na=ssrc:2748179492 cname:ZsZj+/VH5+E59Fsn\r\na=ssrc:2748179492 msid:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed c0a89b78-2bf9-4e39-91b3-bf05330cf6c0\r\na=ssrc:2748179492 mslabel:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed\r\na=ssrc:2748179492 lable:c0a89b78-2bf9-4e39-91b3-bf05330cf6c0\r\n"}} offer sdp: v=0 o=- 0 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE audio video a=msid-semantic: WMS m=audio 9 UDP/TLS/RTP/SAVPF 111 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=candidate:2757197131 1 udp 2113937151 124.70.49.224 10029 typ host a=ice-ufrag:od32 a=ice-pwd:DLlb3AKcns4LaNWxyhEG4mIt a=fingerprint:sha-256 90:3A:45:F1:AB:5A:AD:65:90:74:7C:7A:ED:E0:BB:22:7B:B8:A2:F8:E3:29:05:B5:CC:E4:3E:5E:2C:EA:76:82 a=setup:actpass a=mid:audio a=sendonly a=rtcp-mux a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc a=fmtp:111 minptime=10;useinbandfec=1 a=ssrc:3067709294 cname:ZsZj+/VH5+E59Fsn a=ssrc:3067709294 msid:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed 21e0c6dd-4547-4d71-8684-40e2c104d1df a=ssrc:3067709294 mslabel:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed a=ssrc:3067709294 lable:21e0c6dd-4547-4d71-8684-40e2c104d1df m=video 9 UDP/TLS/RTP/SAVPF 107 99 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:od32 a=ice-pwd:DLlb3AKcns4LaNWxyhEG4mIt a=fingerprint:sha-256 90:3A:45:F1:AB:5A:AD:65:90:74:7C:7A:ED:E0:BB:22:7B:B8:A2:F8:E3:29:05:B5:CC:E4:3E:5E:2C:EA:76:82 a=setup:actpass a=mid:video a=sendonly a=rtcp-mux a=rtpmap:107 H264/90000 a=rtcp-fb:107 goog-remb a=rtcp-fb:107 transport-cc a=rtcp-fb:107 ccm fir a=rtcp-fb:107 nack a=rtcp-fb:107 nack pli a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:99 rtx/90000 a=fmtp:99 apt=107 a=ssrc-group:FID 1413395643 2748179492 a=ssrc:1413395643 cname:ZsZj+/VH5+E59Fsn a=ssrc:1413395643 msid:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed c0a89b78-2bf9-4e39-91b3-bf05330cf6c0 a=ssrc:1413395643 mslabel:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed a=ssrc:1413395643 lable:c0a89b78-2bf9-4e39-91b3-bf05330cf6c0 a=ssrc:2748179492 cname:ZsZj+/VH5+E59Fsn a=ssrc:2748179492 msid:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed c0a89b78-2bf9-4e39-91b3-bf05330cf6c0 a=ssrc:2748179492 mslabel:bd0c3a8b-6fcf-4473-bd79-532cfe5c6bed a=ssrc:2748179492 lable:c0a89b78-2bf9-4e39-91b3-bf05330cf6c0 set remote sdp start pc set remote sdp success answer sdp: v=0 o=- 4816052158149815250 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE audio video a=msid-semantic: WMS m=audio 9 UDP/TLS/RTP/SAVPF 111 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:AKbu a=ice-pwd:qr8veRdt1WJ8BP15RGBDW5tS a=ice-options:trickle a=fingerprint:sha-256 C0:75:9D:1D:59:61:A8:7C:43:8E:5D:9C:32:86:BB:20:C9:FD:6B:A6:1E:7C:8E:79:2D:5F:03:F6:27:33:F9:B6 a=setup:active a=mid:audio a=recvonly a=rtcp-mux a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc a=fmtp:111 minptime=10;useinbandfec=1 m=video 9 UDP/TLS/RTP/SAVPF 107 99 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:AKbu a=ice-pwd:qr8veRdt1WJ8BP15RGBDW5tS a=ice-options:trickle a=fingerprint:sha-256 C0:75:9D:1D:59:61:A8:7C:43:8E:5D:9C:32:86:BB:20:C9:FD:6B:A6:1E:7C:8E:79:2D:5F:03:F6:27:33:F9:B6 a=setup:active a=mid:video a=recvonly a=rtcp-mux a=rtpmap:107 H264/90000 a=rtcp-fb:107 goog-remb a=rtcp-fb:107 transport-cc a=rtcp-fb:107 ccm fir a=rtcp-fb:107 nack a=rtcp-fb:107 nack pli a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:99 rtx/90000 a=fmtp:99 apt=107 pc set local sdp send answer: /signaling/sendanswer set local sdp success send answer response: {"errNo":0,"errMsg":"success","data":null} ```