Я взял контейнер vstavrinov/acestream-engine:latest, хотел разместить его на хостинге для трансляции, но при http запросах на сервер возникает ошибка CORS. Возможно как-то разрешить политику CORS на сервере Ace Stream engine?
FROM python:3.8
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
ENV BASE_URL="https://download.acestream.media/linux"
ENV ACE_VERSION="3.1.75rc4_ubuntu_18.04_x86_64_py3.8"
ENV PYTHONDONTWRITEBYTECODE=0
RUN useradd --shell /bin/bash --home-dir /srv/ace --create-home ace
USER ace
WORKDIR /srv/ace
ADD setup.cfg .
RUN curl --progress-bar $BASE_URL/acestream_$ACE_VERSION.tar.gz | tar xzf -; \
cd lib; unzip \*.egg; rm *.egg; cd; \
ln -s /dev/shm/.ACEStream .ACEStream; \
pip install --no-cache-dir --upgrade --requirement requirements.txt
CMD mkdir /dev/shm/.ACEStream; \
./start-engine \
--client-console \
--live-cache-type memory
Hello, I have placed a docker container on the hosting. I want to make requests there and get a response as m3u8. Only I get a response in the form of .ts returned with port 6878 (with port does not work, only without port). Question, how can I fix it?
Benny
August 1, 2024, 5:21pm
3
Без понимания конечной цели на этот вопрос трудно ответить однозначно:
если цель в том, чтобы дать клиенту веб-интерфейс к уже запущенному на устройстве пользователя движку Ace Stream, то см. JavaScript Library - Ace Stream Wiki
если же цель в том, чтобы отдавать уже готовый HTTP поток или HLS/M3U плейлист, который воспроизводится в плеере, и не требует запущенного на устройстве пользователя движка Ace Stream, то сам движок нужно “прятать” за прокси сервером - “прямым” (HTTP AceProxy ) или “обратным” (nginx).
В случае nginx сам движок лучше запускать на отдельном IP/хосте, тогда конфиг nginx может выглядеть как-то так:
HTTP
server {
listen 6878;
server_name ace.host;
return 301 http://$server_name:80$request_uri;
}
server {
listen 80;
server_name ace.host;
access_log /var/log/nginx/ace_access.log;
error_log /var/log/nginx/ace_error.log;
location / {
proxy_pass http://ace_engine_IP:6878;
proxy_read_timeout 300;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect http://ace.host:6878/ http://ace.host:80/;
proxy_intercept_errors on;
}
}
или
HTTPS
server {
listen 80;
server_name ace.host;
return 301 https://$server_name:443$request_uri;
}
server {
listen 6878;
server_name ace.host;
return 301 https://$server_name:443$request_uri;
}
server {
listen 443 ssl http2;
server_name ace.host;
access_log /var/log/nginx/ace_access.log;
error_log /var/log/nginx/ace_error.log;
location / {
proxy_pass http://ace_engine_IP:6878;
proxy_read_timeout 300;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect http://ace.host:6878/ https://ace.host:443/;
proxy_intercept_errors on;
}
}
С CORS разобрался, возникает другая проблема. Получаю .m3u8, начинается подгрузка .ts для трансляции, но на 3-4 части происходит ошибка в браузере.
На firefox:
NS_BINDING_ABORTED
На chrome:
canceled
Он принимает первые 2 .ts файла и дальше не отвечает. С чем это может быть связано?
Скриншот из Firefox : https://post-images.org/photo-page.php?photo=YsyoHMTC
Ответ с сервера nginx
127.0.0.1 - - [05/Aug/2024:09:39:20 +0000] "GET /ace/m/88c482d9e57b1a031c032344f9c00cf7b36da8d9/f528764d624db129b32c21fbca0cb8d6.m3u8 HTTP/1.1" 200 186 "http://localhost:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0"
127.0.0.1 - - [05/Aug/2024:09:39:21 +0000] "GET /ace/m/88c482d9e57b1a031c032344f9c00cf7b36da8d9/f528764d624db129b32c21fbca0cb8d6.m3u8 HTTP/1.1" 200 283 "http://localhost:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0"
127.0.0.1 - - [05/Aug/2024:09:39:21 +0000] "GET /ace/c/88c482d9e57b1a031c032344f9c00cf7b36da8d9/0.ts HTTP/1.1" 200 5150072 "http://localhost:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0"
127.0.0.1 - - [05/Aug/2024:09:39:24 +0000] "GET /ace/m/88c482d9e57b1a031c032344f9c00cf7b36da8d9/f528764d624db129b32c21fbca0cb8d6.m3u8 HTTP/1.1" 200 478 "http://localhost:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0"
127.0.0.1 - - [05/Aug/2024:09:39:25 +0000] "GET /ace/c/88c482d9e57b1a031c032344f9c00cf7b36da8d9/1.ts HTTP/1.1" 200 5912222 "http://localhost:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0"
Обращаясь через POSTMAN напрямую я получаю ответ со статусом 200 и 9мб фрагмент трансляции