ひよこメモ

自分が調べたこととか試したこととか書いていきます

ChromeのMedia Historyについて

🐣🎄IPFactory Advent Calendar 2020 - Qiita 19日目の記事です🎄🐣

はじめに

こんにちは、iria_piyo🐣です。

今回は、Chrome86から追加されたMedia Historyというアーティファクトに関するメモを書きました。

環境

  • OS : Windows10 20H2

  • ブラウザ : Google Chrome バージョン 87.0.4280.88

Media Historyとは

Chrome86から追加されたChromeアーティファクトで、YouTubeTwitterなどの動画や、音楽ストリーミングサイトなどの履歴が残っています。

ファイル形式はSQLiteデータベースで、%USERPROFILE%\AppData\Local\Google\Chrome\User Data\Default\Media Historyというパスに格納されています。

今回の記事で、Media Historyの解析に使用したツールは、DB Browser for SQLiteです。

Media Historyのテーブル

Media Historyには、下記のテーブルがあります。

  • kaleidoscopeDataテーブル
  • mediaFeedテーブル
  • mediaFeedItemテーブル
  • metaテーブル
  • sqlite_sequence
  • originテーブル
  • playbackテーブル
  • playbackSessionテーブル
  • mediaImageテーブル
  • sessionImageテーブル

今回は、下記の5つのテーブルについて説明していきます。

  • originテーブル
  • playbackテーブル
  • playbackSessionテーブル
  • mediaImageテーブル
  • sessionImageテーブル

originテーブル

このテーブルには、動画再生の履歴や、音楽再生の履歴が残ったオリジンの一覧と最後にそのオリジンでメディアを視聴した時間、総視聴時間などが記録されています。

f:id:iria_piyo:20201219125644p:plain
図1:originテーブル

  • origin.last_updated_time_s

象のオリジンで最後にメディアを視聴した時間が記録されています。(単位は秒) origin.last_updated_time_sは、1601/1/1 0:00 UTCから経過した秒数を値として持っています。

図1のTwitter13249550040は、2020/11/11 06:34:00 UTCになります。

WebKit/Chrome Timestamp Converterを利用して変換する場合は、秒からマイクロ秒に変換して、入力する必要があります。

  • origin.aggregate_watchtime_audio_video_s

playback.watch_time_sをオリジンごとに合計した時間が記録されています。

playbackテーブル

このテーブルには、アクセスしたURLの動画の視聴時間、ビデオやオーディオの有無、最終視聴時間などが記録されています。

f:id:iria_piyo:20201218173757p:plain
図2:playbackテーブル

  • playback.watch_time_s

対象のURLの視聴時間が記録されています。
この値の合計が、origin.aggregate_watchtime_audio_video_sに記録されるようです。

例として、Twitterorigin.aggregate_watchtime_audio_video_splayback.watch_time_sの合計を比較してみます。 Twitterorigin.aggregate_watchtime_audio_video_sを見てみると、値が258となっています。(図3参照)

f:id:iria_piyo:20201219171232p:plain
図3:Twitterのaggregate_watchtime_audio_video_s

Twitterplayback.watch_time_sを見てみると、4+25+3+87+24+115=258になりました。

f:id:iria_piyo:20201218222004p:plain
図4:Twitterwatch_time_s

  • playback.has_video

ビデオの有無が記録されるようです。

  • playback.has_audio

オーディオの有無が記録されるようです。

  • playback.last_updated_time_s

最後に対象URLを視聴した時間が記録されるようです。

playbackSessionテーブル

このテーブルには、URL情報や、メディアの総時間、タイトル、メディアの再生位置などを記録しているようです。playbackテーブルと違い、URLの重複はないものと思われます。

f:id:iria_piyo:20201218205320p:plain
図5:playbackSessionテーブル

  • playbackSession.duration_ms

メディアの総時間が記録されています。(単位はミリ秒) 図5のid:915の動画の場合、playbackSession.duration_ms118381となっており、動画の総時間は01:58であることを意味しています。

  • playbackSession.position_ms

メディアをどこまで再生したかが記録されています。(単位はミリ秒) 図5のid:915の動画の場合、playbackSession.position_ms40187となっており、動画が0:40まで再生されたことがわかります。

  • playbackSession.last_updated_time_s

最後にメディアを視聴した時間が記録されています。

  • playbackSession.title

動画のタイトルが記録されています。

  • playbackSession.artist

YouTubeの場合は、チャンネル名が記録されていました。 サイトによっては、値が入っていないものもありました。

mediaImageテーブル

このテーブルには、動画のサムネイルのURLが記録されていました。 今のところ、YouTubeのサムネイルしか確認できていません。(図5参照)

f:id:iria_piyo:20201218180928p:plain
図6:mediaImageテーブル

sessionImageテーブル

このテーブルには、mediaImageテーブルに記録されているサムネイルの画像サイズが記録されていました。

f:id:iria_piyo:20201218180958p:plain
図7:sessionImageテーブル

Google翻訳の音声読み上げ機能もメディアの痕跡として残る

図8のようにGoogleで英単語を検索し、Google翻訳の音声読み上げ機能を使って、その音声を再生してみました。

f:id:iria_piyo:20201218224205p:plain
図8:Googleで英単語を検索した結果

すると、playbackテーブルに検索した際のURLが記録されました。しかしながら、playbackSessionテーブルには、何も残っていませんでした。(図9参照)

f:id:iria_piyo:20201218224739p:plain
図9:playbackテーブルに検索した際のURLが記録された

このように、playbackテーブルに存在するURLが、playbackSessionテーブルには存在しないケースがいくつかありました。playbackSessionテーブルに記録される条件については、今後検証していきたいと思いました。

参考資料