1

我在 C# Asp.Net 中创建了一个类,IHttpHandler用于处理一些特殊请求,以便以流的形式获取视频,从 MS SQL Server 2008 数据库中检索。从前端,我使用 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 播放器网络插件,context.Session["LoggedinUser"]总是以null. 如果我使用 Windows 媒体播放器 Web 插件请求相同的文件,我会得到提到的会话信息,但不会使用 VLC。

如果这是 VLC 媒体播放器的某种问题?

4

1 回答 1

0

根据我的发现,使用 VLC Web 插件,您无法访问服务器上的 Asp.Net 会话。我已经做了另一个解决方法。在包含 VLC 嵌入标签的页面后面的代码中。页面加载时,VLC embed 标记的 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 回答