Pasos de desarrollo:
1. Descargue FMS http://blogs.ugidotnet.org/kfra/archive/2006/10/04/50003.aspx , instálelo y configúrelo.
2. Utilice flash para crear controles para la colección de vídeos FMS.
3. La página aspx incorpora el control de recopilación de FMS, ejecuta los datos de recopilación para cargarlos en el servidor de FMS y modifica la dirección de almacenamiento de archivos de video de la base de datos.
4. La página incorpora control de reproducción Flash y agrega código de flujo de procesamiento FLV:
1using System;
2usando System.IO;
3usando System.Web;
4
5
6/**//// <resumen>
7/// Descripción resumida de FLVStreaming
8/// </summary>
9 FLVStreaming de clase pública: IHttpHandler
10{
11 bytes privados de solo lectura estáticos [] _flvheader = HexToByte("464C5601010000000900000009"); //"FLVx1x1 x9 x9"
12
13 FLVStreaming público()
14 {
15}
16
17 ProcessRequest pública vacía (contexto HttpContext)
18 {
19 intento
20 {
21 posición interna;
22 pulgadas de longitud;
veintitrés
24 // Verifique el parámetro de inicio si está presente
Nombre de archivo de 25 cadenas = Path.GetFileName(context.Request.FilePath);
26
27 usando (FileStream fs = nuevo FileStream (context.Server.MapPath (nombre de archivo), FileMode.Open, FileAccess.Read, FileShare.Read))
28 {
29 cadena qs = contexto.Request.Params["inicio"];
30
31 si (cadena.IsNullOrEmpty(qs))
32 {
33 pos = 0;
34 longitud = Convert.ToInt32(fs.Length);
35}
36 más
37 {
38 pos = Convert.ToInt32(qs);
39 longitud = Convert.ToInt32(fs.Length - pos) + _flvheader.Length;
40}
41
42 // Agregar elementos de encabezado HTTP: caché, tipo de contenido y longitud
43 contexto.Response.Cache.SetCacheability(HttpCacheability.Public);
44 contexto.Response.Cache.SetLastModified(DateTime.Now);
45
46 contexto.Response.AppendHeader("Tipo de contenido", "video/x-flv");
47 contexto.Response.AppendHeader("Contenido-Longitud", longitud.ToString());
48
49 //Agregar encabezado FLV al enviar un archivo parcial
50 si (pos > 0)
51 {
52 contexto.Response.OutputStream.Write(_flvheader, 0, _flvheader.Length);
53 fs.Posición = pos;
54 }
55
56 // Leer el búfer y escribir el flujo en el flujo de respuesta
57 const int tamaño de búfer = 16384;
58 bytes[] buffer = nuevo byte[buffersize];
59
60 int recuento = fs.Read(búfer, 0, tamaño del búfer);
61 mientras (cuenta > 0)
62 {
63 si (contexto.Response.IsClientConnected)
64 {
65 contexto.Response.OutputStream.Write(búfer, 0, recuento);
66 recuento = fs.Read(búfer, 0, tamaño del búfer);
67 }
68 más
69 {
70 cuentas = -1;
71 }
72 }
73}
74}
75 capturas (Excepción ex)
76 {
77 System.Diagnostics.Debug.WriteLine(ex.ToString());
78 }
79 }
80
81 bool públicoIsReusable
82 {
83 obtener {regresar verdadero}
84}
85
86 bytes estáticos privados [] HexToByte (cadena hexString)
87 {
88 bytes[] returnBytes = nuevo byte[hexString.Length / 2];
89 para (int i = 0; i < returnBytes.Length; i++)
90 returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
91 retorno returnBytes;
92 }
93
94}
95 Modifique el archivo de configuración y ejecute la página para recuperar el video. La velocidad de reproducción es muy buena. Aunque es un eufemismo, se ha dado la idea de utilizar Asp.net para desarrollar un sitio web de vídeos. Si está interesado por favor póngase en contacto conmigo.
http://www.cnblogs.com/xiucai/archive/2007/06/13/782001.html