先祭出Github:github.com/qiaozi-tech…javascript
國內的各個瀏覽器廠商對於Video都有着各類技術上的限制和管控,例如騰訊系的X5引擎對Video進行了大量的魔改,其中包括:html
固然,其餘廠商例如百度/UC/360及手機廠商的默認系統瀏覽器也作了很是多噁心人的奇怪限制。java
qiaozi-tech.github.io/WXInlinePla… (視頻25M左右,耐心等待加載一下,畢竟須要FQ)git
在BrowserStack中測試,主流系統版本均經過,其他機型請考慮經過降級頁面功能進行處理:github
目前僅支持FLV(AVC+AAC+baseline)格式,若是是MP4等其餘格式請使用ffmpeg進行轉碼shell
ffmpeg -i <your file> -vcodec h264 -acodec aac -profile:v baseline mtv.flv
複製代碼
<html>
<head></head>
<body>
<div id="container"></div>
<script src="./dist/index.js"></script>
<script> // 相關特性不支持時須要降級頁面功能 if(WXInlinePlayer && WXInlinePlayer.isSupport()){ WXInlinePlayer.init({ asmUrl: './dist/TinyH264.asm.js', wasmUrl: './dist/TinyH264.wasm.js', }).catch(()=>{ // 部分瀏覽器會在解析wasm/asm時失敗(但相關特性支持) // 此時一樣須要降級頁面功能 }); WXInlinePlayer.ready().then(()=>{ let player = new WXInlinePlayer({ url: './sample.flv', // 僅支持flv格式(H264+AAC) $container: document.getElementById('container'), volume: 1.0, // iOS不容許代碼調節聲量,請注意兼容 muted: false, // iOS和Android均支持代碼控制靜音 autoplay: false, loop: false }); player.on('load:success', ()=>{ player.play(); }); player.on('load:error', ()=>{ console.log('>>>>>>>>>load error'); }); player.on('play', ()=>{ player.volume(0.0); // GET/SET方法 player.mute(true); // GET/SET方法 player.resume(); player.pause(); player.stop(); }); player.on('stop', ()=>{ player.destroy(); player = null; }); // iOS及Chrome高版本禁止聲音播放 // WXInlinePlayer的音畫同步依靠音源的播放時間戳進行對齊 // 當音源播放被阻止時會等待250ms後嘗試直接繪製畫面 // 同時觸發playtimeout player.on('playtimeout', ()=>{ console.log('>>>>>>>>>playtimeout'); }); }); } </script>
</body>
</html>
複製代碼
因爲須要考慮到playtimeout的問題,所以API不提供相關的支持。一個簡單粗暴的辦法是使用setTimeout本身粗略模擬。固然若是仍然想獲取相關的數據,可使用 player.sound.seek() 方法來獲取,但請作好返回類型的判斷(playtimeout使用此API會返回非Number類型數據)。瀏覽器
WXInlinePlayer的音畫同步依靠音頻時間戳,瀏覽器目前沒有很是底層的方式控制音頻buffer,同時因爲此實現是CPU軟解H264,低端機CPU性能羸弱,解析一幀H264的時間會比較長(大約30-50ms),而音頻大部分是24ms左右,所以很容易出現音畫不一樣步的狀況。你能夠嘗試下降視頻碼率試一試是否有緩解。ide