Я свободно настроил систему потоковой передачи камеры, используя https://github.com/phoboslab/jsmpeg.git
Я использую ffmpeg для вывода потока на https://localhost:8081/...
Используя websocket-relay-secure
для подключения к этому порту 8081 к порту 8082
http-server
в режиме SSL, обслуживающему страницу на порту 8080, которая включает в себя:
<canvas id="video-canvas"></canvas>
<script type="text/javascript" src="jsmpeg.min.js"></script>
<script type="text/javascript">
var canvas = document.getElementById('video-canvas');
var url = 'wss://'+document.location.hostname+':8082/';
var player = new JSMpeg.Player(url, {canvas: canvas});
</script>
Когда я go на https://example.com:8080/view-stream.html
, он красиво потоковый.
Мне действительно нужно перенаправить этот поток через порт 443 на моем Apache сервере, так как там происходит много других вещей, связанных с этим, и люди, желающие увидеть поток, не могут пройти через что-либо, кроме портов 80 и 443 (очень осторожно ITP people)
У меня есть (или я хочу перевести в потоковое состояние) структура что-то вроде:
https://example.com
|
- /docs
- /otherdocs
- /streaming/cam1 <- where the streaming goes
Так что я бьюсь по голове, пытаясь изменить мой Apache conf файл используя proxy_wstunnel и т.п. (как минимум, я убрал свои ошибки):
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/example.com/public
ErrorLog /var/www/example.com/logs/error.log
CustomLog /var/www/example.com/logs/access.log combined
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
Header set Access-Control-Allow-Origin "*"
</VirtualHost>
</IfModule>
Я бы хотел иметь возможность перейти к https://example.com/streaming/cam1
и увидеть там поток на холсте. Это возможно, или я тратил много времени? В идеале я могу добавить cam2 на порт 8084 и c позже.
Далее - добавление решения на случай, если это может помочь другим
Добавление потоков камеры на портах 8083 и 8085
Мой Apache файл conf (работает) теперь:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/example.com/public
ErrorLog /var/www/example.com/logs/error.log
CustomLog /var/www/example.com/logs/access.log combined
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
Header set Access-Control-Allow-Origin "*"
<Directory "/var/www/example.com/public/streaming/cam1">
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule .* wss://localhost:8082 [P,L]
</Directory>
<Directory "/var/www/example.com/public/streaming/cam2">
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule .* wss://localhost:8084 [P,L]
</Directory>
<Directory "/var/www/example.com/public/streaming/cam3">
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule .* wss://localhost:8086 [P,L]
</Directory>
SSLProxyEngine on
ProxyPass /streaming/cam1 wss://localhost:8082/
ProxyPassReverse /streaming/cam1 wss://localhost:8082/
ProxyPass /streaming/cam2 wss://localhost:8084/
ProxyPassReverse /streaming/cam2 wss://localhost:8084/
ProxyPass /streaming/cam3 wss://localhost:8086/
ProxyPassReverse /streaming/cam3 wss://localhost:8086/
</VirtualHost>
</IfModule>
Там может быть избыточный материал - я открыт для улучшения:)