zoukankan      html  css  js  c++  java
  • ASP.NETFLV处理流代码

    1using System;
     2using System.IO;
     3using System.Web;
     4
     5
     6/// <summary>
     7/// Summary description for FLVStreaming
     8/// </summary>

     9public class FLVStreaming : IHttpHandler
    10{
    11    private static readonly byte[] _flvheader = HexToByte("464C5601010000000900000009"); //"FLV\x1\x1\0\0\0\x9\0\0\0\x9"
    12
    13    public FLVStreaming()
    14    {
    15    }

    16
    17    public void ProcessRequest(HttpContext context)
    18    {
    19        try
    20        {
    21            int pos;
    22            int length;
    23
    24            // Check start parameter if present
    25            string filename = Path.GetFileName(context.Request.FilePath);
    26
    27            using (FileStream fs = new FileStream(context.Server.MapPath(filename), FileMode.Open, FileAccess.Read, FileShare.Read))
    28            {
    29                string qs = context.Request.Params["start"];
    30
    31                if (string.IsNullOrEmpty(qs))
    32                {
    33                    pos = 0;
    34                    length = Convert.ToInt32(fs.Length);
    35                }

    36                else
    37                {
    38                    pos = Convert.ToInt32(qs);
    39                    length = Convert.ToInt32(fs.Length - pos) + _flvheader.Length;
    40                }

    41
    42                // Add HTTP header stuff: cache, content type and length        
    43                context.Response.Cache.SetCacheability(HttpCacheability.Public);
    44                context.Response.Cache.SetLastModified(DateTime.Now);
    45
    46                context.Response.AppendHeader("Content-Type""video/x-flv");
    47                context.Response.AppendHeader("Content-Length", length.ToString());
    48
    49                // Append FLV header when sending partial file
    50                if (pos > 0)
    51                {
    52                    context.Response.OutputStream.Write(_flvheader, 0, _flvheader.Length);
    53                    fs.Position = pos;
    54                }

    55
    56                // Read buffer and write stream to the response stream
    57                const int buffersize = 16384;
    58                byte[] buffer = new byte[buffersize];
    59                
    60                int count = fs.Read(buffer, 0, buffersize);
    61                while (count > 0)
    62                {
    63                    if (context.Response.IsClientConnected)
    64                    {
    65                        context.Response.OutputStream.Write(buffer, 0, count);
    66                        count = fs.Read(buffer, 0, buffersize);
    67                    }

    68                    else
    69                    {
    70                        count = -1;
    71                    }

    72                }

    73            }

    74        }

    75        catch (Exception ex)
    76        {
    77            System.Diagnostics.Debug.WriteLine(ex.ToString());
    78        }

    79    }

    80
    81    public bool IsReusable
    82    {
    83        get return true; }
    84    }

    85
    86    private static byte[] HexToByte(string hexString)
    87    {
    88        byte[] returnBytes = new byte[hexString.Length / 2];
    89        for (int i = 0; i < returnBytes.Length; i++)
    90            returnBytes[i] = Convert.ToByte(hexString.Substring(i * 22), 16);
    91        return returnBytes;
    92    }

    93
    94}

    95修改配置文件,运行页面即可调出视频,
  • 相关阅读:
    Android——监听事件OnLongClickListener
    Android——edittext的几个属性
    源码安装Postgresql9.4.1
    添加产品唯一性限制以后,复制按钮不能使用
    [转载]git 忽略某些文件
    grep 命令搜索 带空格的字符
    听故事学会计笔记
    利用Python的三元表达式解决Odoo中工资条中城镇、农村保险的问题
    8.0 Qweb 报表编写步骤
    Buff系统
  • 原文地址:https://www.cnblogs.com/appleseed/p/1263146.html
Copyright © 2011-2022 走看看