動画の視聴体験を可視化したいんだ #NewRelic #NRUG

こちらは New Relic Advent Calendar 2022TVer Advent Calendar 2022 21日目の記事です。

こんにちは、SREの加我です。
今回はNew RelicのVideo Agentについて書いていきます。短めなのでサクサクいきます。

前置き

TVerではサービスのモニタリングのためにNew Relicを導入し、日々活用しております。
今回は図の赤枠にあるフロントエンドのモニタリングについて話していきます。

配信サービスのモニタリングの課題

サービスの信頼性を測る場合、サービスのバックエンドやインフラのモニタリングだけで事足りるかと言うと私はそうは思いません。やはりクライアント (ユーザー) 目線で何が起きているのかを把握する必要があります。

そのため、iOS/Androidはもちろん、コネクテッドTVにおける各種プラットフォーム向けのアプリにはNew Relic MobileモニタリングのSDKが組み込まれており、ユーザーに起きた問題を収集・可視化できるような仕組みを構築しています。

New Relic Mobileモニタリングにより、アプリケーションを使用しているユーザーにどのようなクラッシュおよびネットワークエラーが発生しているのか、頻度はどれくらいなのか、どのバージョンから発生してどのバージョンで解消されたのか、などを調査することが可能になりました。ユーザー目線でのモニタリングを行うという点において大きな成果です。

しかし、再生した番組がちゃんと視聴できているのかという点においては確証を得られていません。もしかしたらバッファリングを繰り返していたり、ビットレートが不適切だったり、広告の動画が流れていなかったりといった問題が発生している可能性があります。

私達はユーザーがちゃんと動画を再生することが出来ているのか、品質は問題ないのかという点まで踏み込んでモニタリングを行いたいわけです。

New Relic Video Agent

では動画のモニタリングをどのようにして実現していくのか、市販のソリューションを利用するのか、色々と悩んでいた時にNew Relic様にご紹介頂いたのがNew Relic Video Agentでした。

github.com

github.com

New Relic Video AgentはiOS / Androidの動画プレイヤーをモニタリングし、プレイヤーで発生したイベントを収集してくれる機能です。New Relicの単独のサービスではなく、New Relic Mobile AgentのPluginという位置づけとなっており、NRQLからのみデータを確認する事が可能です。

iOSアプリでのデータ

Androidアプリでのデータ

New Relic Video Agentで取得できるイベントはGitHub上のドキュメント (iOS / Android) にまとめられており、現時点だとiOS / Android共通で下記のイベントを取得することができます。

Action Sent when...
TRACKER_READY The tracker is started.
PLAYER_READY The tracker got a valid player instance.
CONTENT_REQUEST A video stream is requested.
CONTENT_START Video started, first frame shown.
CONTENT_BUFFER_START Video started buffering.
CONTENT_BUFFER_END Video ended buffering.
CONTENT_PAUSE Video paused.
CONTENT_RESUME Video resumed after a pause.
CONTENT_END Video ended.
CONTENT_ERROR An error happened.
CONTENT_HEARTBEAT Every 30 seconds between CONTENT_START and CONTENT_END.
CONTENT_RENDITION_CHANGE Stream quality changed.
AD_BREAK_START An ad break starts.
AD_BREAK_END And ad break ends.
AD_QUARTILE Every quarter of the ad viewed.
AD_CLICK User clicked on the ad.

また、New Relic Video AgentではAttributeとして下記のデータを取得することができます。

Attribute Description
contentTitle Title of the video.
contentDuration Video duration.
contentPlayhead Current playback position.
contentSrc Stream source (URL).
contentBitrate Video bitrate.
contentRenditionWidth Video width.
contentRenditionHeight Video height.
contentFps Video frames per second.
contentLanguage Video language.
contentIsMuted Video is muted.
contentIsLive Video is a live stream.
playerName Name of the video player.
playerVersion Version of the video player.
viewId ID of current playback.
totalPlaytime Total time played.
playtimeSinceLastEvent Time played since last event sent.

ということで、実際に取得した上記イベントを見つつ、サービスの改善に利用していくぞと意気込んでみたものの、各アクションをどのように計測・改善していくべきか判断できないまま年内が終わってしまったのでした・・・無念。
実際にCONTENT_ERRORとCONTENT_BUFFER_STARTを見てはいたのですが、それを具体的な対策まで落とし込むところまでできませんでした。

まとめ

今年はNew Relic Video Agentを少し触ってみた程度で、実際にユーザー体験の計測・改善に活用するところまでは到達できませんでした。

来年こそはNew Relic Video Agentを駆使して動画再生周りのトラブル改善に貢献できるよう頑張っていきます。