Video.js 截圖 Failed to execute 'drawImage' on 'CanvasRenderingContext2D'


     流媒體服務有一項功能是抓圖,也就是從正在播放的視頻流中獲取圖片。這個功能可以在服務

端實現,具體的思路也比較簡單從視頻流中獲取一幀關鍵幀,解碼后保存成一張圖片並推送給請求

客戶端就可以了。服務端實現簡單但存在一個缺點-:實時性不高。經常抓到的圖是數秒以后的圖片。

其原因是客戶端有播放延時,一般情況下公網下Web客戶端播放rtmp及rtsp流延時在1-2S之間,播放

hls流延時在3-5S,這就意味着從正在播放的rtmp及rtsp流中抓圖,基本上是1-2S以后的圖片,從正

在播放的hls流抓圖 基本上是3-5秒以后圖片。為此,再提供一種抓圖模式:Web前端抓圖。

     H5 可以直接利用“video標簽” 截圖,基本代碼如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>視頻截圖</title>

<script>
window.onload = function () {
  var button = document.querySelectorAll('.screen')[0];
  var video = document.querySelectorAll('video')[0];
  var canvas = document.querySelectorAll('canvas')[0];
  var ctx = canvas.getContext('2d');
  var width = 640;
  var height = 480;
    
  canvas.width = width;
  canvas.height = height;

  video.src = ”http://192.168.1.102:12345/cgmedia/hls/getstream/addr=live/34020000001320000001@192.168.1.64_5060/34020000001320000001@192.168.1.64_5060.m3u8“;
  video.width = width;
  video.height = height;
  video.controls = true;
  video.autoplay = true;

  button.onclick = function () {
    ctx.drawImage(video, 0, 0, width, height); 
    
  };
};
</script>
</head>

</html>

    如果視頻使用video.js播放請注意drawImage方法第一個參數不能直接傳video,需要傳video.childNodes[0] 

 否則會獲取圖片失敗,報“Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided  value

 is not of type '(CSSImageValue or HTMLImageElement or SVGImageElement or HTMLVide oElement or 

HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'錯誤。

 

如需交流可加QQ群766718184,1038388075 或者QQ3501870,

視頻下載地址:http://www.chungen90.com/?news_33/

 Demo下載地址: http://www.chungen90.com/?news_34


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM