1

IHttpHandlerMS SQL Server 2008 データベースから取得したストリームの形式でビデオを取得するために、いくつかの特別な要求を処理するためのクラスを C# Asp.Net で作成しました。フロントエンドから、VLC Player の Web プラグインを使用して、次のような埋め込みタグを使用してこれらのビデオ ストリームを要求しています。

<embed type="application/x-vlc-plugin" pluginspage="http://www.videolan.org"
 width="840" height="472" name="vlcPlayerExtraFeatures"
 id="vlcPlayerExtraFeatures" target="http://my-pc/MyWebApp/file.ivd?VideoID=123"
 autoplay="true" windowless="true" bgcolor="#000000" />
   <object classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"
   codebase="http://download.videolan.org/pub/videolan/vlc/last/win32/axvlc.cab">
   </object>

ProcessRequest(HttpContext context)メソッドの IHttpHandler クラスでは、まず、次のように「context」パラメーターからユーザーの Asp.Net セッションを確認します。

if (context.Session["LoggedinUser"] == null) {
    //do bla bla bla
}

問題は次のとおりです。VLC プレーヤー Web プラグインを使用すると、context.Session["LoggedinUser"]常にnull. Windows Media Player Web プラグインを使用して同じファイルを要求すると、言及されたセッション情報は取得されますが、VLC では取得されません。

これが VLC メディア プレーヤーに何らかの問題がある場合はどうなりますか?

4

1 に答える 1

0

私の発見によると、VLC Webプラグインを使用すると、サーバー上のAsp.Netセッションにアクセスする方法がありません. 私は別の回避策を実行しました。VLC 埋め込みタグを保持するページのコード ビハインド。ページの読み込み時に、VLC 埋め込みタグの URL パラメーターの値に、次の形式のバイパス トークンが追加されます。

<OBJECT id="vlc" width="840" height="472" 
CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" type="application/x-oleobject">
<PARAM NAME="URL" VALUE="http://mysite.com/video.ivd?videoId=myvideo1234&videoToken=some_token_with_expiry_date" />
<PARAM NAME="SendPlayStateChangeEvents" VALUE="True" />
<PARAM NAME="AutoStart" VALUE="True" />
<PARAM NAME="ShowControls" value="True" />
</OBJECT>

注: この URL のクエリ文字列部分はここでは暗号化されていませんが、実際のページでは暗号化されています (実際には page_load メソッドで行われます)。

VLC がカスタム IHttp ハンドラーからビデオを要求すると、ハンドラーでクエリ文字列部分が復号化され、提供されたビデオ トークンの有効期限からトークンの有効性が評価されます。まだ有効な場合、ビデオはクライアントにストリーミングされます。それ以外の場合、リクエストは拒否されるため、クライアントはこの URL を無期限に使用しない可能性があります。

これは私のケースでうまくいった回避策です。他の誰かがこれよりも優れたアプローチを持っているかもしれません。

于 2013-03-16T15:43:40.267 に答える