2017-05-24 2 views
1

私は多くの時間をかけて答えを探し出し、私はすべてを試しました。 rtmpストリームをHLSストリームにプッシュするnginxサーバーを実行しています。以下はnginx - auth_requestを使ってHLSストリームを保護しようとしています

私はURLからパラメータを取得し、それが一致した場合はOK 200に応答していますPHPページを通じてストリームを認証しようとしています私の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; 
    } 

の一部です。私のDBのトークン。

これまでのところ、私は認証することができました。つまり、トークンが一致していればhttp://SERVER:8080/hls/stream.m3u8?token=TOKENにアクセスできますが、ここでは何が起こるのですか。

私は、帯域幅に応じてストリームを適応メインM3U8ストリームを持っている、と私はコンソールでstream.m3u8にアクセスしたとき、私はパラメータはいけないので、最後の3 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ファイルも取得する最初のM3U8へONE最初のコールが認証されているときには、このように、残りのM3U8とTSファイルにアクセスすることが可能に対処または200を返す方法404

コード?

私は本当に私は自分自身を明らかにした願って、私は

はすべて

答えて

1

認証結果が要求間で共有されていないありがとうの詳細を提供することができます。 すべてバリエーションの再生リストのメディアセグメントに対して、同じ新しいトークンを同じトークンで提供する必要があります。

これを実現するには、マスターHLSマニフェストとバリアントHLSマニフェストの両方を書き換え、含まれている各URLにトークンを追加する必要があります。 1つの解決策は、PHPラッパーを使用してすべての.m3u8リクエストを傍受し、プレイリストを解析し、そのトークンをオンザフライで追加し、結果を正しいMIMEタイプ(application/x-mpegURLまたはvnd.apple.mpegURL)で返します。

最終的には、再利用を避けるために、署名付きトークンを使用する必要があります。

関連する問題