はじめに
こんにちは、KUDs です。
先日、YouTube 埋め込み動画が指定した時間から開始されないという問題が発生しました。
上記は、KUDs の自作アプリ Live Highlight Finder で確認した事象です。
本来、埋め込み動画は「盛り上がった時間帯」を再生するはずなのですが、 Ranking: 2 の埋め込み動画がなぜか Ranking: 1 と同じ時間から開始されてしまっていることが確認できます。
今回の記事では、このような問題が発生する原因と対策についてお話しします。
事象の原因と解決策
埋め込み動画が指定した時間から開始されない事象について、ここでは状況を深堀りします。
前提の確認: 埋め込み動画の開始時間指定方法とは
そもそも、YouTube 埋め込み動画の再生開始時間を指定するにはどうすればいいのでしょうか。
結論、 iframe タグを使用するか、IFrame Player API を使用します。
「そんなの知ってるよ!」って人は読み飛ばしてください。
<iframe> タグを使用
<iframe> タグを使用してプレーヤーを埋め込む場合、以下のように指定します。
<iframe id="ytplayer" type="text/html" width="640" height="360"
src="https://www.youtube.com/embed/tlDvyNDD2YY?start=9900"
frameborder="0"></iframe>
上記の通り、src で指定した以下の URL に対し、必要なパラメータを渡す形です。
"https://www.youtube.com/embed/tlDvyNDD2YY"
start パラメータを使用
パラメータには様々なものがありますが、今回重要なものは start です。
start は、埋め込み動画の開始時間を指定することが可能です。
https://developers.google.com/youtube/player_parameters?hl=ja#Parameters
start このパラメータを指定すると、動画の先頭から指定された秒数分進めた位置から動画の再生が開始されます。パラメータ値は正の整数です。seekTo 関数と同様に、プレーヤーは指定された時間に最も近いキーフレームを探します。そのため、リクエストされた時間の直前から再生が開始される場合もありますが、ずれは通常、最大で 2 秒程度です。 サポートされるパラメータ
以下のようにパラメータを指定することで、任意の開始位置を指定できます。
?start=9900
※上記は 9900 秒 ( 2 時間 45 分) から開始する例
その他パラメータや、IFrame Player API については、以下の公式ドキュメントをご参照ください。
事象の詳細: 指定した開始時間から埋め込み動画が再生されない
前述の通り、通常 start パラメータを指定すればその時間から動画は再生されます。
しかし、「start パラメータで指定した開始位置から再生されない」というのが本事象です。
より具体的に言うと、再生ボタンをクリックした瞬間に、再生開始時間が以前視聴中断した時間にオーバーライドされてしまいます。
こちらは、YouTube の以下の「進行状況バー」の仕様によるものです。
動画の進行状況バーを見ると、前回どこまで動画を視聴したかを簡単に確認できます。動画を最後まで再生しないで閉じると、どこまで視聴したかを示すバーがその動画のサムネイルの下に表示されます。動画を再度再生すると、前回停止した時点から再生されます。
進行状況バーは、テレビ、パソコン、YouTube モバイルアプリで Google アカウントにログイン中の場合に使用できます。
注: 再生履歴を削除すると、進行状況バーもすべて消去されます。
途中まで視聴した動画を選択すると、通常は視聴を止めた時点から再生されます。ほぼ最後まで再生された動画などは、視聴を止めた時点から再生されないことがあります。
https://support.google.com/youtube/answer/7174115
事象の例
例えば、以下の動画を例に考えます。
埋め込み動画の開始位置を 2 時間 45 分に指定しているため、 URL は以下です。
埋め込み動画 URL: https://www.youtube.com/embed/tlDvyNDD2YY?start=9900
実際動画を再生してみてください。
※ 埋め込み動画を再生しても、上記の URL をクリックしても構いません
おそらく正常に 2 時間 45 分から開始された人と、別の時間から開始されてしまった人に分かれるはずです。
次の章では、なぜ人によって挙動が変わるのか含め、問題の原因について解説します。
事象の原因: 指定時刻とは異なる時間から開始されてしまう理由
結論、「YouTube アカウントの再生履歴が参照されているから」この事象は発生します。
先ほどの URL ( https://www.youtube.com/embed/tlDvyNDD2YY?start=9900 ) を開いた際に別の時間から開始されてしまった人は、以下の条件を満たしているはずです。
- 過去に対象の動画を閲覧し、中断した履歴があること
- ブラウザ上で YouTube にログインしており、クッキーが保持されていること (Chrome の場合はちょっと特殊)
- ブラウザがシークレットモード/プライベートモードではないこと
これらの条件を満たした場合、以下の処理フローとなるのです。
- 埋め込み動画の再生ボタンをクリックする
- ブラウザでログインしている YouTube アカウントの再生履歴が参照される
- アカウントの再生履歴に対象の動画を中断した記録があれば、その中断した時間を開始時間にオーバーライド
- 以前視聴を中断した時間から再生されてしまう
次の章では、このような問題をどうやって回避するのか、その解決策を説明します。
事象の解決策: 埋め込み動画を確実に指定した時間から再生する方法
先ほどの章では、別の時間から開始されてしまう人の条件を記載しました。
裏を返せば、その条件のいずれか一つを満たさなければ、動画は最初から再生されます。
なぜなら、「YouTube アカウントの再生履歴が参照できなくなるから」です。
「再生履歴を保存しない」設定を有効化する
YouTube では再生履歴がデフォルトで保存されます。
しかし、この機能はいつでもオフにすることができます。
手順は、YouTube の履歴画面から、「再生履歴を保存しない」を有効化するのみです。
以下のリンクからも設定できるかと思います。
ブラウザで YouTube からログアウトする
YouTube からログアウトしておけば再生履歴がブラウザによって参照されることもありません。
もしくは、ログインしていないブラウザを使用すれば問題ありません。
ログイン状況の確認及びログアウトは YouTube 画面からどうぞ。
ブラウザのシークレットモード/プライベートモードを使用する
ブラウザのシークレットモード/プライベートモードを使用すれば、クッキーが参照されません。
そのため、再生履歴が参照されることもありません。
[Ctrl + Shift + N] 等でシークレットタブを開いて、対象のページを開くと解決です。
上記のいずれかを実施することで、ブラウザによって YouTube アカウントの再生履歴が参照されなくなるため、「埋め込み動画を前回の続きから再生しようとする」処理を回避できます。
事象の解決策: 埋め込み動画を確実に指定した時間から再生させる方法
先ほどの解決策は、「動画を視聴する人」にとっては有益かもしれませんが、動画を提供する側(埋め込む側)からすれば解決にはなりません。
「この埋め込み動画を見る時は、再生履歴が参照されないようにしてから再生してね」と案内するのはあまりに非現実的です。。
ではどうすればいいのか。
プライバシー強化モードを有効にする
開発者やサイト運営者の方は、プライバシー強化モードを使用すると良いでしょう。
やり方は簡単です。
URL のドメインを https://www.youtube.com から https://www.youtube-nocookie.com に変更しましょう。
先ほどの URL の場合は、以下のように変更します。
Before: https://www.youtube.com/embed/tlDvyNDD2YY?start=9900
↓
After: https://www.youtube-nocookie.com/embed/tlDvyNDD2YY?start=9900
この URL で動画を埋め込むと以下のようになります。
これによって、指定したタイムスタンプ ( 2 時間 45 分) から再生開始されるようになります。
プライバシー強化モードについて、詳細は以下公式ドキュメントをご参照ください。
プライバシー強化モードを使用するには:
https://support.google.com/youtube/answer/171780
- HTML 内の埋め込み URL のドメインを https://www.youtube.com から https://www.youtube-nocookie.com に変更します。
- ネットワーク管理者の場合: ファイアウォールの許可リストに youtube-nocookie.com を追加する必要があります。
- アプリで使用するには、埋め込みプレーヤーの WebView インスタンスを使用します。プライバシー強化モードは、ウェブサイト上の埋め込みプレーヤーでのみご利用いただけます。
- 重要: 子ども向けのウェブサイトまたはアプリでは、YouTube 動画をプライバシー強化モードのプレーヤーで埋め込む場合でも、YouTube API 利用規約やデベロッパー ポリシーに基づき、こちらのツールを使用してサイトまたはアプリを自己申告する必要があります。
事象調査時の参考情報
ここでは、本事象の調査にあたって参考にしたリンクをまとめます。
YouTube Help / 最新情報
クリエイター / 視聴者向けに最新情報が提供されています。
直近で特に本事象に関連しそうな変更はなさそうでした。
YouTube API Reference
Data API / IFrame Player API の変更を確認しましたが、特に仕様の変更はなさそうでした。
Google IssueTracker
類似事象について Google に報告している方がいらっしゃいました。
残念ながら「再現できない。ブラウザの問題では。」と一蹴されちゃってましたね。
Status: Won’t Fix (Not Reproducible)
We are unable to reproduce this issue you’re seeing. This issue seems like a browser related one than Youtube API itself. I’d recommend reaching out other community channels like Stackoverflow for further guidance on this issue.
https://issuetracker.google.com/issues/317300583
stack overflow
類似の事象についてコミュニティで相談されており、同一の解決方法が回答されていました。
I solved this on my site by changing the IFrame domain to www.youtube-nocookie.com instead of www.youtube.com :
https://stackoverflow.com/questions/77691282/youtube-iframe-api-start-time-not-working-when-youtube-history-is-enabled
さいごに
www.youtube-nocookie.com 利用時のデメリット
今回の件、解決策として www.youtube-nocookie.com の使用を記載しました。
これによって、指定した開始時間から埋め込み動画が再生されるようになりました。
しかし、こちらのプライバシー強化モードでは、一応デメリットもあります。
それは、埋め込み動画を再生しても、パーソナライズが働かなくなることです。
埋め込み動画を再生しても、再生履歴にも残らないし、今後関連動画としておすすめされることもありません。
気にしない人にとっては全く気にならないかもしれませんが、一応ご留意ください。
根本原因はなんだったのか
参考情報にて記載の通り、stack overflow では、「YouTube のバグじゃないか」と言及されていましたね。
しかし、Google IssueTracker では、「ブラウザの問題ではないか」と言及されていました。
確かに、YouTube API Reference や YouTube Help を確認した限り、関連する変更情報はありませんでした。
しかし、検証したところ Chrome, Edge, Firefox, Safari で事象は再現したため、ブラウザ固有の問題ではないだろうと思われます。
よって、謎です。
もし本事象が改善されれば、www.youtube.com に戻して、アカウントのパーソナライズが働くように戻しても良いのかもしれません。
以上です。
コメント