video在微信和QQ瀏覽器中不全屏播放解決

最近公司作一個視頻活動的HTML5頁面,頁面並不複雜,可是要求視頻播放的時候不全屏。在網上看到好論壇相似的基本問題,之前有申請白名單的,在白名單的視頻連接或者騰訊旗下的視頻連接是原生播放,不然安卓會被劫持成騰訊家的播放器播放而且默認全屏,目前經過白名單的方法是解決不了的。還好終於找到了解決辦法,下面好好整理一下。

在video標籤中加屬性

<video id="videos" playsinline="true" poster="img/1.jpg" webkit-playsinline="true" x-webkit-airplay="true" x5-video-player-type="h5" x5-video-player-fullscreen="true">
    <source src="img/output.mp4" type="video/mp4" />
</video>

也就是所謂的開啓同層播放器html

x5-video-player-type="h5" /*讓video開啓同層H5播放器*/
x5-video-player-fullscreen="true" /*設置爲 true 是防止橫屏*/
playsinline="true" 和 webkit-playsinline="true" /*這個屬性是ios中設置可讓視頻在小窗內播放*/

上面的方法試了,在ios中能夠不全屏,可是在安卓的微信中打開依然是全屏的。。。ios

視頻解碼

視頻解碼最好用FFmpeg轉碼,能夠轉mp四、mpeg、mkv....,還能夠提取視頻中的音樂。git

mp4轉MP4github

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

mkv轉MP4web

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

提取音樂canvas

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

其餘使用方法能夠到官網中查找,這裏就很少介紹了。微信

一、Broadway

Broadway是從其餘語言翻譯而成,這個解碼器支持 mp4 後綴的視頻文件,有時候即便是手機拍攝的mp4格式的視頻也沒什麼用,最好仍是用ffmpeg再轉一下格式。視頻的地址最好是在線的地址,本地測試的時候本地視頻在iphone上播放不了。app

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);
});

二、jsmpeg

jsmpeg是一個 MPEG1 解碼器,我的以爲代碼比較輕量。iphone

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);
        
    };
相關文章
相關標籤/搜索