reproducir net asp c# asp.net-mvc-4 video-streaming wmv

c# - asp net reproducir video



Límite de tamaño de archivo de transmisión WMV (4)

Tengo un reproductor multimedia de Windows incrustado en la vista de mi página web:

<div id="divCourseVideo" style="width:100%;margin:0 auto;" class="container"> <OBJECT style="display:inline-block" ID="CoursePlayer" HEIGHT="400" WIDTH="400" CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" type="video/x-ms-wmv"> <param name=''URL'' value="@Url.Action("ShowMovie", "OLT", new { courseId = Model.ID })" /> <param name=''autoStart'' value="true" /> <param name=''currentPosition'' value="false" /> <param name=''showControls'' value="true" /> </OBJECT> </div>

La acción ShowMovie extrae un flujo de video de la base de datos y lo envía a la vista con esto:

public void ShowMovie(string courseId) { CourseVideo video = Repository.GetCourseVideoStream(courseId); var bytesinfile = new byte[video.VideoStream.Length]; video.VideoStream.Read(bytesinfile, 0, (int)video.VideoStream.Length); ControllerContext.HttpContext.Response.BinaryWrite(bytesinfile); }

Cuando uso un video con un tamaño de aproximadamente 10K o más, jugaré bien. Pero si uso un archivo que tiene aproximadamente 137K o más, el archivo nunca se reproduce. ¿Es demasiado grande?

Cuando uso F12 para ver la actividad de la red veo que el archivo está tratando de bajar como text / html. ¿Porqué es eso? También veo que en la función GET está abortando. ¿Porqué es eso? Aumenté el valor de executionTimeout en vano.

La información de napuza fue buena. Pude obtener el tipo de contenido correcto y parece que todo el archivo se transmitió al navegador, pero nunca se reproduce.


Especifique ContentType:

ControllerContext.HttpContext.Response.ContentType = "video/x-ms-wmv"; ControllerContext.HttpContext.Response.BinaryWrite(bytesinfile);


Intenta enviar el archivo en pedazos:

response = ... byte[] buffer = new byte[4096]; response.ContentType = "video/x-ms-wmv"; response.AppendHeader("content-length", video.VideoStream.Length); while ( response.IsClientConnected) { int bytesRead = video.VideoStream.Read(buffer, 0, buffer.Length); if (bytesRead == 0 ) { break; } response.OutputStream.Write(buffer, 0, bytesRead); response.Flush(); } response.End();



Le di crédito a napuzba por la respuesta porque me guió en la dirección correcta. Tuve éxito con esto:

CourseVideo video = Repository.GetCourseVideoStream(courseId); var bytesinfile = new byte[video.VideoStream.Length]; video.VideoStream.Read(bytesinfile, 0, (int)video.VideoStream.Length); byte[] buffer = new byte[4096]; ControllerContext.HttpContext.Response.ContentType = "video/x-ms-wmv"; ControllerContext.HttpContext.Response.AppendHeader("content-length", video.VideoStream.Length.ToString()); video.VideoStream.Seek(0, SeekOrigin.Begin); ControllerContext.HttpContext.Response.BinaryWrite(bytesinfile); ControllerContext.HttpContext.Response.End();

Sin embargo, algunos de los archivos WMV con los que he estado trabajando todavía no funcionan. Sospecho que puede tener algo que ver con los metadatos en el archivo. Alguien tiene ideas sobre eso?