ソフトウェア

Netflixアプリのプチフリーズを引き起こした「余分な40ミリ秒」の行方とは?


動画配信サービスのNetflixは、Android TVやApple TV、AmazonのFireTVなど、多種多様なスマートテレビにアプリケーションを提供しています。アプリの開発にはNetflixとスマートテレビベンダーとの連携が必須であるため、Netflixにはベンダーのアプリ開発を支援する「パートナーエンジニア」と呼ばれる職種が存在します。そんなパートナーエンジニアのひとりであるJohn Blair氏が、自身の関わった「動画のプチフリーズバグ」の発生から解決に至るまでのいきさつを語っています。

The case of the extra 40 ms | Netflix TechBlog
https://netflixtechblog.com/life-of-a-netflix-partner-engineer-the-case-of-extra-40-ms-b4c2dd278513

2017年のある日、Blair氏はAndroid 5.0ベースのAndroid TV向けアプリ開発を任されたとのこと。プロジェクトに関わっていたのはデバイスを立ち上げる欧州の有料テレビ、デバイスのファームウェア開発を行う企業、デバイスのチップ開発を行う企業、そしてBlair氏自身の4者でした。


プロジェクトは途中まで順調でしたが、有料テレビ側の内部テスト段階で「動画が途切れ途切れになる」問題が発生。「Netflixアプリを立ち上げて、動画を再生し、その後デバイス固有の画面に戻る」という動作を行うと、必ず問題が発生したそうです。チップ開発エンジニアが「NetflixのAndroid TV用アプリ『Ninja』の音声データ転送速度が不十分であることが原因」と調査報告を上げたため、Blair氏は関係者からのバグ修正を迫る圧力を感じ、問題の調査に取り組み始めたと語っています。

他のデバイスにインストールされたNinjaでは問題がなく、テストに使用したデバイスのNinjaだけで問題が生じていることに疑問を感じたBlair氏は、Ninjaのソースコードを読んで音声転送の仕組みを調査し始めました。まず、Ninjaはダウンロードしたデータをいったんアプリ内のバッファに格納し、その後デバイス側のデコーダーバッファに格納するとのこと。Blair氏による調査の結果、このNinjaのバッファからデバイスのデコーダーバッファへデータを転送する処理は、NinjaではなくAndroid TV側が行っていることが判明しました。


Ninjaの最高フレームレートは60fpsなので、1フレームの更新間隔はおよそ16.66ミリ秒。つまり、1フレームの転送に16.66ミリ秒以上かかってしまうと、動画が途切れてしまうことになります。しかし、Android TV側のフレーム転送レートは15ミリ秒だったため、理論上は転送速度には余裕がある状態でした。「余分な時間はどこにあるのだ?」と、Blair氏は疑問に思ったそうです。

Blair氏はさらに深く問題を調査するため、スクリプトを自作して転送時のログを取得しました。以下のグラフはそのログを可視化したもので、オレンジが転送速度(バイト/ミリ秒)、黄色が転送処理の呼び出しにかかった時間(ミリ秒)、グレーが転送処理の呼び出し間隔(ミリ秒)となっています。

動画の途切れが発生している領域にあたるグラフの右側部分を見てみると、転送処理の呼び出し間隔が55ミリ秒と、通常時の15ミリ秒と比較してかなり大きいことがわかります。転送処理の呼び出しが頻繁に行われなくなった結果、オレンジの転送速度も快適な動画再生を行えない領域まで低下してしまっています。


「Android側の処理による問題だ」とBlair氏がプロジェクト関係者に報告したところ、「では転送処理の呼び出し間隔を小さくしてください」と突き返されてしまったとのこと。しかし、このタイミングで同僚が発見したAndroid 5に存在する以下のバグにより、Blair氏は救われたと語っています。Androidのバッファ転送処理はアプリがフォアグラウンドにある場合は15ミリ秒間隔、バックグラウンドにある場合は追加で40ミリ秒待機して55ミリ秒間隔で呼び出される仕様ですが、Android 5にはアプリがフォアグラウンドに移行しても呼び出し間隔が55ミリ秒のままになるバグが存在していたとのこと。Android 6では修正されているバグであったため、根本原因は「デバイスがベースとしていたAndroid 5.0のバグ」でした。

Blair氏はこの事例を「最も困難だった」としつつ「広範なシステムを調査し、同僚の力を借りて、常に学び続けながら予想もできない問題を解決する、私の大好きなパートナーエンジニアという仕事をとてもよく表しています」とコメントしています。

この記事のタイトルとURLをコピーする

・関連記事
MacでNetflixの4K画質を再生するにはセキュリティチップのT2が必須になる - GIGAZINE

無料&オープンソースでシステム障害のレポートを一元化できるNetflix製インシデント管理ツール「Dispatch」 - GIGAZINE

ストリーミングの効率を大幅に改善する新アルゴリズム「Fugu」とは? - GIGAZINE

Amazonがライブストリーミング機能「Amazon Interactive Video Service」をリリース、ウェブサイトやアプリへ動画を直接配信可能に - GIGAZINE

in ソフトウェア,   ネットサービス, Posted by darkhorse_log

You can read the machine translated English article here.