2013-06-01 5 views
3

내 비디오 데이터가 데이터베이스에 저장되어있어서 내 페이지에서 재생하고 싶습니다. 나는이ashx 처리기의 Html5 video source

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(); 
     } 

같은 사용자 정의 핸들러 (FileHandler.ashx) 그리고이

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

처럼 사용 HTML5의 비디오 태그를 만들하지만 아무것도 재생되지 않습니다. 아무도 이유를 설명 할 수 있습니까?

+0

당신이 아리스 토스의 답변을 수락하지 않았습니다 어떤 이유? – fubo

답변

3

주된 오류는 ContentTypefor the video을 설정하지 않았고 브라우저에서 무엇을 결정했는지입니다. 로 설정 : 당신이 필요로하기 때문에 "Content-Disposition" 다운로드 파일에 사용됩니다 또한

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

그 또한

이 맑은 여기에 아무 의미가 없다, 삭제, 그것은

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(); 
}