前言
上文简要分析了SRS之WebRTC的播放流程,本文来分析WebRTC的推流流程。
环境搭建
环境搭建请参见 SRS5.0之WebRTC播放流程分析 一文,WebRTC推流所不同的SRS配置如下:
listen 1935;
max_connections 100;
daemon off;
srs_log_tank console;
http_server {
enabled on;
listen 8081;
dir ./objs/nginx/html;
}
http_api {
enabled on;
listen 1985;
}
stats {
network 0;
}
rtc_server {
enabled on;
listen 8000; # UDP port
# @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate
candidate *;
}
vhost __defaultVhost__ {
rtc {
enabled on;
# @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtc
rtmp_to_rtc on;
# @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmp
rtc_to_rtmp on;
}
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
}
}
特别指出candidate配置,可配置为*,也可指定为所在机器的IP地址:
rtc_server {
enabled on;
listen 8000; # UDP port
# @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate
candidate *;
}
信令分析
HTTP信令
首先用wireshark抓包分析webrtc推流的信令流程:
Chrome浏览器首先向地址 /rtc/v1/publish POST一段数据,发送offer:
{
"api": "http://localhost:1985/rtc/v1/publish/",
"tid": "7e37fd9",
"streamurl": "webrtc://localhost/live/rtc-test",
"clientip": null,
"sdp": "v=0\r\no=- 2168287549096471063 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:eS/a\r\na=ice-pwd:AnJOUZYJuLHZPJ4RljsGa6Mq\r\na=ice-options:trickle\r\na=fingerprint:sha-