2009-10-28 2 views
5

HttpHandler를 사용하여 ASP.NET 웹 응용 프로그램에서 iPhone으로 QuickTime 비디오를 스트리밍하려고합니다. IIS 5.1 (Windows XP)에서 웹 응용 프로그램을 호스팅 할 때 비디오 플레이어가 열리고 '서버가 올바르게 구성되지 않았습니다.'라는 오류가 표시됩니다. 그러나 IIS 7.5 (Windows 7)를 사용하면 비디오가 제대로 재생됩니다.HttpHandler 및 IIS 5.1을 사용하여 iPhone에서 Quicktime 비디오 재생

프로덕션 환경에서 IIS 6.0을 실행 중이고 동일한 문제가 있습니다. 여기서 모바일 Safari를 통해 iPhone에서 비디오를 재생할 때 위의 오류가 표시됩니다.

나는 Http 헤더를 확인했는데 다른 순서로 나타나는 점을 제외하고 두 서버 (실제로는 서버 헤더와 같이 몇 가지를 제외하고는 동일 함)에서 거의 동일하게 보입니다. , 비록 이것이 문제를 일으키는 지 의심 스럽지만.

Google 그룹스의 this thread에 따르면 'Accept-Ranges : bytes'헤더를 추가하면 도움이되지만 이는 별 차이가 없습니다. ETag 헤더도 추가했습니다. 파일을 보내는 실제로 책임

코드는 다음과 같은 :

Context.Response.Buffer = true; 
Context.Response.ContentType = "video/x-m4v"; 

Context.Response.AppendHeader("Content-Disposition", "filename=\"Video.m4v\""); 
Context.Response.AppendHeader("Content-Length", "23456789"); 

Context.Response.AppendHeader("Accept-Ranges", "bytes"); 
Context.Response.AppendHeader("ETag", GetETag(path)); 

Context.Response.TransmitFile(path); 
파일을 전송하는 위의 코드는 IIS에서 호스팅 할 때 제대로 작동 및 비디오 파일이 모든 데스크톱 브라우저에서 제대로 재생하고있는 것으로 보인다

이 문제는 IIS 5.1 또는 IIS 6.0에서 호스팅되는 ASP.NET 웹 응용 프로그램과 함께 위의 코드를 사용하여 Mobile Safari를 사용하여 iPhone에서 비디오 파일을 재생할 때만 나타납니다.

다른 사람이 이와 같은 것을 경험하고 내가이 작업을 수행하기 위해 할 수있는 것에 대한 아이디어가 있습니까?

+0

Accept-Ranges 팁을 통해 ASP.NET MVC와 비슷한 문제를 해결할 수있었습니다. – kim3er

답변

2

왜 Response.Buffer를 true로 설정합니까?

서버가 HTTP 범위 요청을 지원하는지 확인하지 않는 한 단순히 "Accept-Ranges"헤더를 추가 할 수 없습니다. 클라이언트 플레이어가 Range 요청에 대한 지원을 요구하고 서버가이 요청을 처리하기를 거부하면 요청이 거부되는 것은 논리적 인 것처럼 보입니다.

역방향 프록시로 피들러를 사용하고 IPhone이 범위 요청을하는지 확인할 수 있습니다. http://www.fiddler2.com/Fiddler/Help/ReverseProxy.asp

0

Fiddler와 같은 것을 사용하여 서버에서 오는 정확한 HTTP 응답을 노출합니다. 클라이언트의 User-Agent 문자열을 iPhone 브라우저와 일치 시키거나 (또는 ​​Safari를 사용 하시겠습니까?) IIS 5.1 및 7.5의 출력을 비교하십시오. 분명히 응답 스트림은 동일하지 않거나 둘 모두에서 작동 할 것입니다.

당신은 또한 훌륭한 도구 인 NetMon을 사용할 수 있습니다 ... 그리고 당신은 iPhone 자체로 테스트 할 수 있습니다.

죄송합니다. 특별한 답변을 드릴 수 없지만,이 문제로 손을 더러워야 할 것 같습니다.

+0

팁 주셔서 감사합니다. 비디오는 실제로 Windows의 사파리와 아이폰 사용자 에이전트 스트링을 사용할 때 파이어 폭스에서 잘 돌아 간다. 그래서 나는 이걸로 뭔가 생각하지 않는다. 이 문제는 IIS5/6이 파일을 전송하는 방식과 관련이있는 것처럼 보입니다. IIS7은 아이폰이 재생할 수 없도록합니다. 이전에는 네트워크 모니터링 도구를 사용하지 않았지만 NetMon/Wireshark를 확인하고 도움이되는지 확인합니다. – Mun

3

일부 검색을 마친 후 정확한 문제를 설명한 Range-Specific Requests in ASP.NET 문서를 발견했습니다. 이 사이트에서 RangeRequestHandlerBase 클래스를 구현하면 (기존 프로젝트 구조에 맞게 약간의 수정을 가함) 문제를 해결 한 것으로 보이며 비디오 재생이 IIS5/6에서 올바르게 작동합니다.

@ 에릭 - 귀하의 의견이 올바른 방향으로 전환되었으므로 귀하의 답변을 너무 상향 시켰습니다.단순히 'Accept-Ranges'헤더를 추가하는 것만으로는 충분하지 않았습니다 (IIS7에서 작동 함에도 불구하고). 그리고 HTTP 처리기를 수정하여 범위 요청을 처리하고 올바른 데이터를 보내야합니다.

관련 문제