diff --git a/docs/Deploy.md b/docs/Deploy.md index 5b66967..56b0ee1 100644 --- a/docs/Deploy.md +++ b/docs/Deploy.md @@ -412,5 +412,41 @@ firewall-cmd --list-ports ## 证书 ``` -keytool -genkeypair -keyalg RSA -dname "CN=localhost, OU=acgist, O=taoyao, L=GZ, ST=GD, C=CN" -alias taoyao -validity 3650 -ext ku:c=dig,keyE -ext eku=serverAuth -ext SAN=dns:localhost,ip:127.0.0.1 -keystore taoyao.jks -keypass 123456 -storepass 123456 +mkdir /data/certs +cd /data/certs +vim server.ext + +--- +keyUsage = nonRepudiation, digitalSignature, keyEncipherment +extendedKeyUsage = serverAuth, clientAuth +subjectAltName=@SubjectAlternativeName + +[ SubjectAlternativeName ] +IP.1=127.0.0.1 +IP.2=192.168.1.100 +IP.3=192.168.1.110 +IP.4=192.168.8.100 +IP.5=192.168.8.110 +DNS.1=localhost +DNS.2=acgist.com +DNS.3=www.acgist.com +DNS.4=taoyao.acgist.com +--- + +# CA +openssl genrsa -out ca.key 2048 +openssl req -x509 -new -key ca.key -out ca.crt -days 3650 +openssl x509 -in ca.crt -subject -issuer -noout +# subject= /C=cn/ST=gd/L=gz/O=acgist/OU=acgist/CN=acgist.com +# issuer= /C=cn/ST=gd/L=gz/O=acgist/OU=acgist/CN=acgist.com + +# Server + +openssl genrsa -out server.key 2048 +openssl req -new -key server.key -out server.csr +openssl x509 -req -in server.csr -out server.crt -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -extfile server.ext +openssl x509 -in server.crt -subject -issuer -noout +# subject= /C=cn/ST=gd/L=gz/O=acgist/OU=taoyao/CN=taoyao.acgist.com +# issuer= /C=cn/ST=gd/L=gz/O=acgist/OU=acgist/CN=acgist.com +openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12 -name taoyao ``` diff --git a/docs/Learning.md b/docs/Learning.md index 17c129d..cb9df3c 100644 --- a/docs/Learning.md +++ b/docs/Learning.md @@ -26,6 +26,7 @@ https://www.cnblogs.com/ssyfj/p/14843082.html ## 更多资料 +https://zhuanlan.zhihu.com/p/466172240 http://koca.szkingdom.com/forum/t/topic/218 http://www.manoner.com/post/音视频基础/WebRTC核心组件和协议栈/ https://blog.csdn.net/ababab12345/article/details/115585378 diff --git a/docs/certs/ca.crt b/docs/certs/ca.crt new file mode 100644 index 0000000..3c4b0e1 --- /dev/null +++ b/docs/certs/ca.crt @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDjzCCAnegAwIBAgIJAKPjuujtbFnoMA0GCSqGSIb3DQEBCwUAMF4xCzAJBgNV +BAYTAmNuMQswCQYDVQQIDAJnZDELMAkGA1UEBwwCZ3oxDzANBgNVBAoMBmFjZ2lz +dDEPMA0GA1UECwwGYWNnaXN0MRMwEQYDVQQDDAphY2dpc3QuY29tMB4XDTIzMDIy +NzEzMzUyNloXDTMzMDIyNDEzMzUyNlowXjELMAkGA1UEBhMCY24xCzAJBgNVBAgM +AmdkMQswCQYDVQQHDAJnejEPMA0GA1UECgwGYWNnaXN0MQ8wDQYDVQQLDAZhY2dp +c3QxEzARBgNVBAMMCmFjZ2lzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDbt9orZnoTtzbaI9+S8uqqvi8rqOzi+b3tRHOYE+JVQNxWf8vTvKJ5 +mDDrBqICVy2SCtwkxXgrjDcRQVKK1IiDqxQ4oY6DCZetx4gQhYk9ychYsPPKnRg8 +bQEG48DM1EhmxhozUv7kaiUMS0LNODfzLTH/C25Nhgt3laGCtcIWOQliO9AVOxam +EasfYP01AfL2qahk1s5N7fK9poLpbR9BS8ZUYMxZ5xOIUcc5eithBgGvuHUv9nEY +Dart6XPC4z3YE9liwrxYwcBxztdvCA2EWeh1k0wNcrT/eJG3cuGgzsPDjI/BORq1 +DWFKJOXrWmhmIlw+VaQ6PIiD4/aQ50xfAgMBAAGjUDBOMB0GA1UdDgQWBBR98tbO +eDI9mBcuZ96keDld1w54OzAfBgNVHSMEGDAWgBR98tbOeDI9mBcuZ96keDld1w54 +OzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCavKK+pJCmWDqFNMoX +YwdRPDJS7LoCFV7C8oTkX5myCKNOi11bzlyqP/EkelubtRgaNr+GZCyhwxPiJvRx +ZrWsoWpOH8OEdADM9lU+UXR23Ufmo9jFFEL7jZ9u9OmOJWAM5xM1KqCBd5+KRvfE +oEHXdayfy6l00F+rsgaMm6IKdZcthAxVVEKO60GfwavcuvIiHVVLxW21H8BMoqd6 +Erigq7wJRRH+qm7Q5fVpmo1L7E6T2cBvGcFHKuQFdoxDlH4N6tPRDuRSODKFE//O +D1ViQY65nn35mawbz2AgUUPvWiBDYYomeKIiGl859PukeP1jwDZcECFtrhH4s1p+ +at2z +-----END CERTIFICATE----- diff --git a/docs/certs/ca.key b/docs/certs/ca.key new file mode 100644 index 0000000..ebb4f08 --- /dev/null +++ b/docs/certs/ca.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEA27faK2Z6E7c22iPfkvLqqr4vK6js4vm97URzmBPiVUDcVn/L +07yieZgw6waiAlctkgrcJMV4K4w3EUFSitSIg6sUOKGOgwmXrceIEIWJPcnIWLDz +yp0YPG0BBuPAzNRIZsYaM1L+5GolDEtCzTg38y0x/wtuTYYLd5WhgrXCFjkJYjvQ +FTsWphGrH2D9NQHy9qmoZNbOTe3yvaaC6W0fQUvGVGDMWecTiFHHOXorYQYBr7h1 +L/ZxGA2q7elzwuM92BPZYsK8WMHAcc7XbwgNhFnodZNMDXK0/3iRt3LhoM7Dw4yP +wTkatQ1hSiTl61poZiJcPlWkOjyIg+P2kOdMXwIDAQABAoIBAQC7SeS2yguVcr9X +Au05Hcfa83LSDJSghbHX5lmCcLClazxmn1jnjAwTCh/otyaySA2YR5mP3qOou0TV +eJEbtj8HvXTnMQ+Bs1OP1l2td6ac/LvCnlOximd2WpRdgxZ9gxaURJlg1oZfvfsG +l8DBngJTT1smxF+pxXFQ5kNeYACpXzDEN38paW2M4YFbEvFwp0lB1GbuozJ23RPw +lb1muYHPk8vqJHjnrJJAuX01HMB+RwOyVvLd+mdtmARga1yRFHxyoEml1APH8Kxq +KK11JsEGNOs+L8nC2NozoFxdR8OLi1p0c/n96XZevz3bSVrPddpc3YQ5Cn4ILR91 +d2d6EizBAoGBAO1aSji+KoF8hDgdNtG1QWDAd4L/E6vuzvTpmLqWnFZ3NAvhPrx7 +O5dQwXWhRnYzJu7iikeJowUPwlYz+SmnKCAhfR5bWvQPpb5/N0fna8T64QdBWa3k +YV6RUEe3jKqgZvadTSI3XrAV4m5bH6SbJXpaZKdPnxt7+yG5R1Iwg+GVAoGBAOz6 +5DHSt8JV8+L8NL59sieidwcQvKPrkcM4Dk4Tulh+U5Qvh4Yw1mfiBIq3y1irxAJM +ToaQvs/4BQHVw97t7+sgOPhe2e+H42up1ZeIGrvPuRoo/jplLcy2jM/k+Ll/ZwEG +XEAIwYEhXCmxXHqlgzpvDgZcqeP6lYn5P8uPTmEjAoGBAJQ3ZtPqRKbZd8OG0r2/ +31Sou7jMyp76ILilyt7xwCzqgVDN1pxipALIxhZLoLGdHbndM5aap3c4sRWdnQFa +xd7SqswzJif0QX8k+ANpy02VkMI0F+lUDU29lpFCWJAQXFuyPQGZ7AIvmFdrheYH +kC7IlcQ5H1VNZbRYe+YiL6jFAoGAdReqtSuG/JD3xsoTTaRR6N+PrIAKlXwKM8l4 +1/9LbfpNVcT+U8HBzuaQk/IomZGVcgU+L6NJhPzpjHSRKY+roiPzwlUrnf0o08PA +8/SeMPp8XX6vzy67KJFyli5u70kSHiGEZ2dsJV/UaA1ownkRlEfXSDF1CF6CkQAF +E5Glir0CgYEAxhcwMb1gbmdE9iFdS0J7mef7A6PBrQjNzRbqEb9+kFbUzr12LJ0j +5RJ9VXUBLwXDJ5lR1rtkdG9sgOoC5YQKVqiwpZbe9AO7a7+wSrteQKKMGBafBtVh +2VTpqC6pnVGfhKiM5nP/a89eoe9QazZSiEvJV5Q7K/yrp/lklJq4E2I= +-----END RSA PRIVATE KEY----- diff --git a/docs/certs/ca.srl b/docs/certs/ca.srl new file mode 100644 index 0000000..d9e8f10 --- /dev/null +++ b/docs/certs/ca.srl @@ -0,0 +1 @@ +C75F31B213340862 diff --git a/docs/certs/server.crt b/docs/certs/server.crt new file mode 100644 index 0000000..1efc4dc --- /dev/null +++ b/docs/certs/server.crt @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID2TCCAsGgAwIBAgIJAMdfMbITNAhiMA0GCSqGSIb3DQEBCwUAMF4xCzAJBgNV +BAYTAmNuMQswCQYDVQQIDAJnZDELMAkGA1UEBwwCZ3oxDzANBgNVBAoMBmFjZ2lz +dDEPMA0GA1UECwwGYWNnaXN0MRMwEQYDVQQDDAphY2dpc3QuY29tMB4XDTIzMDIy +NzEzMzg0OFoXDTMzMDIyNDEzMzg0OFowZTELMAkGA1UEBhMCY24xCzAJBgNVBAgM +AmdkMQswCQYDVQQHDAJnejEPMA0GA1UECgwGYWNnaXN0MQ8wDQYDVQQLDAZ0YW95 +YW8xGjAYBgNVBAMMEXRhb3lhby5hY2dpc3QuY29tMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAmeQvh6OwHR87DKvm04z1xjbHgh6fxi6y+5jMJ7K7LvPT +l+7haNB/eeSgEnHL38Naaw2cQvNkSAVPK210q574tQZW6Am2icRb9EJnMx2tKdaG +8QtTGxddScebyO++7qzf8CwECPRpsZRRp1a5ompCouDXY4VWJatXBMnZX05ZqUJH +0u6nioDwvd+YBOui4nGCxoF8tcVsidvHWx0JTfC7simyMp/5VvVYt7V4ENuU+3NT +wDF7sEW1z8Sx1ErE4NLQIyy+PpGmV+h2HgNb0Bnre+jq7v/1Ue2Irsd6xe9iHf3P +ji/mnkrRdAxd36KszFvmQjLAClJM1tRjc7gGyO8yCQIDAQABo4GSMIGPMAsGA1Ud +DwQEAwIF4DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwYQYDVR0RBFow +WIcEfwAAAYcEwKgBZIcEwKgBbocEwKgIZIcEwKgIboIJbG9jYWxob3N0ggphY2dp +c3QuY29tgg53d3cuYWNnaXN0LmNvbYIRdGFveWFvLmFjZ2lzdC5jb20wDQYJKoZI +hvcNAQELBQADggEBAKDYyUUMFDchfTYwEhUWHHtUpJTzVz2opAoKjUU2yH4pT4dT +Fb1s4NAuopoU9ycX4MJaApmxMioWwQzkoBLbnr+4RPfOYR9nlU0s+dx5JcpOgJtR +6X08ZDmW2DqhfIqR89uvIOgOU0oc6nUxQ0+doihDYyuyvXkvkZLjl8hrv6phuL8e +qhtx9++4umD3RYbRsASRmB8/iYTgi7WAvFyNM9kkS5pwkJOaHN+vtKx5xpytEROT +pbdUgGdXcYzYwzqDJ7Wbe0pIKeZ97rx6mF+0/92sWhd2U54jn5M1gp1sCQqG/syd +tER+0jG77mvqkls5VCNmUE1+pOa53MvB5TuTTsA= +-----END CERTIFICATE----- diff --git a/docs/certs/server.csr b/docs/certs/server.csr new file mode 100644 index 0000000..115e83b --- /dev/null +++ b/docs/certs/server.csr @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICqjCCAZICAQAwZTELMAkGA1UEBhMCY24xCzAJBgNVBAgMAmdkMQswCQYDVQQH +DAJnejEPMA0GA1UECgwGYWNnaXN0MQ8wDQYDVQQLDAZ0YW95YW8xGjAYBgNVBAMM +EXRhb3lhby5hY2dpc3QuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAmeQvh6OwHR87DKvm04z1xjbHgh6fxi6y+5jMJ7K7LvPTl+7haNB/eeSgEnHL +38Naaw2cQvNkSAVPK210q574tQZW6Am2icRb9EJnMx2tKdaG8QtTGxddScebyO++ +7qzf8CwECPRpsZRRp1a5ompCouDXY4VWJatXBMnZX05ZqUJH0u6nioDwvd+YBOui +4nGCxoF8tcVsidvHWx0JTfC7simyMp/5VvVYt7V4ENuU+3NTwDF7sEW1z8Sx1ErE +4NLQIyy+PpGmV+h2HgNb0Bnre+jq7v/1Ue2Irsd6xe9iHf3Pji/mnkrRdAxd36Ks +zFvmQjLAClJM1tRjc7gGyO8yCQIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAC2M +KwMJv8TKM7QL6UE3skEoMhXgxwwODuIBiiloySHmRsb+fVEYcF1f+gN9UxSVwaIx +BP7sb/+xy/N9G+28QVTbVlSc1MneQRPHjlx2MQqRHhfxtJ2/Zf6qFUuR2LimuHth +HwIgQotnUbe6C2630bNeYV5mOyF/rltw0pSoaPlMG9WsNtzZJ1LYzyNp5ztXPR3W +O2MkNQ3ZWqsR7dQXdUJbgruniwfxVGKxab6wBg+GZsHjiHujEmljjt3MIwimVDT+ +Z1V/R8C1Rlk98lJY5hSVBXZ09C5hox9NAvYkGfZ+ZqupOLoPOrvux7zETsDPxzV9 +mvAXPwkT0zVn/YvUCvo= +-----END CERTIFICATE REQUEST----- diff --git a/docs/certs/server.ext b/docs/certs/server.ext new file mode 100644 index 0000000..399f686 --- /dev/null +++ b/docs/certs/server.ext @@ -0,0 +1,14 @@ +keyUsage = nonRepudiation, digitalSignature, keyEncipherment +extendedKeyUsage = serverAuth, clientAuth +subjectAltName=@SubjectAlternativeName + +[ SubjectAlternativeName ] +IP.1=127.0.0.1 +IP.2=192.168.1.100 +IP.3=192.168.1.110 +IP.4=192.168.8.100 +IP.5=192.168.8.110 +DNS.1=localhost +DNS.2=acgist.com +DNS.3=www.acgist.com +DNS.4=taoyao.acgist.com diff --git a/docs/certs/server.key b/docs/certs/server.key new file mode 100644 index 0000000..a5522dc --- /dev/null +++ b/docs/certs/server.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAmeQvh6OwHR87DKvm04z1xjbHgh6fxi6y+5jMJ7K7LvPTl+7h +aNB/eeSgEnHL38Naaw2cQvNkSAVPK210q574tQZW6Am2icRb9EJnMx2tKdaG8QtT +GxddScebyO++7qzf8CwECPRpsZRRp1a5ompCouDXY4VWJatXBMnZX05ZqUJH0u6n +ioDwvd+YBOui4nGCxoF8tcVsidvHWx0JTfC7simyMp/5VvVYt7V4ENuU+3NTwDF7 +sEW1z8Sx1ErE4NLQIyy+PpGmV+h2HgNb0Bnre+jq7v/1Ue2Irsd6xe9iHf3Pji/m +nkrRdAxd36KszFvmQjLAClJM1tRjc7gGyO8yCQIDAQABAoIBAFSpGhTO0lZTFhM0 +hrofNB6liEBnRJKsoj6Tosy8IQoFjYRqIIufGGIgiodbH0OsnxOB21Nhvut4MEO9 +5Y9812oPYMQqg8dqxQOtfES8sMTxhi8ZgdDHm8S5EVULv8hiRphEPrwGahcNd5ZN +ubZGKv6cHyJa+jei+S5jNTifS+g2+hEvKyxRdoWFaRJTPeBPr4ayJevDY8zlllh6 +APqLYuJxMrgp0J/XSlwtFZ7O83opj0dt5sZiHV1drNytZU9PMSy6krkXPVV1Ahgo +QpIFKmrWjjk5ehyyGyexFmVKWCZenrLN14oOvxgKezV7PQwAhWWlpxMLEwP+e4Nu +o1aqgAECgYEAyMWFZnB5s0R//QhQm8uZEMbauAJtIWvfjWSR1Gtb9g+ykoYOv5TB +2nG/yCrbtrDvMPYP9ZTG/dB0+PmtJQPNy+ZyIdOeeVACKAzvBQnfUKV8soSsh79+ +RI/GJXfNJ+GcJv1F5t3pEOY/xmp6aZIdTCBkjzseyJAaRLLQzZXMKAECgYEAxDlT +aSbjyeZomsaN/WSny0qT61spfYOgJyy/B5SLY6ZFRS7p60IjSeAr5LoD4pmqK4B9 +pM7KHPvWyRGkeCqx8A7rJ1VkpwapZn+Lv9SsUpyW9SWqo/0cQ0U/Hu1dBfULdypH +uQDS1xIrQqLEeA9yLyB90pEvTHHjHybZvcUxygkCgYEAjCqqGXyI2okGOedmL36S +3E2YQUMgYWboadQ+o2hYiY8oAnepMENwm0sys1KIliEsvKftOGyoCGdSYsgdA2yG +bsXyBH+zccpT1xZAgOoFiE4goplRwmwEgWVG1r2u8xrlY6sK9EUVBAFboPCRicbC +wXUT/5MsyKUiUbftYrokEAECgYEAgF/wzg5/YIu5S+ky4+CCVmHIPGY70r3WfUqs +/8yTFPKmxwhWSW/PnnlmvhFkkU9vIV7C1JvlZujsMEe2jleAakmYVvdrDksxcLlp +OGtvAe0oZeHqrbbeUrRvA1DPVyJmCeRDYCnFxqdAXiwW1WVlkqdzKduKUj0AFlVY +husIE+ECgYEAt3DPoPHcAb5PSyoWm2r1FS7j7a0tMGHSDIkUwSRRaB77g7IP1I1N +jzJmd5VZm69vwXbaxPtJ0YM5SrIq8HbBfNjJmPRinEZjkeq2vrUw8lzoTTZh35Wg +wgni/eFijGhBkSXcvDuZ2QNi3jtQtaiMwBohGNCjCtfGss/41RNpmGU= +-----END RSA PRIVATE KEY----- diff --git a/docs/certs/server.p12 b/docs/certs/server.p12 new file mode 100644 index 0000000..ae37c90 Binary files /dev/null and b/docs/certs/server.p12 differ diff --git a/taoyao-signal-server/docs/nginx/nginx.conf b/docs/nginx/nginx.conf similarity index 92% rename from taoyao-signal-server/docs/nginx/nginx.conf rename to docs/nginx/nginx.conf index eb519cf..88ef679 100644 --- a/taoyao-signal-server/docs/nginx/nginx.conf +++ b/docs/nginx/nginx.conf @@ -37,8 +37,8 @@ http { server { listen 80 default_server; listen 443 ssl default_server; - ssl_certificate /data/ssl/taoyao.acgist.pem; - ssl_certificate_key /data/ssl/taoyao.acgist.key; + ssl_certificate /data/certs/server.crt; + ssl_certificate_key /data/certs/server.key; error_page 497 https://$host:$server_port$request_uri; return 301 https://taoyao.acgist.com$request_uri; } @@ -49,8 +49,8 @@ http { access_log /var/log/nginx/taoyao.acgist.com.log main buffer=32k flush=10s; - ssl_certificate /data/ssl/taoyao.acgist.com.pem; - ssl_certificate_key /data/ssl/taoyao.acgist.com.key; + ssl_certificate /data/certs/server.crt; + ssl_certificate_key /data/certs/server.key; ssl_ciphers TLS13-AES-128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-CBC-SHA256:ECDHE-ECDSA-AES128-CBC-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1.2 TLSv1.3; ssl_session_timeout 30m; diff --git a/taoyao-client-media/README.md b/taoyao-client-media/README.md index 6022ec8..e4096a3 100644 --- a/taoyao-client-media/README.md +++ b/taoyao-client-media/README.md @@ -31,7 +31,7 @@ make -C worker ``` +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | HTTPS / WSS | | SCTP | SRTP / SRTCP | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ICE / SDP / SIP +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ICE / SDP +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | TLS | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ DTLS +-+-+-+-+-+-+-+-+-+ | HTTP / WS | NAT / STUN / TURN | | RTP / RTCP | @@ -44,18 +44,15 @@ make -C worker ### 协议简介 -* 会话通道:ICE/SIP/SDP +* 会话通道:ICE/SDP * 媒体通道:RTP/RTCP/SRTP/SRTCP -* RTP:实时传输协议(音频视频) -* RTCP:RTP传输控制协议(监控数据传输质量并给予数据发送方反馈) -* SCTP:流控制传输协议(自定义的应用数据传输) -* RTMP:实时消息传送协议 -* RTSP:可以控制媒体(点播) - -### ICE/SDP/SIP - -ICE信息的描述格式通常采用标准的SDP,其全称为Session Description Protocol,即会话描述协议。
-SDP只是一种信息格式的描述标准,不属于传输协议,但是可以被其他传输协议用来交换必要的信息,例如:SIP、RTSP等等。 +* SDP:会话描述协议(只是信息格式描述标准不是传输协议) +* ICE:交互式连接建立(使用标准SDP描述) +* RTP:实时传输协议 +* RTCP:RTP控制协议(监控数据传输质量提供反馈) +* SCTP:流控制传输协议 +* RTSP:实时流传输协议(依赖RTP协议实时性好适合视频聊天视频监控) +* RTMP:实时消息传输协议 ## 其他常见WebRTC媒体服务 diff --git a/taoyao-client-media/src/Config.js b/taoyao-client-media/src/Config.js index 783c7c6..94d81b6 100644 --- a/taoyao-client-media/src/Config.js +++ b/taoyao-client-media/src/Config.js @@ -117,20 +117,20 @@ module.exports = { // WebRtcServer:https://mediasoup.org/documentation/v3/mediasoup/api/#WebRtcServerOptions webRtcServerOptions: { listenInfos: [ + // UDP { protocol: "udp", ip: process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", port: 44444, - // 公网地址 - announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || "192.168.1.110", - }, - { - protocol: "tcp", - ip: process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", - port: 44444, - // 公网地址 announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || "192.168.1.110", }, + // TCP + // { + // protocol: "tcp", + // ip: process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", + // port: 44444, + // announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || "192.168.1.110", + // }, ], }, // WebRtcTransport:https://mediasoup.org/documentation/v3/mediasoup/api/#WebRtcTransportOptions @@ -138,7 +138,6 @@ module.exports = { listenIps: [ { ip: process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", - // 公网地址 announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || "192.168.1.110", }, ], @@ -151,7 +150,6 @@ module.exports = { plainTransportOptions: { listenIp: { ip: process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", - // 公网地址 announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || "192.168.1.110", }, maxSctpMessageSize: 262144, diff --git a/taoyao-client-media/src/Server.js b/taoyao-client-media/src/Server.js index 6966b18..a5cc552 100644 --- a/taoyao-client-media/src/Server.js +++ b/taoyao-client-media/src/Server.js @@ -44,7 +44,7 @@ async function buildMediasoupWorkers() { JSON.stringify(config.mediasoup.webRtcServerOptions) ); for (const listenInfo of webRtcServerOptions.listenInfos) { - listenInfo.port = listenInfo.port + mediasoupWorkers.length - 1; + listenInfo.port = listenInfo.port + mediasoupWorkers.length; } const webRtcServer = await worker.createWebRtcServer(webRtcServerOptions); worker.appData.webRtcServer = webRtcServer; diff --git a/taoyao-client-media/src/Signal.js b/taoyao-client-media/src/Signal.js index a714a25..de0afb7 100644 --- a/taoyao-client-media/src/Signal.js +++ b/taoyao-client-media/src/Signal.js @@ -9,15 +9,23 @@ const protocol = { // 当前索引 index: 0, // 最大索引 - maxIndex: 1000, + maxIndex: 999, + // 终端索引 + clientIndex: 99999, /** * @returns 索引 */ buildId() { - if (++this.index >= this.maxIndex) { + if (++this.index > this.maxIndex) { this.index = 0; } - return Date.now() * 1000 + this.index; + const date = new Date(); + return 100000000000000 * date.getDate() + + 1000000000000 * date.getHours() + + 10000000000 * date.getMinutes() + + 100000000 * date.getSeconds() + + 1000 * this.clientIndex + + this.index; }, /** * 生成信令消息 @@ -188,15 +196,15 @@ const signalChannel = { ); }, /** - * 推送消息 + * 异步请求 * * @param {*} message 消息 */ - push(message) { + push(message) { try { this.channel.send(JSON.stringify(message)); } catch (error) { - console.error("推送消息异常:", message, error); + console.error("异步请求异常:", message, error); } }, /** @@ -375,6 +383,9 @@ class Signal { case "client::shutdown": this.clientShutdown(message, body); break; + case "client::register": + protocol.clientIndex = body.index; + break; case "media::ice::restart": this.mediaIceRestart(message, body); break; @@ -400,15 +411,19 @@ class Signal { } /** - * 通知信令 + * 异步请求 * * @param {*} message 消息 */ push(message) { - signalChannel.push(message); + try { + signalChannel.channel.send(JSON.stringify(message)); + } catch (error) { + console.error("异步请求异常:", message, error); + } } - /** + /** * 同步请求 * * @param {*} message 消息 @@ -416,24 +431,24 @@ class Signal { * @returns Promise */ async request(message) { - const self = this; + const me = this; return new Promise((resolve, reject) => { let done = false; // 注册回调 - self.callbackMapping.set(message.header.id, (response) => { + me.callbackMapping.set(message.header.id, (response) => { resolve(response); done = true; }); // 发送消息 try { - self.channel.send(JSON.stringify(message)); + signalChannel.channel.send(JSON.stringify(message)); } catch (error) { - console.error("请求消息异常:", message, error); + reject("同步请求异常", error); } // 设置超时 setTimeout(() => { if (!done) { - self.callbackMapping.delete(message.header.id); + me.callbackMapping.delete(message.header.id); reject("请求超时", message); } }, 5000); diff --git a/taoyao-client-web/src/App.vue b/taoyao-client-web/src/App.vue index f925729..0795c0a 100644 --- a/taoyao-client-web/src/App.vue +++ b/taoyao-client-web/src/App.vue @@ -83,7 +83,7 @@