使用ASP.NET流视频

时间:2010-09-02 22:14:14

标签: asp.net video streaming

是否有通过asp.net将视频流式传输到普通网页和移动设备的好方法?我尝试了以下但是它在我的索尼爱立信K810i中不起作用。当我在浏览器中尝试它时,我可以看到剪辑(不知道它是否正在流式传输)。

html:

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

FileHandler.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 个答案:

答案 0 :(得分:6)

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

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

我写了一个library for ASP.NET MVC来处理这个问题,而我的工作主要基于guidance and source code完成。