x5
-video
-player
-type
=
"h5"
x5
-video
-player
-fullscreen
=
"true"
x5
-video
-orientation
=
"portraint"
src
=
"video.mp4"
>
<
/video
>
属性
|
值
|
含义
|
object-fit
|
fill 或 cover或 contain…
|
视频填充模式,这三个最常用,fill会被拉伸,可以在css文件中设置。
|
preload
|
auto 或 metadata 或 none
|
该属性在某些情况下被忽略
|
关于视频还有很多属性,请参考:
http://www.w3school.com.cn/tags/html_ref_audio_video_dom.asp
http://www.runoob.com/tags/ref-av-dom.html
剩下几个属性才是内联播放的关键,在下文中详细介绍:
(1) webkit-playsinline和playsinline
在手机浏览器和QQ等App中播放H5视频,系统会自动接管进行全屏播放。显然,在很多场景中,我们需要在H5的页面中进行播放,则需要加上
webkit-playsinline
,在iOS10之后需要加上
playsinline
。所以,建议同时加上这两个属性。
(2) android微信
按照上述属性设置之后,大多数情况都可以满足,唯独android的微信。它使用的是腾讯x5内核,不遵循X5web标准,会强制全屏。
这个是腾讯H5同层播放器接入规范:
https://x5.tencent.com/tbs/guide/video.html
x5-video-player-type="h5"
启用H5同层播放器
x5-video-player-fullscreen="true"
视频播放时将会进入到全屏模式。
x5-video-player-fullscreen="portraint"
声明播放器支持的方向,此属性只在声明了x5-video-player-type=”h5”情况下生效。
在其他资料中,常常到这里就结束了。亲测根本没有办法实现。播放时,上下都是黑色,视频在中间。
根据腾讯的X5同层播放器试用报告:
https://x5.tencent.com/tbs/guide/web/x5-video.html
才找到了实现方式。
【强烈推荐这篇文章】
还讲解了如果增加topbar等问题。
接下来,通过这篇文章提供的方法继续。
按照官方文档所述,只要修改video元素的「object-position」属性,就可以修改视频部分的显示位置,但实际上还要把video元素的宽高设成屏幕的宽高才行。
官方提供了两个
事件回调
:
-
x5videoenterfullscreen
进入全屏通知
-
x5videoexitfullscreen
退出全屏通知
<html lang="en">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>android wechat playsinline</title>
<style>
body{
margin: 0;
background: wheat;
.player{
width: 100%;
height: 300px; //有的安卓浏览器不支持vw,使用px优雅降级
height: 56.25vw; // 16:9
position: relative;
.player .video{
width: 100%;
height: 100%;
object-position: center top;
.content{
text-align: center;
</style>
</head>
<div class="player">
<video id="video" class="video" width="1" height="1" preload="auto" style="object-fit:contain;height:300px;height: 56.25vw;" webkit-playsinline="true" playsinline x5-video-player-type="h5" x5-video-player-fullscreen="true" x5-video-orientation="portraint" >
<source type="audio/mp4" src="https://images.apple.com/media/us/iphone-7/2016/5937a0dc_edb0_4343_af1c_41ff71808fe5/camera/4k-footage/iphone7-4k-footage-cc-us-20160907_1280x720h.mp4">
</video>
</div>
<div class="content">
<p>hello content</p>
<button onclick="document.getElementById('video').play();">play</button>
</div>
</div>
<script>
var myPlayer = document.getElementById('video');
myPlayer.addEventListener('x5videoenterfullscreen',function(){
myPlayer.style.width = window.screen.width + 'px';
myPlayer.style.height = window.screen.height + 'px';
myPlayer.addEventListener('x5videoexitfullscreen',function(){
myPlayer.style.width = myPlayer.style.height = "";
},false);
</script>
</body>
</html>
测试这个方案是可行的。
(3) 最佳实践
上述只是对内联播放的测试,但并非项目实践。
在手机上如果视频没有播放过不会显示出来,这个区域会是空的,video有
poster
属性可以配置封面,但是安卓的一些浏览器不支持。所以,为了更好的兼容性,需要手动添加封面。
<html lang="en">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>android wechat playsinline demo</title>
<style>
box-sizing: border-box;
body{
margin: 0;
background: wheat;
.player{
width: 100%;
height: 300px;
height: 56.25vw;
position: relative;
.player .video{
width: 100%;
height: 100%;
.poster{
background:url('http://via.placeholder.com/350x150?text=poster') no-repeat center center;
background-size: cover;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
.poster::after{
content: '';
width: 50px;
height: 50px;
background: url("https://milklife.com/sites/all/themes/breakfast/owl-carousel/play-button@2x.png") no-repeat;
background-size: contain;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
-webkit-transform: translate(-50%,-50%);
-moz-transform: translate(-50%,-50%);
-o-transform: translate(-50%,-50%);
-ms-transform: translate(-50%,-50%);
.fullscreen .player{
.fullscreen video{
object-position: center 0;
height: 0.5625vw;
.content{
text-align: center;
</style>
</head>
<div class="player">
<video id="video" class="video" width="1" height="1" preload="auto" style="object-fit:contain" webkit-playsinline="true" playsinline x5-video-player-type="h5" x5-video-player-fullscreen="true" x5-video-orientation="portraint" >
<source type="audio/mp4" src="https://images.apple.com/media/us/iphone-7/2016/5937a0dc_edb0_4343_af1c_41ff71808fe5/camera/4k-footage/iphone7-4k-footage-cc-us-20160907_1280x720h.mp4">
</video>
<div id="poster" class="poster">
</div>
</div>
<div class="content">
<p>hello content</p>
</div>
</div>
<script>
var myPlayer = document.getElementById('video');
document.getElementById("poster").addEventListener("click", function(){
myPlayer.play();
document.getElementById('poster').style.display='none';
myPlayer.addEventListener('x5videoenterfullscreen',function(){
myPlayer.style.width = window.screen.width + 'px';
myPlayer.style.height = window.screen.height + 'px';
document.body.classList.add('fullscreen');
document.getElementById('poster').style.display='none';
myPlayer.addEventListener('x5videoexitfullscreen',function(){
myPlayer.style.width = myPlayer.style.height = "";
document.body.classList.remove('fullscreen');
document.getElementById('poster').style.display='block';
},false);
</script>
</body>
</html>
以上代码是实现视频播放的雏形。可以根据项目的实际情况,比如在视频播放完成的时候再将封面加回来等。
(4) 其他尝试
为了解决用户点击播放按钮,但视频还未加载到可播放的程度。
【功能】点击封面播放,如果此时视频可以播放则播放,不可以显示加载中,等加载完成后开始播放。
【实现】通过video的canplay属性判断是否加载完成,并注册canplay事件,在加载完成后播放。
【失败原因】iOS不支持canplay事件注册,在安卓上测试是可以的。
尝试用loadeddata实现全部加载完了再播放iOS也不支持,安卓支持。
(5) 仍存在的问题
目前在上文第三小节中提到的最佳实践已知在华为P9的系统自带浏览器上不能实现内联播放。但是华为CAZ-AL 10却是可以的,包括在UC浏览器等其他环境也是可以的。如果有解决的方法,请联系我,或在评论中留言。
mobile内联播放(1) webkit-playsinline和playsinline(2) android微信(3) 最佳实践(4) 其他尝试和存在问题mobile内联播放内联播放指的是视频在文档流中直接进行播放,不会弹出新的播放窗口的方式。&amp;amp;amp;amp;amp;amp;amp;lt;video id=&amp;amp;amp;amp;amp;amp;quot;video&amp;amp;amp;amp;amp;
对于小图标和文字的混合排版的确是个很麻烦的问题,网上有人总结了以下几种解决方法,仅供大家参考:
1、可以把小图标设为背景, 并设定<li>的padding值。比较常见于<ul><li>制作的菜单中;(注重:可能你经常会看到在IE5下定义在LI中的小图片会在文字下面,原因就是制作者把样式定义在A中了,IE5对
内联
元素补白样式支持不完善,所以在一般情况下把背景小图标定义在LI中,因为LI在默认的情况下是有块元素的特性。)
2、可以对图标进行样式定义,设定img属性margin或padding的值;
3、可以在图片中使用align=\"absmiddle\"来让图片绝对居中,alibaba英文
前两天,美团推出的杨洋
H5
火爆朋友圈。里面主要的是多段
视频
播放
、暂停。听起来很简单,但是由于腾讯白名单限制,在微信浏览器,qq浏览器,会自动将
video
标签中非腾讯域名的
视频
,自动全屏,结尾追加
视频
推荐。并且白名单申请入口已经关闭。
全屏适配
播放
并在
视频
上放置其他元素。例如下载按钮。
苹果手机 嵌入
视频
小窗
播放
。
目前替...
安卓开发的app嵌入
h5
出现,ios未发现出现这个灰色图,手机(安卓,ios)浏览器没有发现出现这个图。
这个是安卓webview默认的
播放
器背景图,应在安卓开发上修改而不是在html上修改,
h5
上的
video
修改无效并且找不到位置。
webview.setWebChromeClient(new WebChromeClient() {
@Override
public Bitmap getDefault
Video
Poster() {
return Bitma......
随着
H5
的兴起,传统的C/S构架产品逐步迁移到B/S架构上,但是
H5
的版本演进一直没能很好的解决实时
视频
播放
的问题,从HLS到WebRtc 再到 Wasm 都伴随着它的问题, HLS延迟大满足不了实时流性要求; WebRTC 复杂以及更适合
视频
会议的场景使得在安防行业很难大规模应用, Wasm的出现给人们带来了希望,但是由于目前性能和原生应用相差效远,在 2K 等高分辨率的情况,很难达到实时流解码; 因此越来越多的客户迫切需要一种能在安防行业基于B/S框架的
视频
播放
方案
#.此
视频
播放
插件支持以下功能:
1. 支持基于
H5
的主流浏览器( Chrome ,Mozilla Firefox,360浏览器,2020年后微软发布的Edge等)
2. 支持音频(g711,acc,mp3等)
播放
3. 支持 H264,H265,SVAC
视频
解码
播放
4. 支持 GPU加速(Nvidia Cuda8以上)
5. 支持协议:RTSP,RTMP,ONVIF,GB/T28181 海康私有SDK,大华私有SDK,宇视私有SDK,等其它私有协议的实时流
播放
6. 支持海康/大华/宇视设备或平台录像回放
7. 支持本地文件
播放
(.mp4,mkv,avi,asf等格式)
一、
视频
无法
播放
问题
最近做了个
播放
MP4
视频
的网页,发现PC端能正常
播放
视频
,但是部分手机浏览器,例如UC浏览器,
播放
视频
要么一直转圈加载,要么报-9324,19000错误。
查了很多资料,基本都是说
video
标签的参数配置不对或者浏览器版本不兼容,没啥用。
最后发现问题出在网络协议上,
H5
做的页面在部分手机端的浏览器上只能用http或者websocket协议传输
视频
数据,不能用https协议。
解决方案
就是在
video
标签中使用完整的http
视频
链接,即使用http前缀的绝对路径。
数列的函数,你会怎么做?
我可以回答这个问题。Fibonacci 数列的递推公式为 F(n) = F(n-1) + F(n-2),其中 F() = ,F(1) = 1。我们可以使用
内联
函数和递归调用来编写 Fibonacci 数列的函数。以下是一个示例代码:
inline int fibonacci(int n) {
if (n == ) {
return ;
} else if (n == 1) {
return 1;
} else {
return fibonacci(n-1) + fibonacci(n-2);
在这个函数中,我们首先判断 n 是否为 或 1,如果是,则直接返回相应的值。否则,我们使用递归调用来计算 F(n)。由于这个函数是
内联
函数,所以在编译时会直接将函数体插入到调用处,从而提高了执行效率。