2013-04-21 1 views
40

Chrome에 이상한 문제가 있습니다.HTML5 동영상 요소 요청이 영원히 계속 대기 중임 (크롬에서)

<video> 요소를로드 할 때마다 크롬이 두 개의 HTTP 요청을 시작합니다. 첫 번째는 영원히 보류있을 것

는 (나는 이것이 "메타 데이터", "부분적인 내용"요청 것 같다. 그러나이 점은이 보류있을 것입니다)

동일한 파일에 두 번째는 로드가 끝나면 확인하고 계속 진행합니다.

여기서 문제는 브라우저 페이지를 닫을 때까지 첫 번째 요청이 보류 상태로 유지된다는 것입니다. 따라서 어떤 시점에서 여러 개의 비디오를로드하면 사용 가능한 모든 요청이이 보류중인 요청에 의해 점유되기 때문에 Chrome이 중단되어 다운로드를 중지합니다. http://jsbin.com/ixifiq/3


내가 문제를 재현 확인했습니다, 그리고 그것은 모두 Video.jsMediaElements.js frontpages에 무슨 일이 일어나고 :

는 여기 감소 된 테스트 케이스를 만들었습니다. 페이지를로드 할 때 네트워크 탭을 열면 보류중인 첫 번째 요청이 표시됩니다. 그런 다음 비디오에서 재생을 누르면 두 번째 요청이 작동하는 것을 볼 수 있지만 첫 번째 요청은 영원히 계속 보류됩니다.

누구든지이 버그에 대한 수정을 알고 있습니까?

+0

Youtube HTML5 비디오 모드에서 테스트 한 결과, 같은 버그가저기서 발생했다고 생각합니다. –

+0

직접 비디오를 요청하면 브라우저가 올바르게 재생합니까? 아니면 동일한 동작을 관찰 할 수 있습니까? –

+0

'

답변

14

분명히 그 버그는 Chrome의 버그입니다. ATM에는 아무 것도 없습니다.

이전에 Chromium 프로젝트에서 문제를보고했으며 할당되었습니다. 그러면 가까운 장래에 해결 될 것입니다.

버그 리포트 : 그것은 지금 작동 될 경우 https://code.google.com/p/chromium/issues/detail?id=234779

+4

에서 Chrome의 연결 제한은 모든 탭과 windows - 보류중인 요청이 다른 창도 차단할 수 있습니다. 간단히 말해서 : Chrome에서 html5 동영상을 재생할 수없는 경우 가끔 같은 호스트를 가리키는 다른 탭을 닫으면 충분합니다. –

+0

이 버그는 여전히 Chrome 38.0.2125.111, OS X 10.10 – Ronan

+1

에 존재합니다. Ecropolis의 마지막 코멘트에서이 문제에 대한 해결책이 있습니다. 우리는 이것을 받아 들인 대답에 추가해야 할 것입니다 ... – Technotronic

9

내가 모르겠지만, 난 그냥 "와 같은 비디오 URL에 매개 변수를 추가하여이 문제를 해결 기억 video.mp4 t = 2123 ". 물론 비디오를로드 할 때마다 매개 변수가 달라야합니다. 사용하려면

을 사용하고 추가하십시오.

몇 달 전까지 만해도 Chrome이 응답을 영원히 기다리지 않고도 동일한 동영상을 여러 번 재생할 수있었습니다.

희망이 있습니다.

+1

당신, 내 친구, 저의 하루를 저장했습니다. AJAX를 통해 페이지 콘텐츠 (자동 재생되는 html5 동영상 요소 포함)를로드하는 상황에서 Chrome에 문제가 발생했습니다. Chrome은 동영상을 배경에서 계속 재생하므로 (DOM에서 전체 요소를 삭제 한 후에도) 동일한 페이지로 돌아갈 때 문제가 발생합니다 (기본적으로 포스터 이미지를 제외하고는 동영상을 재생할 때까지 아무 것도 표시하지 않았습니다. 배경, 그 후 비디오가 다시 재생되기 시작 함). 감사합니다. –

+0

다행스럽게 도울 수있었습니다! 귀하의 의견을 주셔서 감사합니다 @ GerbenVanDijk! – Unapedra

+0

다시로드해야하기 때문에 거의 이상적입니다. 그러나시기 적절한 솔루션입니다. 감사합니다. @Adracat – danjah

19

가 (이 버그는 여전히 크롬 38.0.2125.111에 존재 OS X 10.10)

이 방금 빠른를 크롬 출시 소켓을 돕고, 어떤 더미 ?time-suffix 트릭없이 해결할 수 & 크롬 버그가있을 수 있습니다 :

RevealJs HTML 프리젠 테이션에서 20 개 이상의 비디오 (슬라이드 당 하나, 슬라이드 포커스에서 자동 재생)와 동일한 버그가있었습니다. 부작용으로이 출시되지 않은 소켓 문제는 동일한 HTML DOM에서 보류/차단 된 첫 번째 비디오 바로 다음에 나오는 다른 아약스 지연 라이브러리에 영향을 미쳤습니다.

1 세트 비디오 preload 속성 none에 : - 재생할 canplaythrough 이벤트 핸들러를 사용

<video preload="none"> 
    <source src="video.webM" type="video/webM"> 
</video> 

2 월터의 대답에 따라

(bug report 참조), 나는 다음 단계에 따라 문제를 해결 및/또는 일단 비디오가로드되면 잠시 멈춤. & 준비. 이렇게하면 Chrome이 해당 동영상을로드하는 데 사용 된 소켓을 해제하는 데 도움이됩니다.

+1

이 솔루션은 webm 형식으로 된 10 개의 HTML5 비디오가있는 페이지에서 저에게 효과적이었습니다. 페이지가 완벽하게로드 될뿐만 아니라 또한, 나는 비디오 또는 모든 것을 동시에 재생할 수 있습니다. –

7

이 버그는 여전히 존재합니다. 단일 페이지 애플리케이션에서 HTML5 동영상 플레이어를 사용하고 있습니다. 프리 버퍼링으로 약 7 명의 플레이어를로드 한 후에는 한계에 도달하여 더 이상 비디오가로드되지 않습니다. 나는 이미지와 관련된 또 다른 대답을 발견했으며이 대답이이 문제를 해결한다는 것을 알게되면 놀랐다.

if(window.stop !== undefined) { 
    window.stop(); 
} else if(document.execCommand !== undefined) { 
    document.execCommand("Stop", false); 
} 

참조 : Javascript: Cancel/Stop Image Requests

+0

나를 위해,이 작품과 브라우저가 비디오를 캐시하고 반복 요청을 피할 수 있습니다. 감사합니다 – ivanxuu

+1

언제 그 코드를 실행하기로되어 있습니까? 길 위에? –

+0

여러 mp3 파일을로드하려고 할 때 나를 위해 일했습니다. – Technotronic

5

당신이 비디오 소스를 언로드 할 필요가 차단 된 소켓을 해제, 같은 회전 목마 같은 동적 콘텐츠 내에서 HTML5 비디오를 사용할 때이 문제를 발견

var video = $('#video'); 
video[0].pause(); 
video.prop('src',''); 
video.find('source').remove(); 
video.remove(); 

버그가 수정되었다고 주장하지만 여전히 Chrome 42에서이 작업을 수행해야했습니다. 적어도 preload = "auto"로 설정할 수는 있습니다.

+0

http://www.w3.org/html/wg/drafts/html/master/semantics.html#best-practices-for-authors-using-media-elements – Lodewijk

+0

에 따라 video.load()도 감사해야합니다. , 이것은 나를 위해 일했다. 매번

+1

@ Lodewijk : W3C는 사라지지 않는 URL을 사용할 수 없다고합니다. 최신 정보는 https://html.spec.whatwg.org/#best-practices-for-authors-using-media-elements에서 확인하십시오. –

1

동일한 증상이 있었지만 같은 비디오 컨트롤 (동일한 비디오 소스 (MP4))에서 동일한 비디오에 대해 load()을 두 번 연속해서 호출하는 것이 문제였습니다. 동일한 두 개의 206 개의 요청이 dev 도구에 나타나고 비디오를 몇 번 전환 한 후 Chrome은 첫 번째 요청을 취소하고 점진적 재생을 해제 한 다음 두 번째 요청이 완료 될 때까지 대기합니다.

또한 MP4 소스를 사용하며 프로그레시브 재생 (즉, MOOV 아톰이 파일의 시작 부분에 있음을 의미)으로 포맷되지 않은 경우 파일에 대해 1-2 개의 추가 요청이 발생합니다 , 그것은 그것을 더욱 혼란스럽게 만듭니다.