通过embed标签使用VLC Web插件时缺少Asp.Net会话

时间:2013-02-08 15:41:53

标签: plugins embed vlc asp.net-session

我在C#Asp.Net中创建了一个类,它充当IHttpHandler来处理一些特殊请求,以便从MS SQL Server 2008数据库中检索以流的形式获取视频。 从前端我使用VLC播放器的网络插件使用嵌入式标签请求这些视频流,如下所示:

<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 Session,如下所示:

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

问题是:使用VLC播放器网络插件,context.Session["LoggedinUser"]始终为null。 如果我使用Windows媒体播放器web插件请求相同的文件,我会得到提及的会话信息,但不会提到VLC。

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

1 个答案:

答案 0 :(得分: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。

这是一个适用于我的案例的解决方法。可能是其他人有比这更好的方法。