質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

819閲覧

Canvasでvideo要素をキャプチャするとAndroid版Chrome・Firefoxだけエラーが出る

JRNA03

総合スコア12

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/04/20 16:25

編集2021/11/19 12:18

前提

JavaScript のプレイヤーにて再生している HLS 形式の動画を Canvas の機能でキャプチャ(スクリーンショット)し、それを HTMLCanvasElement.toBlob() で Blob 化して XHR でサーバーにアップロードする機能を実装していますが、Android 版の Chrome・Firefox でのみうまく動きません。

  • Android 版の Chrome 系ブラウザと Firefox でのみ発生する
  • Chrome と Firefox はエラー内容が異なる
  • PC 版の Safari・Chrome・Firefox ではエラーも発生せず、正常にキャプチャができる
  • iOS 版の Safari では Canvas が空になり画像化しても真っ白になる現象が起きていたが、こちらは同じ関数内でキャプチャする事で解決した
  • HLS 形式ではなく通常の MP4 の動画をキャプチャすると Android 版の Chrome では正常にキャプチャができるようになるが、Android 版の Firefox は HLS の時と同様のエラーが表示されている

JavaScript は初心者で Canvas もほとんど触ったことがなく、どのように解決すればいいか悩んでいます。
宜しくお願いします。

確認ブラウザ

  • iOS: Safari (Chrome・Firefox)
  • Android: Chrome・Firefox
  • PC (Windows・Mac): Safari・Chrome・Firefox

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_x

2019/04/24 07:07

書き込んでいるのは img ではなく this.player.video なので、それを明らかにしてください
guest

回答1

0

自己解決

結局、自己解決しました。

原因ですが、

  • ブラウザが HLS 形式の再生にネイティブで対応している場合、プレイヤー側でネイティブの HLS を利用するような実装になっていたこと
  • Android 版の Chrome は HLS 形式の再生にネイティブで対応しているが、PC 版の Chrome では HLS 形式の再生には hls.js が必要で、ネイティブでは対応していない
  • Android 版の Chrome の HLS 形式のネイティブ再生実装にはいくつかバグがあるようで、Canvas でキャプチャする事ができない不具合を抱えている
  • iOS の Safari は hls.js での再生に対応していないが、キャプチャは可能(バグは発生しない)。ただし、関数を跨いで Canvas を受け渡すと Canvas が空になってしまう

…といったものでした。

そのため、hls.js に対応していないブラウザを除き、基本的に hls.js を利用させるようにプレイヤーのコードを変更し、またキャプチャした Canvas を同じ関数内で扱う事で、解決することができました。

なお、Android 版の Firefox は依然として謎のエラーメッセージが表示されてキャプチャに失敗するのですが、これはブラウザの不具合が原因しているみたいです。開発チームも不具合を認識しているものの修正できていないのだとか。
Android 版の Firefox はシェアも少ないですし、一旦無視して開発を進めたいと思います。

投稿2019/05/03 05:59

編集2021/11/19 12:24
JRNA03

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問