youtube iframe播放器没有't在移动设备上自动切换低带宽的质量
youtube iframe player doesn't automatically switch quality in low bandwidth on mobile
使用iOS 9.3,将链接条件设置为3g速度,在safari中的youtube iframe api中加载视频。
我希望iframe api能意识到它已经缓冲了很多,并尝试获得较低质量的流以保持视频播放的流畅性,就像它在本地youtube应用程序中所做的那样。
我是不是错过了一些显而易见的东西?我基本上是从youtube ios助手包装器中复制粘贴的,但它仍然试图以对连接速度来说太高的质量播放。
<!DOCTYPE html>
<html>
<head>
<style>
body { margin: 0; width:100%; height:100%; background-color:#000000; }
html { width:100%; height:100%; background-color:#000000; }
.embed-container iframe,
.embed-container object,
.embed-container embed {
position: absolute;
top: 0;
left: 0;
width: 100% !important;
height: 100% !important;
}
</style>
</head>
<body>
<div class="embed-container">
<div id="player"></div>
</div>
<script src="https://www.youtube.com/iframe_api" onerror="window.location.href='ytplayer://onYouTubeIframeAPIFailedToLoad'"></script>
<script>
var player;
var error = false;
YT.ready(function() {
player = new YT.Player('player', {
"events" : {
"onPlaybackQualityChange" : "onPlaybackQualityChange",
"onReady" : "onReady",
"onError" : "onPlayerError",
"onStateChange" : "onStateChange"
},
"width" : "100%",
"height" : "100%",
"videoId" : 'NP7nK2zPirc',
"playerVars" : {
"showinfo" : 0,
"modestbranding" : 1,
"autohide" : 1,
"playsinline" : 1,
"controls" : 0
}
});
player.setSize(window.innerWidth, window.innerHeight);
window.location.href = 'ytplayer://onYouTubeIframeAPIReady';
// this will transmit playTime frequently while playng
function getCurrentTime() {
var state = player.getPlayerState();
if (state == YT.PlayerState.PLAYING) {
time = player.getCurrentTime()
// window.location.href = 'ytplayer://onPlayTime?data=' + time;
}
}
window.setInterval(getCurrentTime, 500);
});
function onReady(event) {
// window.location.href = 'ytplayer://onReady?data=' + event.data;
}
function onStateChange(event) {
if (!error) {
// window.location.href = 'ytplayer://onStateChange?data=' + event.data;
}
else {
error = false;
}
}
function onPlaybackQualityChange(event) {
// window.location.href = 'ytplayer://onPlaybackQualityChange?data=' + event.data;
}
function onPlayerError(event) {
if (event.data == 100) {
error = true;
}
// window.location.href = 'ytplayer://onError?data=' + event.data;
}
window.onresize = function() {
player.setSize(window.innerWidth, window.innerHeight);
}
</script>
</body>
</html>
根据本文档,如果播放质量发生变化,onPlaybackQualityChange
事件将触发,您的代码应该响应该事件,而不是它调用了setPlaybackQuality
函数。
每当视频播放质量发生变化时,就会触发
onPlaybackQualityChange
事件。例如,如果调用setPlaybackQuality(suggestedQuality)
函数,则如果播放质量实际发生更改,则会触发此事件。您的应用程序应响应事件,并且不应假定调用setPlaybackQuality(suggestedQuality)
函数时质量会自动更改。类似地,您的代码不应该假设播放质量只会因为显式调用setPlaybackQuality或任何其他允许您设置建议播放质量的函数而发生更改。
然后,我建议调用getAvailableQualityLevels()
函数来确定视频的质量级别。例如,如果您的页面显示1280px乘720px的视频播放器,那么hd720
质量的视频实际上会比hd1080
质量的视频看起来更好。
检查这些相关SO线程:
- YouTube iFrame API";setPlaybackQuality";或";建议质量";不工作
如果使用事件3(缓冲)而不是事件5(播放),则没有用户结结巴巴。一旦开始加载,质量就会发生变化。唯一奇怪的是,你还需要在PlayerReady上设置它不起作用。
function onPlayerReady(event) { event.target.setPlaybackQuality('hd720'); } function onPlayerStateChange(event) { if (event.data == YT.PlayerState.BUFFERING) { event.target.setPlaybackQuality('hd720'); } }
- 设置jw播放器youtube视频播放质量
希望这能有所帮助!
- 如何检查用户在html5视频播放器中观看了完整的视频
- 音乐播放器使用相同的id播放所有内容
- 在FF和IE中使用vimeo播放器的问题-加载flash播放器而不是使用HTML5播放器
- 使用HTML5播放器时使用Javascript更改Youtube视频
- 可以't根据设备自动调整youtube播放器的大小
- html5视频播放器和视频js之间的关系
- 有没有办法在dailymotion播放器的新测试版中播放youtube视频
- 我可以共享一个HTML播放器吗
- 动态加载的自定义javascript/jQuery/HTML5音频播放器的问题
- 我们如何在dailymotion播放器的新测试版中播放youtube视频
- 角度媒体播放器和动态内容
- Javascript::通过HTML5音频播放器播放列表播放多个音频文件
- HTML5、CSS3和/或JS中旋转CD上的音频播放器
- 用于播放背景音乐的嵌入式flash播放器在IE浏览器中不起作用
- 在选择更改时更改从外部javascript生成的flash播放器
- 视频播放器错误promise DOMException中未捕获
- html视频播放器并不总是从src读取
- 加载Soundcloud嵌入式播放器OnClick在FireFox中不工作
- 对Soundcloud自定义播放器播放列表的顺序进行排序
- youtube iframe播放器没有't在移动设备上自动切换低带宽的质量