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修改配置文件,运行页面即可调出视频,
  • 相关阅读:
    Best Time to Buy and Sell Stock III
    Valid Palindrome
    Longest Substring Without Repeating Characters
    Copy List with Random Pointer
    Add Two Numbers
    Recover Binary Search Tree
    Anagrams
    ZigZag Conversion
    Merge k Sorted Lists
    Distinct Subsequences
  • 原文地址:https://www.cnblogs.com/appleseed/p/1263146.html
Copyright © 2011-2022 走看看