html5-声音视频自动播放的坑

野生程序猿-杂烧5年前随意分享940

因为从事的是教学软件的开发,不知何年何月开始声音、视频不支持自动播放了。必须点一个按钮才能播放。教学类软件很多都是有动画的,像播放器一样,从头开始慢慢播放,可以理解为n帧,但是因为程序开发不是视频制作,没有序列帧,所以要通过回调实现这些功能。经常开发这类软件,得寻找自己的方案。


果断选择了jquery,没错就是古老的jquery。直接对dom进行监听。哪个元素不能自动播放,我就在哪个元素上插个必须点击才能播放。

部分代码片段

var this_v=$(`#video_${this_id}`);
					
this_v.attr("src",this_v.attr("xsrc"));

var this_v_dom=document.getElementById(`video_${this_id}`); 
var this_c_dom=document.getElementById(`canvas_video_${this_id}`); 

this_c_dom.width = 1920;
this_c_dom.height = 1080;
var this_ctx=this_c_dom.getContext('2d');

var captureFrame=function() {
	// console.error('captureFrame');
	// console.error(this_v_dom);
	// console.error(this_ctx);
	this_ctx.drawImage(this_v_dom, 0, 0, this_c_dom.width, this_c_dom.height);
	setTimeout(function(){
		captureFrame();
	},40);
}

try{
	this_v_dom.play();
}catch(e){}

var this_played=false;

this_v_dom.addEventListener("ended",function(){
		 console.error("播放结束");
		 go_next();
})
this_v_dom.addEventListener("play",function(){
		 this_played=true;
		 console.error('自动播放了');
		 captureFrame();
})

setTimeout(function(){
	console.error('this_played',this_played);
	if(this_played==false)
	{
		//this_v_dom.muted=true;
		
		var dianji_html=`<div id="dianjipingmu">点击屏幕继续</div>`;
		$("#dianjipingmu").remove();
		$(".app").eq(0).prepend(dianji_html);
		$("#dianjipingmu").click(function(){
			$("#dianjipingmu").remove();
			this_v.attr("src",this_v.attr("xsrc"));
			this_v_dom.play();
		});
	}
	
},588);

野生办法,延迟判断一下是否播放成功。并监听是否播放结束,然后go_next();

相关文章

多种图片生成,打包接口传递

前面介绍了ImageMagick这个工具,可以将pdf转成png。这里再结合先前工作的实际需求补充一点相关知识。原先入职的是一家摩托车金融公司,就是借款买摩托车。公司对接了一些资金方,有这么个需求,需...

如何判断一个经纬度是哪个省?

需求是这样的,有个卖gps防盗器的公司,需要分析出用户去年一年内经过了那些城市?假设有10万个用户,每个用户有100万个轨迹点。我们怎么分析呢?常规方法是一个点一个点的分析,那就是10w*100w=1...

介绍一款文件比较工具Beyond Compare

介绍一款文件比较工具Beyond Compare

这款软件除了可以比较我们的代码差异,还可以比较图片形状差异。有以下几个优点1、代码支持特殊字符,如换行符的一些差异(不同操作系统,如linux跟windows下很多时候会有这个现象)。2、支持上下文功...

经纬度的拓展应用

经纬度的拓展应用

前面讲的了如何分析一批gps数据一年的使用情况(所在经纬度是哪个城市);其实这个需求是前公司提给一个python数据分析的。需求蛮多,包括最大速度啊、平均速度啊、有没急刹车啊。我是负责配合数据生成报告...

vue通过组件的方式制作教学软件翻牌游戏环节

vue通过组件的方式制作教学软件翻牌游戏环节

为了方便学生记忆学习,将记忆知识点做成了翻牌游戏形式。由于记忆点知识比较多,我们可以设计成多个关卡,每个关卡就是一些知识点配置,通过组件的形式加载,更为合理,更为方便。【fanpai.vue】<...

推荐个强迫症最爱的任务栏管理工具7+ Taskbar Tweaker

推荐个强迫症最爱的任务栏管理工具7+ Taskbar Tweaker

我们开发人员用到的软件特别多,尤其全栈。前后端开发软件、ps、模拟器、办公软件、cmd窗口。工作的时候我不喜欢把任务栏按组叠加。像cmd窗口给我叠在一起,找都找不到,打乱开发的节奏。...