js android端實現視頻自動播放

前言:

在安卓手機上,使用video播放視頻有個問題,video控件層級會永遠在頂層,不利于視頻互動H5開發(fā),而IOS手機上不會有此問題。

<video src="http://xxx.mp4" x5-video-player-type="h5"/>

x5-video-player-type="h5"? ?只適用于微信瀏覽器

注意:

1.jsmpeg 需要將視頻轉為.ts的文件

? ? ?先安裝ffmpeg,然后執(zhí)行以下命令,將mp4格式的文件轉成 .ts(用命令行轉的才能正常播放)

ffmpeg -i video.mp4 -f mpegts -codec:v mpeg1video -codec:a mp2 out.ts(文件的路徑不太好找,建議全局搜索一下)

2.安卓上使用jsmpeg插件渲染canvas,ios上正常使用video并加入隱藏控制條等設置

3.http://hf-app.oss-cn-hangzhou.aliyuncs.com/public/html/jsmpeg.js? ?請使用此js,原作者的js沒有回調設置

4.https://github.com/phoboslab/jsmpeg? 原作者github地址

解決方案:jsmpeg插件

<!DOCTYPE html>

<html lang="en">

<head>

? ? <meta charset="UTF-8">

? ? <title>JSMpegPlayer</title>

? ? <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0">

? ? <style>

? ? html,body{

? ? ? ? padding: 0;

? ? ? ? margin: 0;

? ? }

? ? .msg-wrap{

? ? ? ? position: fixed;

? ? ? ? top: 0;

? ? ? ? left: 0;

? ? ? ? background: #fff;

? ? ? ? border: 1px solid #000;

? ? }

? ? .video-wrap{

? ? ? ? width: 100%;

? ? ? ? display: none;

? ? }

? ? </style>

</head>

<body>

? ? <video class="video-wrap" id="video-ios" x5-playsinline webkit-playsinline playsinline src="1_BG_4s_2.mp4"></video>

? ? <canvas class="video-wrap" id="video-android"></canvas>

? ? <div class="msg-wrap" id="msgTxt">loading...</div>

? ? <script src="http://hf-app.oss-cn-hangzhou.aliyuncs.com/public/html/jsmpeg.js"></script>

? ? <script>

? ? ? ? var msgTxt = document.getElementById('msgTxt');

? ? ? ? var video = document.getElementById('video-ios');

? ? ? ? var canvas = document.getElementById('video-android');

? ? ? ? //檢測是否為非安卓瀏覽器并作處理

? ? ? ? var check = !! navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);

? ? ? ? if(check){

? ? ? ? ? ? msgTxt.innerHTML = "not Android mode"

? ? ? ? ? ? video.style.display="block"

? ? ? ? ? ? video.play()

? ? ? ? ? ? //監(jiān)聽video加載完成

? ? ? ? ? ? video.addEventListener("loadedmetadata",function(){

? ? ? ? ? ? ? ? msgTxt.innerHTML = "not Android mode:videoPlaying"

? ? ? ? ? ? })

? ? ? ? ? ? //監(jiān)聽video播放結束

? ? ? ? ? ? video.addEventListener("ended",function(){

? ? ? ? ? ? ? ? msgTxt.innerHTML = "not Android mode:videoEnd"

? ? ? ? ? ? })

? ? ? ? }else{

? ? ? ? ? ? // jsmpegPlay(canvas,'1_BG_4s_5.ts',startCallBack,playingCallBack,endCallBack)

? ? ? ? ? ? jsmpegPlay(canvas,'out.ts',startCallBack,playingCallBack,endCallBack)

? ? ? ? }

? ? ? ? function jsmpegPlay(Vcanvas,vVideo,startFun,playingFun,endFun) {

? ? ? ? ? ? var player = new JSMpeg.Player(

? ? ? ? ? ? ? ? vVideo ,{

? ? ? ? ? ? ? ? ? ? canvas: Vcanvas,

? ? ? ? ? ? ? ? ? ? loop: false,

? ? ? ? ? ? ? ? ? ? autoplay: true,

? ? ? ? ? ? ? ? ? ? startSign: true,

? ? ? ? ? ? ? ? ? ? startCallBack: startFun,

? ? ? ? ? ? ? ? ? ? playingCallBack: playingFun,

? ? ? ? ? ? ? ? ? ? endCallBack: endFun

? ? ? ? ? ? ? ? });

? ? ? ? }


? ? ? ? //視頻開始播放(即解碼完成)執(zhí)行

? ? ? ? function startCallBack() {

? ? ? ? ? ? msgTxt.innerHTML = "Android mode:videoPlaying"

? ? ? ? ? ? canvas.style.display="block"

? ? ? ? }

? ? ? ? //視頻播放進度

? ? ? ? function playingCallBack(currentTime) {

? ? ? ? ? ? // console.log(currentTime)

? ? ? ? }

? ? ? ? //視頻播放完成執(zhí)行

? ? ? ? function endCallBack() {

? ? ? ? ? ? msgTxt.innerHTML = "Android mode:videoEnd"

? ? ? ? }

? ? </script>

</body>

</html>

項目中遇到的坑,把使用方法記錄一下

在線演示DOMO

JSMpegPlayer

https://github.com/xxfxx/android-video-autuplay? github地址,歡迎小星星~~~

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,153評論 0 2
  • 單例模式 適用場景:可能會在場景中使用到對象,但只有一個實例,加載時并不主動創(chuàng)建,需要時才創(chuàng)建 最常見的單例模式,...
    Obeing閱讀 2,321評論 1 10
  • 源站:http://fengyuanchen.github.io/viewer/ 應用: html: 源碼上是正常...
    羊繪霖閱讀 5,696評論 0 2
  • ¥開啟¥ 【iAPP實現進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,380評論 0 17
  • 工廠模式類似于現實生活中的工廠可以產生大量相似的商品,去做同樣的事情,實現同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 8,140評論 2 17

友情鏈接更多精彩內容