Я потратил много времени на поиск ответов и, поверьте мне, я перепробовал все.
Я использую сервер nginx, который передает потоки rtmp в потоки HLS.
Ниже часть моего nginx.conf
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
}
root /mnt/;
set $auth_request_uri "http://SERVER:8000/auth_ext.php?token=$arg_token";
auth_request /auth/;
add_header Cache-Control no-cache; # Prevent caching of HLS fragments
add_header Access-Control-Allow-Origin *; # Allow web player to access our playlist
}
location /auth/ {
internal;
proxy_pass $auth_request_uri;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
Я пытаюсь аутентифицировать поток через страницу php, где я получаю параметры из URL, а затем отвечает 200 OK, если он соответствует токену в моей БД.
Пока мне удалось пройти проверку подлинности, то есть я могу получить доступ HTTP: // SERVER: 8080 / HLS / stream.m3u8 маркер = ЗНАК если токен совпадает, но вот что происходит.
У меня есть основной поток m3u8, который адаптирует потоки в соответствии с пропускной способностью, и когда я получаю доступ к stream.m3u8 в консоли, я вижу это
http://SERVER:8080/hls/stream.m3u8?token=TOKEN
http://SERVER:8080/hls/stream_mid.m3u8
http://SERVER:8080/hls/stream_hd720.m3u8
http://SERVER:8080/hls/stream_src.m3u8
где последние три m3u8 отвечают 404, потому что параметры не проходят, поэтому у меня есть поток, который никогда не загружается, но URL отвечает.
Более того, в самих m3u8 файлы .ts также получают 404.
Как с этим справиться, чтобы при проверке подлинности ОДНОГО первого вызова первого m3u8 оставшиеся файлы m3u8 и ts могли быть доступны или возвращать код 200?
Я действительно надеюсь, что я дал понять, я могу предоставить более подробную информацию
Спасибо вам всем
Результат аутентификации не распределяется между запросами. Вы должны предоставлять один и тот же токен при каждом новом запросе все варианты плейлистов а также медиа сегменты.
Для этого вам нужно переписать как основной, так и вариантный манифесты HLS и добавить токен в каждый содержащийся URL. Одним из решений является использование PHP-оболочки для перехвата всех .m3u8
запросы, анализируют списки воспроизведения и добавляют токен на лету, а затем возвращают результат с правильным типом MIME (application/x-mpegURL
или же vnd.apple.mpegURL
).
В качестве последнего замечания вы должны использовать подписанный токен, чтобы избежать повторного использования.
Других решений пока нет …