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


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を駆使して動画再生周りのトラブル改善に貢献できるよう頑張っていきます。