2014-12-19 5 views
14

저품질의 FullHD 동영상을 재생하기 위해 YouTube iframe API를 설정하려고합니다. 내 목표는 모바일 장치의 대역폭을 절약하고 로딩 시간을 줄이는 것입니다. 내 HTML 구조는 클래식 플레이어 div와 메시지 용 디버그 div입니다.YouTube 기기의 iFrame API setPlaybackQuality이 휴대 기기에서 무시되었습니다.

(이 post에서 제안) 나는 플레이어가 준비되면 버퍼링 시간을 낭비하는 모바일 사용자를 방지하기 위해 즉시 setPlaybackQuality를 호출하려고했습니다

<div id="debug"></div> 

<div id="your_video_id"> 
    <div id="player"></div> 
</div> 

HTML. 나는 또한 "BUFFERING"과 "PLAYING"상태에서 그것을 호출했다. 품질이 변경되면 디버그 내용이 실제 재생 품질로 업데이트됩니다.

JAVASCRIPT

/* Trigger player ready */ 
function onPlayerReady(event) 
{ 
    player.setPlaybackQuality("small"); 
} 

/* Detect playback quality changes */ 
function onQualityChange(event) 
{ 
    document.getElementById("debug").innerHTML = event.data; 
} 

/* Trigger player events */ 
function onPlayerStateChange(event) 
{ 
    if (event.data == YT.PlayerState.BUFFERING) 
    { 
     player.setPlaybackQuality("small"); 
    } 

    if (event.data == YT.PlayerState.PLAYING) 
    { 
     player.setPlaybackQuality("small"); 
    } 
} 

코드 (디버그가 올바르게에 "작은"설정) 바탕 화면에 작동하는 것 같다 있지만 안드로이드 4.2에서 테스트 "Large"로 설정 모바일 (디버그에 무시됩니다. 2). 이것에 대한 해결책이 있습니까?

+2

+1. 같은 문제가 발생하여 onReady, onStateChange에서 BUFFERING 및 PLAYING으로 모두 분리하여 다양한 조합으로 시도했습니다. 아무 것도 작동하지 않습니다. https://code.google.com/p/gdata-issues/issues/detail?id=7191&thanks=7191&ts=1432253375 –

+0

iOS에서 동영상 품질은 iFrame 플레이어의 크기에 따라 직접 설정됩니다. 따라서 어떤 크기로 설정했는지에 상관없이 모바일 플레이어는 항상 가장 가까운 크기가 플레이어 크기와 일치하도록 설정을 무시합니다. 이것은 YouTube Help Assistant가 iOS 개발자에게 제공하는 커다란 문제입니다. iOS 개발자는 웹보기에서 iFrame 플레이어입니다. YouTube는 모바일에서 불필요한 데이터 사용을 피하기 위해 의도적으로이를 수행했다고 주장합니다. – JAL

+0

@ JAL : 흠. 그래서, 나는 350 x 200에 대해 지정된 최소 크기에 가깝습니다. 240p로 설정해서는 안됩니까? 그리고 실제로는 175 x 100 \ @ 2x이기 때문에 144p에 더 가깝지 않습니까? 나는이 점이 YT iFrame API 측면의 문제라고 생각합니다. 왜냐하면 [데스크톱의 품질을 낮추려고해도 작동하지 않지만 더 높은 품질을 추구하는 것으로 나타났습니다.] (http://stackoverflow.com/questions/30468161/) loading-youtube-iframe-api-video-at-a-lower-quality) –

답변

6

내가 찾은 해결 방법은 다른 곳 setPlaybackQuality 전화, 아니 videoId와 플레이어를 결코 만들 수없는,하지만 onReady 핸들러 내부 loadVideoById(videoId, 0, desiredQuality)를 호출하는 것입니다. 이는 Android 및 데스크톱에서 올바른 품질의 onPlaybackQualityChanged을 호출하고 iOS에서 두 번이나 높은 품질이나 낮은 품질로 품질을 변경하지 말고 Android 및 iOS에서 모두 존중되었습니다.

동영상에서 사용할 수없는 품질을 전달하면 '중간'으로 설정됩니다. 그 사실을 알고 있어야합니다. 또한 3G/4G/LTE 네트워크에서 불필요한 데이터 사용을 방지하기 위해 iOS에서 API가 수행하는 품질 제한을 위반하지 않을 것입니다.

+0

나는 당신의 계단을 따라 갔지만 그것은 나를 위해 일하지 않습니다. 답변 이후 API의 동작이 변경되었는지 알고 계십니까? – kakhkAtion

+0

최근에 확인하지 않았습니다. 어떤 플랫폼에 문제가 있습니까? 그리고 3 개의 인수로 loadVideoById (cueVideoById 또는 유사하지 않음)를 사용하고 setPlaybackQuality를 호출하지 않았는지 절대 확신합니까? 재생중인 비디오의 재생 품질이 실제로 설정하려고합니까? 실제로 어떤 품질로 설정되어 있습니까? –

+0

그래, loadVideoById를 사용하고있다. Android와 iOS에서 Chrome을 사용하려고합니다. 내가하는 일과 관계없이 항상 iPhone 5에서 고품질 매체를 얻고 Nexus 5에서 대형 매체를 사용합니다. 정확히 동일한 코드가 데스크톱 브라우저에서 올바르게 작동하며 품질을 변경할 수 있습니다. – kakhkAtion