2017-05-24 14 views
1

나는 많은 시간을 들여 답변을 검색하고 모든 것을 시도했다고 믿습니다. rtmp 스트림을 HLS 스트림으로 푸시하는 nginx 서버를 실행 중입니다. 다음은 nginx - auth_request를 통해 HLS 스트림을 보호하려고 시도했습니다.

는 일치하면 내가 다음 URL에서 매개 변수를 받고 오전 PHP 페이지를 통해 스트림을 인증하기 위해 노력하고

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; 
    } 

는 200 OK 응답 내 nginx.conf의 일부입니다 내 DB에 토큰.

지금까지 인증을 관리 했으므로 토큰이 일치하는 경우 http://SERVER:8080/hls/stream.m3u8?token=TOKEN에 액세스 할 수 있음을 의미하지만 여기에는 어떤 일이 발생합니까?

나는 대역폭에 따라 스트림을 적응 메인 M3U8 스트림을 가지고, 내가 콘솔에서 stream.m3u8에 액세스 할 때 나는 매개 변수가 그나마 때문에 마지막 세 M3U8는 404 응답이

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 

참조 통과하므로 절대 URL이로드되지 않는 스트림이 있습니다. 또한 m3u8 자체에서 .ts 파일도 404를 얻습니다.

첫 번째 m3u8에 대한 첫 번째 호출이 인증 될 때마다 나머지 m3u8 및 ts 파일에 액세스하거나 200을 반환 할 수 있습니다. 코드?

는 정말 감사합니다 좀 더 자세한 내용

으로 제공 할 수있는, 나 자신은 분명히 희망 인증 결과가 요청간에 공유되지 않는 모든

답변

1

. 에 대한 모든 새 요청에 모두 변형 재생 목록 미디어 세그먼트를 동일한 토큰을 제공해야합니다.

이렇게하려면 마스터 및 변형 HLS 매니페스트를 모두 다시 작성하고 포함 된 각 URL에 토큰을 추가해야합니다. 한 가지 해결책은 PHP 래퍼를 사용하여 모든 .m3u8 요청을 가로 채고 재생 목록을 구문 분석 한 다음 토큰을 직접 추가 한 다음 정확한 MIME 유형 (application/x-mpegURL 또는 vnd.apple.mpegURL)으로 결과를 반환하는 것입니다.

최종 메모로서 재사용을 피하기 위해 서명 된 토큰을 사용해야합니다.