2013-06-01 2 views
3

У меня есть мои видеоданные, хранящиеся в базе данных, и вы хотите воспроизвести их на моей странице. Я делаю пользовательский обработчик (FileHandler.ashx), как этотИсточник видео html5 от обработчика ashx

public void ProcessRequest(HttpContext context) 
     { 
      int id; 
      if (context.Request.QueryString["FileId"] == null || !Int32.TryParse(context.Request.QueryString["FileId"], out id)) 
       return; 
      var file = lnxFile.Get(id); 
      string fileName = file.Name + file.Extension; 
      context.Response.Clear(); 
      context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName); 
      context.Response.BinaryWrite(file.Data); 
      context.Response.End(); 
      context.Response.Flush(); 
     } 

и использовали в HTML5 тег видео, как этот

<video id="jwplayer_placeholder" width="320" height="240" controls> 
    <source src="<%= "/CMS/Common/FileHandler.ashx?FileId=" + id %>" type="video/mp4"> 
</video> 

Но это ничего не играет. Может ли кто-нибудь объяснить мне причину?

+0

какой-либо причине, почему вы не приняли ответ ARISTOS в? – fubo

ответ

3

Основная ошибка в том, что вы не установили ContentTypefor the video, и вы оставили браузер, чтобы решить, что это такое. Установите его в качестве:

context.Response.ContentType = "video/mpeg"; 

Также "Content-Disposition" используется для загрузки файла, удалить который также

Четкое не имеют никакого значения, удалите его

context.Response.Clear(); 

, а также установить Buffer=off, потому что вам нужно чтобы отправить его в браузер.

Эта последовательность не имеет никакого значения, сохранять только Flush.

context.Response.End(); 
    context.Response.Flush(); 

Таким образом, окончательный код будет как:

public void ProcessRequest(HttpContext context) 
{ 
    int id; 
    if (context.Request.QueryString["FileId"] == null || !Int32.TryParse(context.Request.QueryString["FileId"], out id)) 
     return; 
    var file = lnxFile.Get(id); 

    context.Response.Buffer = false; 
    context.Response.ContentType = "video/mpeg";  
    context.Response.BinaryWrite(file.Data);  
    context.Response.Flush(); 
} 
Смежные вопросы