溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

html中的video標簽在ios微信中無法播放的解決方法之一

發(fā)布時間:2020-07-16 22:41:04 來源:網絡 閱讀:3066 作者:lixiaoyu1223 欄目:web開發(fā)

最近在做一個微信企業(yè)號的項目,其中有一個需求是在企業(yè)號的頁面中播放視頻,最開始是使用video標簽直接加載視頻地址,結果在android手機中能正常播放,但在ios手機中無法播放。

在ios中的癥狀是視頻一直是加載狀態(tài),但就是加載不進來。

在此感謝同事幫我找到一篇文章,
地址是 https://www.zhihu.com/question/41818719,
我的視頻加載不進來的原因比較符合這一篇文章:
https://blog.csdn.net/zhengbin6072/article/details/78235004

下面是我的解決方法:

router.all('/video-play', async (ctx: Context, next: Function) => {
    let { url } = ctx.query; //接收視頻地址
    let list = url.split('uploads'); 
    let path = '/public/uploads' + list[1]; //組合出視頻在本地的地址
    if (!path.startsWith('/uploads') && !path.toLocaleLowerCase().endsWith('.mp4')) {
      await next();
      return;
    }
        // 對視頻請求長度的處理
    function getRange(range: string, stats: any) {
      let r = range.match(/=(\d+)-(\d+)?/);
      let start = r[1];
      let end = r[2] || stats.size - 1;
      return [parseInt(String(start)) || 0, parseInt(String(end))];
    }
    let stats = fs.statSync(process.cwd() + path); // fs獲取視頻文件的狀態(tài)
    let [start, end] = getRange(ctx.headers['range'], stats);
    ctx.set('Content-Range', `bytes ${start}-${end}/${stats.size}`);  //設置返回頭
    ctx.set('Content-Type', 'video/mp4');
    ctx.set('Content-Length', String(end === start ? 0 : end - start + 1));
    ctx.status = 206; // 設置返回狀態(tài) 這個貌似必須是206,如果是200,視頻又沒有請求完成,就不會再請求下一次了
    ctx.body = fs.createReadStream(process.cwd() + path, { start, end }); // 返回視頻流
  });

我的代碼使用的是alaska框架,alaska框架依賴于koa2,
這段代碼是在后臺開了一個接口,用于視頻的請求,參數接收一個url,url是視頻播放地址,因為視頻是直接傳到我的服務器上的,所以對于后臺來說,視頻是在本地,所以直接用fs讀取了。

前端調用:

                <video
                    src={`/video-play?url=${encodeURIComponent(postDetail.video)}`}
                    controls
                    autoPlay
                    width="100%"
                  ></video>

我的前端代碼是用react寫的,所以controls等屬性要設置為true,可以省略值的部分。
如果需要自動播放,不要全屏播放等請另行查閱資料。謝謝。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI