2016-03-23 20 views
3

私はいくつかのセグメントを含むHLSプレイリスト(m3u8)を提供する小さなシステムを作ろうとしています。1つの許可された接続とPHPでHTTPライブストリーミング

セグメントはPHPからロードされ、送信されます。

segment.php?stream=1&username=X&password=X&file=01.ts 
segment.php?stream=1&username=X&password=X&file=02.ts 

今、私はすでにそのシステムを作り、正常に動作しているが、それは接続を制限するために来るとき、私は本当に多くの問題を抱えている:例えば、セグメントは次のようになります。一般的に、私は単一のクライアント(uname/pass)を制限したいので、一度に1つのストリームしか開くことができません。

のは、我々は次の形式

1.m3u8 
2.m3u8 

で2つのストリームを持っていると私は、この(PHP URLはPHPファイルに書き直し)のようにそれらを呼び出すことを言ってみましょう:

http://site/1.m3u8?username=X&password=X 
http://site/2.m3u8?username=X&password=X 

そして、これらのそれぞれが持っています上記のセグメントは上に説明しました。彼は時間ではなくは彼が第二チャンネルに切り替えるためにLET同時にONLY 1接続(最初を閉じる)を開くことができるように

は、どのように私は何の問題もなく、各クライアントを制限するのですか?

私はこれを理解するために何時間も費やしてきましたが、常に何かがうまく機能していません。

私にコードを提供する必要はありません。ちょっとしたアイデアや助けになる計画です。

また、NGINXを使用しています。

+0

他に何を使用していますか?ブラウザ?あなたはセッションを使っていますか?クッキー?データベース? – DOfficial

+0

保存用データベース。ブラウザやVLCのようなプレイヤーでもかまいませんので、クッキーは一切ありません。 – OhGodWhy

+0

セッションIDとURLをデータベースに保存して、次回に存在するかどうかを確認しようとしましたか?もちろん、有効期限と検証の仕組みがあります。 –

答えて

0

あなたが提供した情報に基づいて達成しようとしていることを正確に判断するのは難しいですが、ここには考えがあります。

データベースを使用してください。少なくとも2つのテーブルが必要です。

  1. Userテーブルには、パス、ステータスやユーザーID

    ​​
  2. だと各ストリームストリームテーブルストアで
  3. ストリームテーブル

    (あなたはおそらくすでにこのユーザーを持って与えています)

ユーザーが最初のストリームを開いたときにステータスがアクティブ(1)に設定され、2番目のストリームが非アクティブ(0)に設定され、ユーザーが開くと第2のストリームは、このストリーム状態をアクティブ(1)に設定し、前のストリームを非アクティブ(0)に設定する。

クライアント側では、使用しているストリームがアクティブであるかどうかをチェックし、非アクティブな場合はストリームを破棄します。

セキュリティ上の理由から、ストリームでユーザーの情報を渡すことは望ましくありません。この方法では、必ずしもそうする必要はありません。データベースはユーザーを認証し、そこからアクセスできるストリームとそのステータスを照会できます。クエリにさらにダイナミクスが必要な場合は、ストリームテーブル、user_streams、stream_statusなどの複数のテーブルにわたって値を分割できますが、そうでない場合はストリームに対して1つのテーブルが行います。

正確なシナリオの詳細をご希望の場合は、私の回答を更新してください。

+0

_ "ユーザーが2番目のストリームを開くと、このストリームのステータスが設定されます(1)と前回のストリームを非アクティブ(0)に変更する "_ - それはうまくいくかもしれませんが、UXの観点からはむしろ失礼に見えます。最初のストリームを引き続き再生させ、その後に要求された2番目のストリームを再生することを拒否すると、よりユーザーフレンドリーなように見えます。しかし、これは問題が複雑になることは認めています。なぜなら、ストリームがいつ再生されたのか停止したのかを判断する信頼できる方法が必要であるからです(少なくとも、HTTPベースのストリーミング]、またはタイムアウトを使用してください。 – CBroe

+0

あなたのコメントは、達成しようとしていることについての仮定を仮定していると思います。元の質問を再読した後、彼は接続を制限したいと思う。フロントエンドには、ユーザーが最初のストリームを閉じることを確認するように促すなど、多くの方法があります。または、これが設定された長さのストリームであれば、exifメタデータを掘り下げて持続時間を保存し、最初のストリームが終了したときに2番目のストリームを開くことができます。それ以外の場合は、オーディオストリームプレーヤーの場合は、次のものを開く前に最初のものを破壊するのが理にかなっています。 – DOfficial

+0

オーディオプレーヤーのシンプルな「次のトラックにスキップする」機能は、ユーザーごとの人為的に強制される制限を必要としないでしょう - この機能は標準のプレーヤーでは「内蔵」されています。あなたは別のトラックを開始し、現在のトラックは再生を停止し、ブラウザ/プレーヤーは現在再生されているストリーム/トラックのリクエストを停止します。だから私はその質問の目的も疑っている。 – CBroe

関連する問題