2013-02-08 51 views
1

我已经创建了C#Asp.Net的一类,它作为一个IHttpHandler在为了得到影片在流的形式处理一些特殊的要求,从MS检索使用VLC Web插件时缺少Asp.Net会议SQL Server 2008数据库。 从前端我使用VLC播放器的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的背景下)方法我的IHttpHandler类,非常首先我检查为用户的Asp.Net会议从“背景”参数,像这样:

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

的问题是:使用VLC播放器Web插件,context.Session["LoggedinUser"]总是为null。 如果我使用Windows媒体播放器Web插件请求相同的文件,我确实得到了提及的会话信息,但没有使用VLC。

如果某种问题与VLC媒体播放器?

回答

0

按我发现,使用VLC网页插件,你就没有办法在服务器上访问你的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。

嗯,这是我的工作的情况下一种解决方法。可能是别人有比这更好的方法。