- 浏览: 1091859 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (290)
- php (65)
- javascript (36)
- html5 (31)
- thinkphp (9)
- mysql (16)
- jquery (13)
- node.js (9)
- css (9)
- android 开发 (8)
- flex (5)
- java (3)
- apache (8)
- linux (8)
- git (5)
- web (5)
- wordpress (9)
- mongodb (2)
- redis (5)
- yaf (6)
- python (4)
- big data (1)
- sphinx (1)
- html (1)
- bootstrap (1)
- vue (1)
- laravel (1)
- test (0)
最新评论
-
July01:
推荐用StratoIO打印控件,支持网页、URL、图片、PD、 ...
如何解决非IE浏览器的web打印 -
flashbehappy:
同一个视频,有mp4,ogg两种格式的。在chrome,fir ...
firefox chrom safari 对video标签的区别 -
xmdxzyf:
可以在网站(www.sosoapi.com)上试下在线表单方式 ...
用swagger-php/ui做API测试 -
flex_莫冲:
a2631500 写道"看了源码,设置Backbon ...
backbone与php交互 -
a2631500:
"看了源码,设置Backbone.emulateJS ...
backbone与php交互
video元素在ipad safari上的一些API是无法支持的。比如通过JS代码控制全屏。
我的要求是,页面上只有一个按钮,看不到视频元素,点击该按钮,全屏显示并播放视频,退出视频全屏后也是看不到视频元素的。
那么首先video元素是隐藏的。$(video).css({'visibility' : 'hidden', 'display' : 'none'});
按钮元素的 HTML
video元素的HTML
按钮的事件。注意必须通过jquery的get()函数去调用全屏 API才能实现。
还有还有一个要点。就是如果video元素是动态生成的,一开始的隐藏是必须用css实现的而不能用jquery的hide()函数。否则也是不会全屏的。
参考资料
apple的VIDEO api 说明
http://developer.apple.com/library/safari/#documentation/AudioVideo/Reference/HTMLVideoElementClassReference/HTMLVideoElement/HTMLVideoElement.html
解决办法:
http://stackoverflow.com/questions/9486924/webkitenterfullscreen-using-external-button-works-in-chrome-and-safari-but-not
我的要求是,页面上只有一个按钮,看不到视频元素,点击该按钮,全屏显示并播放视频,退出视频全屏后也是看不到视频元素的。
那么首先video元素是隐藏的。$(video).css({'visibility' : 'hidden', 'display' : 'none'});
按钮元素的 HTML
<div id="video2_context" style="z-index:1;position:absolute;width:200px;height:200px;left:50px;top:0px;"><img src="../images/多狀態 37_狀態 2 2_Content_P.png"></div>
video元素的HTML
<video id="video2" class="video" style="position: absolute; z-index: 1; left: 50px; top: 50px; visibility: hidden; display: none;" autobuffer="true" preload="auto" controls="controls" width="200" height="200" poster="../images/oceans-clip.png" __idm_id__="-1055178750"><source src="../videos/oceans-clip.mp4" type="video/mp4"><source src="../videos/oceans-clip.webm" type="video/webm"></video>
按钮的事件。注意必须通过jquery的get()函数去调用全屏 API才能实现。
$("#video2_context").bind("click",function(){ var enableFullScreen = video.webkitSupportsFullscreen; var mozFull = video.mozfullscreenchange; if (enableFullScreen) { $(video).show(); //video.load(); //video.play(); //video.webkitRequestFullScreen();//chrome的全屏事件 //video.webkitEnterFullscreen();//safari的全屏事件 //video.webkitDisplayingFullscreen();//safari的全屏事件 //fuck!apple! $(video).get(0).play(); //不用get直接$(video).play()也可以播放的 $(video).get(0).webkitEnterFullscreen();//必须通过get(0)才能实现全屏 }else if(mozFull){ $(video).show(); video.play(); video.mozfullscreenchange(); }else{ console.error("unsupport fullscreen!"); } // $("#"+opt.id).show(); // // _V_(opt.id).play(); // _V_(opt.id).requestFullScreen(); });
还有还有一个要点。就是如果video元素是动态生成的,一开始的隐藏是必须用css实现的而不能用jquery的hide()函数。否则也是不会全屏的。
(function($){ //成员变量 var videos = [];//全局audio数组,用来保存所有的audio对象。控制当前只有一个audio在播放并将暂停其它audio并切换icon var defaults = { pageIndex: 0, liIndex: 0, left: 0, top: 0, width:"auto", height:"auto", index:0, playInContext:false,//是否通过上下文播放 mp4:"",//mp4视频地址 webm:"",//web视频地址 autoplay:true,//默认播放 loop:false,//循环 poster:"",//封面 contextId:"videoContextID", effectType:"video", } function Video(obj){ this.options = {}; //获取参数 if (obj) { this.options = $.extend({}, defaults, obj); init(this); } else { console.error("no params"); } } function init(target) { if($("#"+target.options.id).length != 0){ console.error(target.options.id + " already exist!"); return; } if(createHtml(target)){ createEffect(target.options); } } //获取所在的页面位置 function getWrapper(target) { target.wrapper = $("ul.pageUl:eq(" + target.options.pageIndex + ")").find("li.pageLi").eq(target.options.liIndex); if(target.wrapper.length != 1){ console.error("error to find video wrapper!"); } } //创建特效DOM元素 function createHtml(target) { var that = target, innerHtml = "",opt = target.options; getWrapper(that); var element = document.createElement("video"); element.setAttribute("id",opt.id); element.setAttribute("class","video"); if(opt.liIndex > 0){ opt.top = globals.screenHeight * opt.liIndex + opt.top; } element.setAttribute("style","position:absolute;z-index:" + opt.index + ";left:" + opt.left + "px;top:" + opt.top + 'px;'); element.setAttribute("autobuffer","true"); element.setAttribute("preload","auto"); element.setAttribute("controls","controls"); element.setAttribute("width",opt.width); element.setAttribute("height",opt.height); if(opt.loop) element.setAttribute("loop",opt.loop); if(opt.poster) element.setAttribute("poster",opt.poster); if(opt.autoplay) element.setAttribute("autoplay",opt.autoplay); if(opt.mp4){ var source = document.createElement("source"); source.setAttribute("src",opt.mp4); source.setAttribute("type","video/mp4"); element.appendChild(source); } if(opt.webm){ var source = document.createElement("source"); source.setAttribute("src",opt.webm); source.setAttribute("type","video/webm"); element.appendChild(source); } if(opt.ogv){ var source = document.createElement("source"); source.setAttribute("src",opt.ogv); source.setAttribute("type","video/ogv"); element.appendChild(source); } // var html = "<video width='" + opt.width + "' height='" + opt.height + "' controls id='" + opt.id + // "' poster='" + opt.poster + "' >"; // if(opt.mp4){ // html += "<source src='" + opt.mp4 + "' type='video/mp4' />"; // } // html += "</video>"; if(that.wrapper){ that.wrapper.append(element); if(opt.playInContext && opt.contextImg){ $("#"+ opt.id).css({'visibility' : 'hidden', 'display' : 'none'}); //上下文控制的DIV var contextHtml = "<div id='" + opt.id + "_context' style='z-index:" + parseInt(opt.index) + ";position:absolute;width:" + opt.width + "px;height:" + opt.height + "px;left:" + opt.left + "px;top:" + 0 + "px;' ><img src='" + opt.contextImg + "'></div>"; that.wrapper.append(contextHtml); } return true; }else{ console.error("error to create video html element"); return false; } } //类成员方法 Video.prototype.pauseVideo = function(){ this.video.pause(); }; //创建特效 function createEffect(options){ var video = $("#" + options.id)[0];//获取video元素; video.addEventListener("error", function(){ //The code property of the MediaError Object returns a number representing the error state of the audio/video: //1 = MEDIA_ERR_ABORTED - fetching process aborted by user //2 = MEDIA_ERR_NETWORK - error occurred when downloading //3 = MEDIA_ERR_DECODE - error occurred when decoding //4 = MEDIA_ERR_SRC_NOT_SUPPORTED - audio/video not supported switch (video.error.code) { case MediaError.MEDIA_ERROR_ABORTED: console.log("视频的下载过程被中止。"); break; case MediaError.MEDIA_ERROR_NETWORK: console.log("网络发生故障,视频的下载过程被中止。"); break; case MediaError.MEDIA_ERROR_DECODE: console.log("解码失败。"); break; case MediaError.MEDIA_ERROR_SRC_NOT_SUPPORTED: console.log("不支持播放的视频格式。"); break; default: console.log("视频格式错误。" + video.error.code); $("#"+options.playBtn).remove(); $("#"+options.pauseBtn).remove(); break; } //$(video).remove(); }, false); if (options.playInContext == true) { //默认播放 var opt = options; $("#" + opt.id + "_context").bind("click",function(){ var enableFullScreen = video.webkitSupportsFullscreen; var mozFull = video.mozfullscreenchange; if (enableFullScreen) { $(video).show(); //video.load(); //video.play(); //video.webkitRequestFullScreen(); //video.webkitEnterFullscreen(); //video.webkitDisplayingFullscreen(); //fuck!apple! $(video).get(0).play(); $(video).get(0).webkitEnterFullscreen(); }else if(mozFull){ $(video).show(); video.play(); video.mozfullscreenchange(); }else{ console.error("unsupport fullscreen!"); } }); } } //释放特效 Video.prototype.destroy = function() { $("#" + this.options.id).unbind().remove(); } window.Video = Video; })(jQuery);
参考资料
apple的VIDEO api 说明
http://developer.apple.com/library/safari/#documentation/AudioVideo/Reference/HTMLVideoElementClassReference/HTMLVideoElement/HTMLVideoElement.html
解决办法:
http://stackoverflow.com/questions/9486924/webkitenterfullscreen-using-external-button-works-in-chrome-and-safari-but-not
发表评论
-
来自yahoo的web优化规则(YSLOW的23条军规)
2014-09-11 17:53 1673https://developer.yahoo.com/per ... -
ga参数分析
2014-06-25 15:42 684转自http://www.lampblog.net/2011/ ... -
IE8与现代浏览器差异记录
2014-04-09 15:13 9031 不支持.trim()方法 解决方法:用$.trim();代 ... -
如何判断当前窗口是否激活
2013-10-12 17:26 5315http://stackoverflow.com/questi ... -
html5 sse 在chrome、firefox上的不同表现
2013-10-12 12:38 1266虽然两者都实现了html5 sse,但是两者处理方式是不同的。 ... -
PhoneGap3.0发布,使用全新的插件架构
2013-08-05 15:00 1057来源:http://www.newsqueue.net/n/P ... -
让老版本的IE也支持canvas的两种神器
2013-07-26 10:44 6139https://code.google.com/p/explo ... -
使用HTML5的链接预取功能给网站提速
2013-07-25 16:48 991HTML5的链接预取功能(link ... -
慎用manifest
2013-07-18 10:56 4024参考: http://mweb.baidu.com/wp-co ... -
如何让VIDEO tag取消缓存
2013-06-07 12:27 2395video的src是动态生成的。所以会有一个bug,更新了vi ... -
iscroll + sortable element
2013-05-17 20:59 1565为了在iscroll上实现sortable的效果,想了一个星期 ... -
video mediagroup属性说明
2013-05-13 10:37 1009参考: http://www.w3school.com.cn/ ... -
iscroll初始化无法生成滚动条的问题解决
2013-05-10 10:20 7240究其原因是因为iscroll无法取得wrapper的offse ... -
iframe in ipad safari
2013-01-08 16:11 5241今天要在web中嵌套一个网址或本地HTML,用到了iframe ... -
app cache 在IOS6上的问题
2012-07-11 16:26 1337ios6号称将app cache从5mb提升到25mb。但是 ... -
HTML5 VIDEO
2012-07-05 17:15 6250位置: 若放一个div或图片在html5的video元素的 ... -
icenium使用心得
2012-06-19 12:03 4059icenium包含以下三个 ... -
获取屏幕宽度和高度
2012-05-15 10:06 2735在android上的浏览器有个设置远近的功能,导致获取到的屏幕 ... -
html5 全屏api
2012-05-09 17:14 1935【进入和退出全屏】 // ... -
html5的离线存储applicationCache应用
2012-05-03 15:26 5652需要注意几点: 1、可 ...
相关推荐
总结来说,解决Safari浏览器`<video>`标签无法播放视频的问题主要涉及理解浏览器对视频格式的支持情况,提供多格式视频源,使用JavaScript库增强兼容性,以及检查用户的浏览器设置。对于开发者来说,熟悉这些技术和...
Video In to AXI4-Stream v4.0 汉化手册知识点总结 本篇文章将对 Video In to AXI4-Stream v4.0 汉化手册进行详细的知识点总结,涵盖了 LogiCORE IP 产品指南的主要内容,包括概观、功能摘要、应用、许可和订购信息...
【标题】"iConv -convert video files to iPad, iPhone or iPod.rar" 提供的是一个针对iOS设备的视频转换应用源代码。这个应用主要是为了帮助用户将各种格式的视频转换为适用于iPad、iPhone或iPod播放的格式。在iOS...
【应用】★★★★★-iConv -convert video files to iPad, iPhone or iPod.zip【应用】★★★★★-iConv -convert video files to iPad, iPhone or iPod.zip 1.适合学生学习研究参考 2.适合个人学习研究参考 3.适合...
- `videoElement.play()` 和 `videoElement.pause()`:开始和暂停播放。 - `videoElement.currentTime`:获取或设置视频当前播放时间。 - `videoElement.volume`:设置或获取音量。 - `videoElement.muted`:...
【标题】"IOS源码之【应用】iConv -convert video files to iPad, iPhone or iPod.rar" 提供的是一款iOS应用程序的源代码,名为iConv,它的主要功能是转换视频文件,使其能在iPad、iPhone或iPod上播放。这个源码库...
Image and Video Processing in the Compressed Domain presents the fundamentals, properties, and applications of a variety of image transforms used in image and video compression. It illustrates the ...
<video id="example_video_1" class="video-js vjs-default-skin" controls preload="none" width="640" height="264" poster="***" data-setup='{}'> ***" type='video/mp4'> </video> ``` 关于上面的代码片段...
苹果出于用户体验考虑,限制了在Safari中非全屏播放视频的能力,因此,对于纯Web环境,我们可以说没有直接的方法可以禁止iPhone Safari中的`<video>`标签视频自动全屏。 总结起来,尽管开发者社区提出了许多尝试和...
文档还提到了Appled公司的商标和版权,包括了iPhone、iPod、iPod touch、Mac、MacOS、QuickTime和Safari等。这些品牌和产品的所有权属于苹果公司,并且在世界范围内注册了商标。这一点对品牌保护有着重要的意义,...
1. **跨浏览器兼容性**:VideoJS 5.x支持所有主流浏览器,包括Chrome、Firefox、Safari、Edge和IE9+,确保用户能在各种环境下顺畅观看视频。 2. **自定义化**:VideoJS允许开发者通过CSS和JavaScript轻松定制播放器...
1. **跨浏览器兼容性**:`video.js`支持所有主流浏览器,包括Chrome、Firefox、Safari、Edge和Internet Explorer,确保在各种环境下都能提供一致的用户体验。 2. **HTML5优先**:它优先使用HTML5的`<video>`标签,...
- **跨浏览器兼容性**:除了 IE8,video.js 也兼容其他主流浏览器,如 Chrome、Firefox、Safari 和 Edge。 - **响应式设计**:video.js 可以适应不同设备和屏幕尺寸,提供良好的移动体验。 - **自定义主题**:通过 ...
} else if (videoElement.mozRequestFullScreen) { // Firefox videoElement.mozRequestFullScreen(); } else if (videoElement.msRequestFullscreen) { // IE11 videoElement.msRequestFullscreen(); } else ...
This paper addresses the problem of video object segmentation, where the initial object mask is given in the first frame of an input video. We propose a novel spatiotemporal Markov Random Field (MRF) ...
基于element框架,添加videojs-markers打点标记插件的demo
VideoControl - launch a GUI to control image acquisition session: The GUI will help you in: craeting the video object, previewing and snap shotting, controlling frame grabber parameters, saving data ...
Youtube Video in Golang
Element 3D 是由Video Copilot开发的一款强大三维模型渲染和动画工具,它允许用户在After Effects这个2D环境中直接创建和编辑3D元素,无需跳出软件进行复杂的3D建模。 在After Effects中使用Element 3D,可以实现...