だから、私がやろうとしていることは次のとおりです。ビデオをビデオ要素にロードしたいのですが、「通常の」方法で再生したくありません。映画のフレームレートに従って計算された時間間隔を使用して、各反復で
A. ビデオを手動で 1 'フレーム' 進めます (またはそれにできるだけ近づけます)。
B. そのフレームをキャンバスに描画します。
これにより、ビデオがキャンバス内で「再生」されます。
ここにいくつかのコードがあります:
<video width="400" height="224" id="mainVideo" src="urltovideo.mp4" type="video/mp4"></video>
<canvas width="400" height="224" id="videoCanvas"></canvas>
<script type="text/javascript">
var videoDom = document.querySelector("#mainVideo");
var videoCanvas = document.querySelector("#videoCanvas");
var videoCtx = null;
var interval = null;
videoDom.addEventListener('canplay',function() {
// The video's framerate is 24fps, so we should move one frame each 1000/24=41.66 ms
interval = setInterval(function() { doVideoCanvas(); }, 41.66);
});
videoDom.addEventListener('loadeddata',function() {
videoCtx = videoCanvas.getContext('2d');
});
function doVideoCanvas() {
videoCtx.drawImage(videoDom,0,0);
//AFAIK and seen, currentTime is in seconds
videoDom.currentTime += 0.0416;
}
</script>
これは Google Chrome では完全に機能しますが、Iphone の Safari では機能しません。
ビデオ フレームはキャンバスにまったく描画されません。
私はそれを確認しました:
- 私がフックしたビデオイベントはトリガーされます(「アラート」を実行し、それらが表示されました)。
- キャンバスを制御できます ('
fillRect
' を実行すると塗りつぶされます)。
[drawImage で寸法を指定してみましたが、役に立ちませんでした] Iphone Safari ではビデオ オブジェクトはまったく適用できません...
?drawImage
ビデオ フレームをキャプチャする方法を見つけることができたとしても、iPhone のブラウザには他にもいくつかの問題があります。
ビデオのプロパティへのアクセス
currentTime
は、ビデオの再生が (標準的な方法で) 開始された後にのみ許可されます。どうにかして「隠しプレイ」してからキャプチャすることも考えましたが、うまくいきませんでした。また、何らかの方法でビデオの再生を開始し、すぐに停止することも考えられます。
IOS Safari でビデオの再生を強制的に開始する方法はないようです。video.play()
、またはautoplay
何もしていないようです。ユーザーがビデオの「再生サークル」をタップした場合にのみ、ビデオの再生が開始されます (通常、iPhone のブラウザのビデオと同様に、画面全体に表示されます)。ビデオが再生されると、
currentTime
プロパティは転送されます。ビデオ自体について。動画を一時停止して通常の HTML ページに戻ると、動画要素のフレームが変化しているのがわかります。ただし、遅い段階では (Google Chrome とは異なり、再生しているように見えるほどレートが滑らかに見えます)、iPhone では 1 秒あたり 2 ~ 3 フレームのようなレートになるようです。間隔のタイミングを変えてみても変わらないのですが、iPhoneのブラウザが処理できる最小時間制限があるのでしょう。
「ボーナス質問」 :) - ビデオ要素のフレームがイベントから進行すると、ビデオ要素に円の「再生ボタン」が表示されます (実際には「再生」されていないため)。それを隠して見えないようにする方法はありますか?
これは、IOS 5 を実行する Iphone 3GS (3G と Wi-Fi の両方) と Iphone 4 でテストされており、どちらも説明と同じ結果が得られています。