代码之家  ›  专栏  ›  技术社区  ›  Andreas

用ASP.NET传输视频

  •  4
  • Andreas  · 技术社区  · 15 年前

    有没有一种好的方法可以将视频通过ASP.NET传输到普通网页和移动设备?我已经尝试了以下方法,但它在我的Sony Ericsson K810i中不起作用。当我在浏览器中尝试时,我可以看到这个剪辑(不知道它是否在流媒体)。

    HTML:

    <object type="video/3gpp" 
            data="handlers/FileHandler.ashx" 
            id="player" 
            width="176" 
            height="148" 
            autoplay="true"></object>
    

    文件处理程序.ashx( Best way to stream files in ASP.NET ):

    public void ProcessRequest (HttpContext context) {
    
        string path = "~/files/do.3gp";
    
        string localPath = context.Server.MapPath(path);
    
        if (!File.Exists(localPath))
        {
            return;
        }
    
        // get info about contenttype etc 
        FileInfo fileInfo = new FileInfo(localPath);
        int len = (int)fileInfo.Length;
        context.Response.AppendHeader("content-length", len.ToString());
        context.Response.ContentType = FileHelper.GetMimeType(fileInfo.Name); // returns video/3gpp
    
        // stream file
        byte[] buffer = new byte[1 << 16]; // 64kb
        int bytesRead = 0;
        using(var file = File.Open(localPath, FileMode.Open))
        {
           while((bytesRead = file.Read(buffer, 0, buffer.Length)) != 0)
           {
                context.Response.OutputStream.Write(buffer, 0, bytesRead);
           }
        }
    
        // finish
        context.Response.Flush();
        context.Response.Close();
        context.Response.End();
    
    }
    
    1 回复  |  直到 15 年前
        1
  •  6
  •   Erik Noren    15 年前

    你得到的不是“技术上”的流媒体。这是一个文件下载。您的客户机(浏览器/电话)发送了一个HTTP请求,filehandler.ashx打开了该文件,并将字节写入响应流。除了数据是HTML文本而不是表示视频的二进制数据外,这与网页请求的交互完全相同。

    如果电话不支持视频,则可能是不兼容的编码。如果您确定手机可以播放视频,请查看手机是否需要渐进式下载支持(如iPhone/iPad/iPod touch要求媒体播放器“传输”视频)。如果是这样,您需要查看许多解决方案中的任何一种,这些解决方案可用于处理字节范围数据请求和响应请求。指定范围内的文件字节数。

    我写了一篇 library for ASP.NET MVC 为了处理这件事,我的工作主要是基于这个 guidance and source code .