博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
video在微信和QQ浏览器中不全屏播放解决
阅读量:6642 次
发布时间:2019-06-25

本文共 3885 字,大约阅读时间需要 12 分钟。

最近公司做一个视频活动的HTML5页面,页面并不复杂,但是要求视频播放的时候不全屏。在网上看到好论坛类似的基本问题,以前有申请白名单的,在白名单的视频链接或者腾讯旗下的视频链接是原生播放,否则安卓会被劫持成腾讯家的播放器播放并且默认全屏,目前通过白名单的方法是解决不了的。还好终于找到了解决办法,下面好好整理一下。

在video标签中加属性

也就是所谓的开启同层播放器

x5-video-player-type="h5" /*让video开启同层H5播放器*/x5-video-player-fullscreen="true" /*设置为 true 是防止横屏*/playsinline="true" 和 webkit-playsinline="true" /*这个属性是ios中设置可以让视频在小窗内播放*/

上面的方法试了,在ios中可以不全屏,但是在安卓的微信中打开依然是全屏的。。。

视频解码

视频解码最好用转码,可以转mp4、mpeg、mkv....,还可以提取视频中的音乐。

mp4转MP4

ffmpeg -i D:\Projects\cat.mp4 -vcodec libx264 -pass 1 -coder 0 -bf 0 -flags -loop -wpredp 0 out.mp4

mkv转MP4

ffmpeg -i D:\Projects\cat.mkv -c:v copy -c:a copy cat.mp4

提取音乐

ffmpeg -i D:\Projects\cat.mp4 -f mp3 -vn apple.mp3

mp4转mpeg,视频的宽度必须是2的倍数

ffmpeg -i  D:\Projects\cat.mp4 -f mpeg1video -vf "crop=iw-mod(iw\,2):ih-mod(ih\,2)" -b 0 cat.mpg

其他使用方法可以到官网中查找,这里就不多介绍了。

1、Broadway

是从其他语言翻译而成,这个解码器支持 mp4 后缀的视频文件,有时候即使是手机拍摄的mp4格式的视频也没什么用,最好还是用ffmpeg再转一下格式。视频的地址最好是在线的地址,本地测试的时候本地视频在iphone上播放不了。

document.querySelector('body').addEventListener('click', function() {    var player = new MP4Player(new Stream('img/cat.mp4'), false, '', 'auto');    player.play();        document.querySelector('#containerMP4').innerHTML = '';    document.querySelector('#containerMP4').appendChild(player.canvas);});

2、jsmpeg

是一个 MPEG1 解码器,个人觉得代码比较轻量。

var canvas = document.getElementById('canvas2'),off1 = true;var audio = document.getElementById("bgMusic");$('#canvas2').on("click",function(e){    e.preventDefault();    if(off1){        off1 = false;        document.querySelector('#loadWrap2').style.display = 'block';        var player = new jsmpeg('img/cat.mpg', {            canvas: canvas,            onload : function(){                document.querySelector('#loadWrap2').style.display = 'none';                player.play();            },            onfinished : function(){                off1 = true;            }        });     }})

以上两种方法都可以实现视频的不全屏播放,终于解决了一个大问题,但是对于专门做视频开发的不知道适不适用了。

另外还有一种方法,就是将图片转成一个个帧了,个人觉得有点麻烦,但是对于短视频来讲也可以采用。麻烦的就是用工具将视频转成图片了。

var imgArr = [],source = {},now2 = 0,imgNum = 0,timer=null;    var canvas2 = document.querySelector('#canvas2');    var videoBox = document.querySelector('.videoBox');    var view = {w : videoBox.offsetWidth,h : videoBox.offsetHeight};    canvas2.width = view.w;    canvas2.height = view.h;    var ctx = canvas2.getContext("2d");    ctx.clearRect(0,0,canvas2.width,canvas2.height);    var audio = document.getElementById("bgMusic");    //添加图片进数组    function pushImgArr (num) {        document.querySelector('#loadWrap2').style.display = 'block';        //播放(继续播放)        audio.play();        imgArr = [];        for( var i = 0;i < num;i++ ) {            imgArr.push('videoImg/'+i+'.jpg');        };        imgLoad ();            };    //图片加载    function imgLoad(){        document.querySelector('#btn-play').style.display = 'none';        source['src'+now2] = new Image();        source['src'+now2].src = imgArr[now2];        source['src'+now2].onload = function(){            now2 ++ ;            if( now2 > imgArr.length-1 ){                //加载成功                document.querySelector('#loadWrap2').style.display = 'none';                //执行canvas渲染                movieInit()            }else{                //递归加载                imgLoad();            };        };    };     //canvas图片渲染    function movieInit (){        clearInterval(timer);        timer = setInterval(function(){            if( imgNum == imgArr.length ){                clearInterval(timer);                 //停止                audio.pause();                audio.currentTime = 0;            }else{                ctx.clearRect(0,0,canvas2.width,canvas2.height);                ctx.drawImage(source['src'+imgNum],0,0,view.w,view.h);                imgNum++;            };        },60);    };    //按钮点击开始播放    document.querySelector('.playBtn2').onclick = function(){        pushImgArr(30);            };

转载地址:http://jaovo.baihongyu.com/

你可能感兴趣的文章
嵌入式新手要知道的五个小窍门-心得
查看>>
有一家区块链百科百谈
查看>>
【备忘】总结一些Java学习者经常去的网站及论坛
查看>>
Linux mail邮件附件定时发送
查看>>
Confluence 6 如何保持我空间的整洁
查看>>
Day 46 Ansible批量管理2
查看>>
final, finally, finalize的区别
查看>>
Linux 终端显示 Git 当前所在分支
查看>>
jeesite自定义ckfinder2.x以实现动态权限控制
查看>>
u盘删除的文件能恢复吗?如何恢复
查看>>
苹果手机日历误删怎样恢复?恢复的小技巧
查看>>
mybatis结合分页的使用及解析.
查看>>
全新的智能呼叫中心客户服务体系,企业管理者都应该知道的事
查看>>
【干货】气体分析仪与气体检测仪的区别
查看>>
C语言位操作源码片段
查看>>
查看ubuntu32/64位的方法及其版本信息
查看>>
awk工具---待完善
查看>>
javascript—cookie操作
查看>>
解决Cadillac atsl vin码不一致问题
查看>>
VXLAN 概念(Part I) - 每天5分钟玩转 OpenStack(108)
查看>>