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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

2136閲覧

HTML5、videoタグでsrcが中途半端に読み込まれるのを検知するには?

teraha

総合スコア59

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2021/06/20 15:11

Gatsby.jsでサイトを作成中。

html

1<video 2 type="video/mp4" 3 preload="metadata" 4 controls 5 src='http://example.com/xxx.mp4' 6/>

上記のようなvideoタグでサイトの中に動画を表示しています。

ときどきですが、動画が正常に再生されないことがあります。
30秒の動画なのに、0~1秒程度だけ再生して止まる。
metadataは読み込まれていて、動画が30秒であることはcontrolsの表示から分かる。
0~1秒再生して止まったとき、シークバーが0~1秒の所で止まるのではなく、30秒の地点まで一気に飛ぶ。

F5(再読み込み)をすると動画は正常に再生できるようになる。

addEventListener('error', ...)でエラーを捕まえようとしたが、何も起こらず。

srcの読み込みに失敗するとerrorのイベントが発生するようなのですが、30秒の動画のうち0~1秒しか読み込みできていないのに、srcの読み込みは成功したものとして扱われているっぽい。

Chromeのデベロッパーツールで「Network」を見ると、mp4を読み込んでいる通信のstatusコードは206。
動画を30秒正常に表示できるときも206。
動画が1秒で止まるときも206。

問題発生時、document.createElement('video')でvideoタグを作り直してやると、正常に動画の再生が可能です。
そこで、「問題が発生したら」「videoタグを作り直す」という処理をしたいのですが、問題発生を検知する部分でつまづいております。

動画のsrcに指定したmp4が一部しか読み込まれなかったことをJavascriptで検知するにはどうすればいいでしょうか?

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

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

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

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

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

guest

回答1

0

試したことはないですが、videoタグから読み込みエラーのイベントは取得できるようでした。ここらへんは試されましたか??
http://www.htmq.com/video/

投稿2021/06/21 16:19

runnynose

総合スコア497

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

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

teraha

2021/06/22 07:27

addEventListenrでerror、abort、stalledを監視していますが、これらのイベントは発生していません。 問題発生時にもplayやendedのイベントが発火するので、正常に再生されて(playイベント)、動画が最後まで到達した(ended)とみなされています。 suspendやwaitingなど、ご紹介いただいたリンクの全てのイベントにリスナーを設定しました。 しかし、suspendは問題があるときもないときも記録され、他のイベントも同様なので、問題発生を切り分けることはできませんでした。
runnynose

2021/06/22 07:35

謎ですね???? > 問題発生時、document.createElement('video')でvideoタグを作り直してやると、正常に動画の再生が可能です。 問題発生しなくても、あらかじめjsでvideoタグ生成した場合はうまくいくんですかね??
teraha

2021/06/22 07:59

あらかじめjsでvideoタグ生成しても同じです。 ページ自体を再読み込みしても動画は再生できるようになります。 問題は毎回ではなく、偶発的に発生します。 ページの再読み込み、videoタグを再作成などはsrcの読み込みをやり直しさせているだけです。
runnynose

2021/06/22 08:32 編集

なるほど。エラーを検知することとはそれてしまうのですが、動画のプリロードみたいなことができたら止まることが無さそうな感覚がしました。 一応、videoタグにpreloadという属性はあるものの、これはうまくいかなそうかお???? http://www.htmq.com/html5/004.shtml あとはlinkタグで行けるか??とおもいきや、videoタグは対応してないかもしれない。。。 https://search.yahoo.co.jp/amp/s/wk-partners.co.jp/homepage/blog/hpseisaku/htmlcss/preload/amp/%3Fusqp%3Dmq331AQIKAGwASCAAgM%253D あとはストリーミング再生させないなんて方法もあるのでこれなら止まらずに行けるかもしれないです????(サイトの表示が遅くなる可能性ありそうですが。。。) https://search.yahoo.co.jp/amp/s/hai3.net/blog/html5-video-tag-non-streaming/%3Famp%3D1%26usqp%3Dmq331AQIKAGwASCAAgM%253D
teraha

2021/06/22 09:12

videoタグのpreloadは、もともと`metadata`に設定してあります。 `auto`に設定しても現象は変わらずです。 linkタグのpreloadは、仕様上ではas="video"は定義されていますが、一般的なブラウザでは未実装になっていました。 ストリーミングさせない方法は、運用上の問題で難しいです。 質問では30秒の動画と書きましたが、実際の運用では動画の長さは不定。 1時間(ファイルサイズ数GB)の動画などを扱う可能性もあるので、フルデータをダウンロードするまで再生が始まらないというのは現実的ではないです。
runnynose

2021/06/22 09:23 編集

再読み込みするとうまくいくなら、その他だと私ならタグが読み込まれた後に強制的にsrcを、再読み込みさせるしか思いつかないですね。。。 お力になれずにすんません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問