我在代码中做了一个权限验证功能,对于调用媒体文件的WEB请求,只有符合条件的才让它访问,这时出了一个问题:当符合条件时我如何返回媒体数据流给调用的页面呢?
如:
<object id="player" name="player" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA\" width="100%" height="85%" align="baseline">
...
<param name="SRC" value="http://localhost/movies/0005.rm">
...
</object>
如果用Response.WriteFile("FilePath")的话是直接向客户端发送文件,播放器接收不了,会提示错误~~~郁闷,各位是如何向媒体播放器返回数据流的呢~~急~~

解决方案 »

  1.   

    你的意思好象是说用户观看媒体文件之前需要做一个判断,只对默写符合条件的用户提供查看功能是吧?那你必须要返回吗?你可以在页面加载的时候先做判断,如果符合条件就继续,如果不符合条件就
    结束这个页面啊。
    顺便说一下,我觉得这样:<param name="SRC" value="http://localhost/movies/0005.rm">是不能播放的,应该使用rtsp协议吧?乱说一气 不知道对不对,呵呵。
      

  2.   

    一.就是符合条件之后要返回http://localhost/movies/0005.rm这个数据流给播放器呀
    二.那样可以播放的
      

  3.   

    我不知道如何实现流媒体播放协议,哪位大大帮忙解说一下??
    HELP ME,PLEASE!!
      

  4.   

    CSDN上没有人搞这个么???
    版主呀,听说你以前搞过这方面的,你救救偶吧~~~
      

  5.   

    其实用不用流媒体播放协议效果都是一样,人家用相应的工具照样可以下载...
    国外有用java applet来做的,控制得很好!
      

  6.   

    >>>>如果用Response.WriteFile("FilePath")的话是直接向客户端发送文件,播放器接收不了,会提示错误
    你这样是直接把一个视频文件输出给了客户端浏览器,如果访问者直接点击打开的话,Windows应该会调用与其格式关联的应用程序来打开(rm格式应该会用RealPlayer打开),但是访问者需要安装该应用程序,没有安装就不能打开。
    另外,这应该不是流媒体的形式,而是直接传送文件给访问者。如果需要提供流媒体服务,你需要在服务器端安装流媒体服务器。例如:Windows Media服务,Windows 2000 Server 和Windows Server 2003都自带了此服务,你可以选择安装。如果你需要Real的流媒体服务,你需要安装Real的Media Servers。
      

  7.   

    呵呵,我不是管它能不能下载,我要的是如何让RESPONSE回去的数据播放器可以播放
      

  8.   

    TO:忆秋季
      我不是要提供流媒体服务,问题是在于为什么播放器用SRC=URL可以播放,这时候播放器向服务器发出的请求是什么类型的?应该是HTTP的吧?这时服务器返回的CONTENTTYPE也应该是相应的VEDIO或AUDIO类型的,同时服务器发送的数据流是什么格式或协议的?这时的连接形式是什么连接形式?
      

  9.   

    当你在HTML中使用:<object......的时候,你告诉了浏览器使用什么样的播放器ActiveX控件来播放此视频,所以,只要客户端安装的此类型的播放器,那么一般就会安装此播放器的ActiveX控件(如Windows Media Player和RealOne Player的控件),那么就可以播放,没有安装则不能播放。
    而你直接输出的时候,IE会根据你输出文件的类型,来判断该格式关联的应用程序,来选择播放器。如果你的格式没有被关联,那么就不能播放了。另外,你要确认你用Response.WriteFile的时候,有没有指定文件的类型。
      

  10.   

    ContentType指定了,经测试返回的类型也是正确的,但是就是不能播放出来~~
      

  11.   

    是不是你的ContentType指定错了?
    如果是rm格式,应该是:
    Response.ContentType="audio/x-pn-realaudio";
      

  12.   

    ContentType没指定错,我按各种媒体文件提取出来的
      

  13.   

    能不能把相关的部分代码贴出来?
    我这边刚刚安装了一个RealOne Player,而且测试是没有问题的。
      

  14.   

    bool flag1;
    HttpContext context = HttpContext.Current;
    HttpRequest request1 = context.Request;
    HttpResponse response1 = context.Response;
    HttpServerUtility utility1 = context.Server;
    string text1 = request1.Url.AbsolutePath;
    string text2 = utility1.MapPath(text1);
    if (request1.UrlReferrer == null)
    {flag1 = false;}
    else if (request1.Url.Host == request1.UrlReferrer.Host)
    {flag1 = true;}
    else if (Regex.IsMatch(ConfigurationSettings.AppSettings["RovaryDomains"], "^([^,]+,)*" + request1.Url.Host + "(,[^,]+)*$"))
    {flag1 = true;}
    else
    {flag1 = false;}
    if (flag1)
    {
     if (File.Exists(text2))
     {
        response1.Clear();
        string stype = this.Ctype(text1);
        if(stype == "Error")
        {
    response1.Redirect(ConfigurationSettings.AppSettings["RovaryRedirect"]);
        }
       else
       {
            response1.ContentType = stype;
            response1.WriteFile(text2);
        }
    }
    else
    {
      response1.Redirect(ConfigurationSettings.AppSettings["RovaryRedirect"]);
    }
    }
    else
    {
     response1.Redirect(ConfigurationSettings.AppSettings["RovaryRedirect"]);
    }
      

  15.   

    我在代码中做了一个权限验证功能,对于调用媒体文件的WEB请求,只有符合条件的才让它访问,这时出了一个问题:当符合条件时我如何返回媒体数据流给调用的页面呢?
    如:
    <object id="player" name="player" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA\" width="100%" height="85%" align="baseline">
    ...
    <param name="SRC" value="http://localhost/movies/0005.rm">
    ...
    </object>
    如果用Response.WriteFile("FilePath")的话是直接向客户端发送文件,播放器接收不了,会提示错误~~~郁闷,各位是如何向媒体播放器返回数据流的呢~~急~~
    你可以把权限控制放到此页面,有权限的用户才能看到object标记,没有权限的根本看不到此标记就可以了。
      

  16.   

    response1.ContentType = stype;
    response1.WriteFile(text2);
    你调试看看,看看这两句的stype和text2各是什么值?
      

  17.   

    调试过了,
    stype就是相应的ContentType
    text2是文件实际路径
      

  18.   

    如果你调试过了,而且stype是"audio/x-pn-realaudio",text2是类似于"C:\\files\\video.rm"格式的实际物理路径的话,那就没有问题了。
    如果还有问题,请检查你的客户端的RealOne Player是不是有问题?或者检查一下rm文件类型是不是被RealOne Player关联了?
      

  19.   

    另外,你用一个WMV的格式试试这段代码:
    输出一个.wmv的文件,然后修改:
    Response.ContentType="video/x-ms-wmv"
    确认你的Windows Media Player没有问题,然后测试一下代码能不能正确执行。
      

  20.   

    老大,都一样,不管我是用application/vnd.rn-realmedia还是用audio/x-pn-realaudio,都是提示错误~~~~~不能播放...
      

  21.   

    播放器错误,REALPLAYER提示要下载插件,MEDIAPLAY没提示就是不动
      

  22.   

    参考  http://community.csdn.net/Expert/topic/3959/3959232.xml?temp=6.766909E-02
      

  23.   

    各位大大呀,还是不行呀,救救小弟偶呀.....HELP ME PLEASE!另:
      哪位大大能告诉小弟,在媒体播放器中,SRC=URL这个属性,他是发出什么请求?HTTP么?如果是的话,那么它REQUEST的CONTENTTYPE是什么?服务器端对此CONTENTTYPE所返回的CONTENTTYPE是什么?数据流格式是什么格式?BUFFER还是MENORYSTREAM???对应的.NET里面CONTENTTYPE与HTML中的CONTENTTYPE是否一致???我现在被这流媒体格式搞得头错脑胀的说~~~
      

  24.   

    建议楼主还是配成MEDIA SERVER之类的,用操作系统带的现成的媒体播放服务来控制算了,一般已MMS方式来传输,以流的方式控制下载,自己写比较麻烦一点。
      

  25.   

    ~~~郁闷.搞个防盗链还真麻烦>>>>,发了信息给思归大大,可惜他没空理偶的说
      

  26.   

    别的不想说,设定好MIME,输出数据,应该就没有问题了
    只是提醒Response.WriteFile这样的代码会撑爆你的内存,不妨弄个1.x GB的文件试试,嗯
    应该弄个循环直接向HttpResponse.OutputStream里写数据