Недавно, появилась необходимость провести нагрузочный тест для Wowza Streaming Engine, а именно WebRTC.nnЕсли проблем с передачей медиа на сервер не оказалось, в плане нагрузки и формирования трафика, то вот со «зрителями» пришлось повозиться. На помощь пришел продукт, хорошо известный тестировщикам – Selenium WebDriver.nnПосле установки и написания нескольких строчек кода на питоне, по логике должно было произойти следующее:n
- На каждый стрим с интервалом 10 секунд, заходит «зритель»
- Открывает браузер и переходит на подготовленную страницу
- Вводит ID стрима и адрес сервера, где крутится вовза
- Нажимает просмотр и смотрит видео в течении определенного времеи
- Спустя некоторое время, отключается от стрима и закрывет окно браузера
Вроде все просто, но сейчас пойдет речь, о том, что же я упустил и как легко это решается.nnВовза, для просмотра стримов, как и для стриминга по WebRTC использует wss, что уже нам намекает на SSL. Да, в наше время можно обойтись самоподписанным сертификатом, но можно использовать сертификат от Let’s Encrypt или тот же acme.sh.nnПоследним я и воспользовался и долго не мог понять, почему вручную, под виндой все ОК, а под Ubuntu 16.04 не открываются стримы и самое главное, скрипт говорит, что все ок. Страница загрузилась и честно отработала.nnРешил посмотреть что же будет, под чистой виндой. И о!!! Да!!! Вот оно.nnСейчас уже не видно, так как я добавил корневой сертификат, но на момент тестов, корневой сертификат не был доверенным. И никакие ключи(хотя под виндой работало нормально) по типуnn—ignore-certificate-errors не помогали.nnВ общем, все решилось простым добавлением сертификата к доверенным. Ниже, как всегда, небольшой срипт, который поможетnnНам понадобится:n
- n
- Установить
n
n
$ sudo apt-get install libnss3-toolsn$ sudo apt-get install curl
n
- n
- Скачать и установить
n n
$ curl -k -o "cacert-root.crt" "http://www.cacert.org/certs/root.crt"n$ curl -k -o "cacert-class3.crt" "http://www.cacert.org/certs/class3.crt"n$ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "CAcert.org" -i cacert-root.crtn$ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "CAcert.org Class 3" -i cacert-class3.crt
n
- n
- И сам скрипт под названием – importing -cert.sh
n n
#!/bin/shn#n# usage: import-cert.sh remote.host.name [port]n#nREMHOST=$1nREMPORT=${2:-443}nexec 6>&1nexec > $REMHOSTnecho | openssl s_client -connect ${REMHOST}:${REMPORT} 2>&1 |sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'ncertutil -d sql:$HOME/.pki/nssdb -A -t TC -n "$REMHOST" -i $REMHOSTnexec 1>&6 6>&-
$ certutil -D -n -d sql:$HOME/.pki/nssdb
После того, как я все выполнил, уже с облегчением запустил новый тест. И тут была печаль.
nnЗаключалась она в том, что я то внес сертификат сайта, но не корневой сертификат.nnНе беда. Открываем сертификат сайта, выбираем корневой сертификат и экспортируем его в BASE64.nnДалее, как в пункте 2, импортируем его. ВСЕ!!! Теперь 100% заработает. У меня заработало.nnКому интересно, вовза выдержала 800 зрителей на 10 стримах(80 зрителей на каждом) и нагрузка по CPU была в пике – 70%
Нужна реализация такой задачи или подобной, обращайтесь [email protected]