Offering smaller versions of videos with media query or when mobiles are detected(通过媒体查询或在检测到手机时提供较小版本的视频)
问题描述
我从2012年开始参加这个讨论: How to load different video for mobile devices and desktop web version? 因为我也有同样的问题。我的MP4、WebM和7Mb左右的Ogg视频在我的台式电脑上运行良好,但在我的Android智能手机上挂断得很惨。
@Subhajit给出了他尝试失败的示例代码:
<video controls>
<source src="mySmallVideo.webm" type="video/webm" media="all and (max-width:600px)">
<source src="myVideo.webm" type="video/webm">
</video>
,并参考了有关检测手持设备的最佳方法的堆栈溢出讨论。
但这只给出了检测站点何时在移动设备上被查看的建议。没有人提供他的示例的替代代码,用于在检测到移动设备后显示较小版本的视频。
我的响应站点CSS代码有@media (max-width:
媒体查询。用于移动设备的设置为500px。如何修改@Subhajit的示例代码以显示视频的较小版本,可能会引用CSS文件中的媒体查询@media (max-width: 500px)
编码?
我不愿使用移动检测、商业视频播放器或在线存储网站。
谢谢,@Fabio这里是我的代码,与您的第一个建议相差甚远:
<video controls>
<source src="portfolioVideos/testMovieWEnd480x270.mp4.mp4" type="video/mp4" media="all and (max-width: 500px)">
<source src="portfolioVideos/testMovieWEnd480x270.webmsd.webm" type="video/webm" media="all and (max-width: 500px)">
<source src="portfolioVideos/testMovieWEnd720x405.mp4.mp4" type="video/mp4">
<source src="portfolioVideos/testMovieWEnd720x405.webmsd.webm" type="video/webm">
我制作了两个5秒的"电影",由一个"测试模式"组成,它的结尾仍然是一个"结尾"。电脑屏幕上的大电影是720x405像素,标记为"电脑用"。移动屏幕上的小电影是480x270像素,标记为"移动"。当我在Firefox和Safari中切换窗口大小(并刷新)时,它们实际上会显示正确的版本。Chrome只显示移动版本。(颠倒编码顺序只会让一切变得更糟。)
当我在手机仿真程序中输入视频html时,手机版也会出现。但当我在我的Android智能手机上调出它时,它的VID太小了,我无法读取它的版本,甚至无法点击它。
我看了你推荐的Chris Coyier页面,但我想不通。如何搜索有关此jQuery代码的更多信息?感谢您以前的关注和任何可能的关注。
我在这个问题上试了几个新思路。
首先,我尝试使用jQuery"Window Width"方法和if/Else条件将视频的小版本或大版本放入iFrame。
$(document).ready(function () {
if ($(window).width() < 550) {
<iframe src=... width="480" height="270"></iframe>
}
else {
<iframe src=... width="720" height="405"></iframe>
}
});
</script>
那不管用。Safari和Chrome都给了我一个"意想不到的标记‘<;’"错误,我的理解是"当你要包含或发布到一个不存在的文件时"。这些文件在直接打开时存在并工作。我尝试使用@amenadiel推荐的绝对URL,但也不起作用。
第二,我尝试了带有if/Else条件的"Window Location"。
$(document).ready(function () {
if ($(window).width() < 330) {
window.location.href = ...;
}
else {
window.location.href = ...;
}
});
在两个在线仿真器上的各种模拟设备和窗口大小中进行测试时,这是有效的。但它在我的Android智能手机上不起作用。在那里,屏幕左上角只有一个很小的、空的、无法单击的视频窗口。
我可能已经回答了自己的问题。
我在这里找到: https://github.com/etianen/html5media/wiki/embedding-video
这个超级简单的代码:
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
</head>
<body>
<video poster="poster.jpg" width="618" height="347" controls preload>
<source src="video.mp4" media="only screen and (min-device-width: 568px)"></source>
<source src="video.iphone.mp4" media="only screen and (max-device-width: 568px)"></source>
</video>
这似乎奇迹般地奏效了。看看这一页, http://willsoper.net/videoPortfolio.html 它包含两个视频,每个都有一个大版本和一个小版本。 先试试右边的"测试模式",它只有10秒长。较大的版本标有"供‘puter’使用",较小的版本标记为"for Mobi"。在垂直位置的三星Galaxy Android上,会出现"Mobi"版本。如果我按下"后退"键,将手机调至水平位置,然后再试一次,则会出现较大的"‘puter’版本"。
左边的那个男人的视频也有一个小版本和大版本,看起来工作方式是一样的。它要长得多,在我的智能手机上,它有时会短暂地重新缓冲一两次。
具有讽刺意味的是,我之前的代码可以在在线模拟器中运行,但不能在实际的智能手机上运行。这个可以在我的智能手机上运行,但不能在模拟器上运行。了解其他人(特别是@Fabio)的经验以及我可以如何改进代码,我将不胜感激。
推荐答案
您有两个选择:
1)提供您刚才提到的基于媒体查询的视频服务。您只需根据设备宽度设置不同的大小,如下所示:
<video>
<source src="video-ipad.mp4" type="video/mp4" media="all and (max-width: 768px)">
<source src="video-mobi.mp4" type="video/webm" media="all and (max-width: 768px)">
<source src="video-mobi.mp4" type="video/mp4" media="all and (max-width: 480px)">
<source src="video-mobi.webm" type="video/webm" media="all and (max-width: 480px)">
<source src="video.mp4" type="video/mp4">
<source src="video.webm" type="video/webm">
</video>
您还可以使用一些JQuery屏幕检测,如this page
所示var mainVideo = $('#the-video');
if ($(window).width() < 1200 && medQualVersion) {
mainVideo.append("<source type='video/mp4' src='" + medQualVersionSrc + "' />");
} else {
mainVideo.append("<source type='video/mp4' src='" + highQualVersionSrc + "' />");
}
mainVideo.append("<source type='video/webm' src='" + webMSrc + "' />");
// Wait until sources are appended to call MediaElements.js
mainVideo.mediaelementplayer();
第二个选项是简单地为高质量视频提供服务器并调整其大小,如下所示:
video{max-width:100%; height:auto}
这种方式是防弹的,而且总是有效的,更不用说您提供更高质量的视频了。当然,您也会遇到数据传输问题,因此对于大型视频,我建议使用方法1。
这篇关于通过媒体查询或在检测到手机时提供较小版本的视频的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:通过媒体查询或在检测到手机时提供较小版本的视频
基础教程推荐
- 在for循环中使用setTimeout 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 动态更新多个选择框 2022-01-01