株式会社メドレーDeveloper Portal

2024-09-30

シンプルで低コストな動画配信の実現:Cloudflare Stream 導入事例

こんにちは。ジョブメドレーアカデミーの開発を担当している德永です。今回は、私たちのオンライン動画研修サービスで Cloudflare Stream を導入した経緯と、そのメリット・デメリットについて詳しくお話しします。

背景

ジョブメドレーアカデミーは、Web / モバイルアプリで提供している介護・障がい福祉・在宅医療事業者向けのオンライン動画研修サービスです。直近では複数の業種への提供を開始し、多くの職員の方々に利用していただけるプロダクトに成長しています。

ジョブメドレーアカデミー

要件に合った動画配信プラットフォームを探す

ジョブメドレーアカデミーでは、外部の動画配信プラットフォームに研修動画をアップロードして、発行される配信用の URL をプロダクト内で利用し、サービス提供を行っています。これは動画配信基盤をメンテナンスするコストを削減し、動画配信の安定性を確保出来ることを目的としています。

もともと利用していた動画配信プラットフォームは、非常に機能が豊富で様々なユースケース・プロダクトに利用することが可能でした。しかし、豊富な機能が提供されていてもジョブメドレーアカデミーで必要とされているのは主に動画の配信のみであり、その他の機能はほとんど必要ありませんでした。

ジョブメドレーアカデミーの動画

また、プロダクトの急成長に伴って動画配信費用の増大 / 定期的な動画配信容量の見積もりやそれに伴う商談といった、サービス利用の上で発生するコスト面に課題を感じていました。

そこで、動画配信プラットフォームの移行を検討することにしました。移行先の動画配信プラットフォームを選定する際、私たちが重視したのは以下のポイントです。

  • シンプルな運用:専任のインフラエンジニアがいなくても簡単に運用できること
  • コスト効率:使った分だけの料金が発生し、予算管理がしやすいこと
  • 機能面:高度な機能は不要で、動画配信に必要な最低限の機能があること

これらの要件を満たすサービスを検討した結果、私たちは Cloudflare Stream を採用することにしました。

競合サービスとの比較

ジョブメドレーアカデミーでは、Cloudflare Stream 導入前にいくつかの動画配信プラットフォームを検討しました。その中でも、特に比較検討したのが ULIZA と AWS Media Services でした。

ULIZA

ULIZA は日本企業が提供する動画配信プラットフォームで、日本語でのサポートが充実している点が魅力でした。また、動画の編集、配信、分析など、多岐にわたる機能を提供しており、Web サービス上で CMS 機能も利用できるため、多くのユースケースに対応できる柔軟性があります。

しかし、ジョブメドレーアカデミーでは、動画配信の基本的な機能のみが必要であり、ULIZA のようなリッチな機能は必ずしも必要ではありませんでした。また、料金体系も Cloudflare Stream と比較して高額であったため、コスト面での懸念がありました。

AWS Media Services

AWS Media Services は、AWS 上で動画配信インフラを構築できるサービスです。柔軟性が高く、プロダクトの要件に合わせてカスタマイズできる点が魅力ですが、インフラ構築や運用には開発工数・保守運用コストを要するため、トータルでのコストが高くなる可能性があります。

ジョブメドレーアカデミーでは、前述の通りインフラ専任のエンジニアがいないため、運用負荷の低いサーバーレスな動画配信プラットフォームが求められていました。そのため、AWS Media Services は採用を見送ることになりました。

Cloudflare Stream を採用した理由

Cloudflare Stream の採用を決定した理由には、いくつかの要素があります。

シンプルな料金体系

Cloudflare Stream は、動画の配信時間と保存時間に基づくシンプルな従量課金制です。

  • 配信費用: 1,000 分あたり 1 ドル
  • 保存費用: 1,000 分あたり 5 ドル

Pricing | Cloudflare Stream docs

他の動画配信プラットフォームと比べてかなり明瞭な料金体系となっており、予算管理を行いやすいのが特徴です。課金形態が少し異なるため比較しづらいのですが、ジョブメドレーアカデミーのケースでは競合サービスと比較しても安価な料金での利用が可能でした。

ジョブメドレーアカデミーでは、7,500 本以上の動画を提供しており、月額で約 390 ドルの保存費用 + 再生時間による配信費用が発生しています。この料金体系のおかげで、今後のコストを明確に予測でき、予算に応じた運用が可能になりました。

Cloudflare Stream 料金体系

実際の課金時の画面

高品質な動画を安定して提供

Cloudflare Stream では、ユーザーが高画質・低画質どちらで視聴しても料金が変わらないという特長があります。特に、私たちのような研修サービスでは、動画内のテキストや細かい部分の可読性が重要となってくる場合もあります。以前利用していたサービスでは、データ転送量によって料金が変動したため、高画質の動画を提供する際にコスト面での懸念がありましたが、Cloudflare Stream ではその心配がなく、安定した高画質の動画配信が可能になりました。

移行コストの低さ

ジョブメドレーアカデミーでは前述の通り、もともとは別の動画配信プラットフォームを利用していました。そちらから移行する作業も簡単に実現可能です。

プロダクト上で問題なく動画が視聴できるかの確認は、Web 上で設定や管理が完結するため、動画をアップロードしただけで配信用の URL なども発行され、インフラ専任のエンジニアがいなくても問題なく検証に進むことが可能でした。

実際の動画ファイル移行についても、アクセス可能な URL から自動で取り込む機能を API として提供しているため、既存の動画プラットフォームで期限付きのリンクを発行し、Cloudflare Stream API 経由で動画配信の URL を渡すだけでアップロードすることが可能です。

開発者体験の良さ

開発者体験という面でも、 Cloudflare Stream の魅力は非常に大きかったです。また、Go、TypeScript、Python 向けの SDK が提供されており、API を使った開発が非常にスムーズに進みました。

さらに、専用プレイヤーの提供もあるため、動画の視聴環境を迅速に構築できました。API ドキュメントも非常に充実しており、SDK が未対応の言語でも容易に実装が可能です。

Cloudflare Stream API Reference

Example なども充実した API ドキュメント

実際に導入しての所感

Cloudflare Stream を実際に運用してみて感じたメリットと、触ってみるまで判明しなかった課題についていくつかご紹介します。

コスト面での満足度 ⭕

期待していた通り、シンプルな料金体系で予算管理が非常に容易でした。また、記載されている料金以外の追加課金が発生せず、コスト面での不安は感じていません。

安定性 ⭕

導入してから今まで、Cloudflare Stream の安定性に課題感はありません。障害情報は Cloudflare Status で確認できるため、運用の際の不安要素も少なく済んでいます。

運用面での評価 💭

以前利用していたサービスでは、利用帯域幅の監視やプラン変更の手続き・次回契約のための想定帯域幅算出に工数がかかっていましたが、Cloudflare Stream ではそれが不要になり、運用工数を削減できました。

一方、CMS 機能が最小限に抑えられている点は導入において課題になりやすい点です。例えば、動画のディレクトリ管理ができないため、ID ベースでの管理を自前で設計する必要があります。また、検索機能なども最低限しか提供されていないため、基本的に私達のサービスでは、 Cloudflare Stream 上にアップロードされた動画の meta フィールドに API 経由でアクセスし、動画の種別管理(テスト用の動画 / 本番用の動画など)を行っています。

その他にも、 Cloudflare 側で提供されているアラートの粒度が粗いのは課題としてありました。配信容量と異なり保存容量は月単位で事前購入する課金形態です。そのため、ユーザーの利用状況に合わせて残容量が減ってきたら容量を購入する必要があります。完全にサービス提供側でアップロードする動画を管理できる場合は問題にならないのですが、ジョブメドレーアカデミーではユーザーが動画をアップロードするユースケースも存在するため、容量の監視が必要です。

Cloudflare が提供している機能として容量の上限が近づくとメールが届くのですが、割合での通知のため、総利用容量が増えた場合は「残り 数%ではあるが、容量の実数(nGB アップロード可能か)を見ると当分問題ない範囲である」ということが多々あり、実際に容量を購入しないと不足してしまうタイミングがいつかわかりません。Cloudflare Stream 側で残容量を取得する API が提供されているため、動画アップロード時にこの API を利用して容量確認を行い、残容量が少なくなった場合に Slack 通知を行うように開発を行いました。

実際に送信されたメール

実際に送信されるメール通知。3,322 分あれば直近は充分なのだが、毎日通知が来る

また、Web ダッシュボード上でのファイル管理が限定的であるため、他の動画配信プラットフォーム(ULIZA などのリッチな機能を持つ動画配信プラットフォーム)に比べて管理の手間がかかる部分もあります。

Cloudflare Stream ダッシュボード画面

実際のダッシュボード画面

Cloudflare Stream 動画詳細画面

実際の動画詳細画面

機能面での評価 💭

基本的には期待していた通り、動画配信の実装をシンプルに実現することができました。しかし、一部のケースにおいて HLS / MPEG-DASH を使った動画配信への対応に工数がかかりました。

HLS / MPEG-DASH での配信はアダプティブ・ビットレート・ストリーミングが基本となり、視聴者のネットワーク環境によって動的に配信される画質が決まります。この機能はネットワーク環境に最適な画質が自動で選択されるため、動画を視聴する職員の方々にとってより良い視聴体験を提供することに繋がりました。

一方、この機能を利用すると一部の動画プレイヤーでは視聴端末のネットワーク環境に適した最高画質でのみ配信され、画質がプレイヤー上で選択出来ないという問題がありました。ジョブメドレーアカデミーの動作環境の中では、iOS Safari x Stream Player や React Native の Expo Player が該当します。

ジョブメドレーアカデミーでは、私用スマホを利用して動画研修を受講される職員の方が Wi-Fi 環境を用意できず、データ通信量を節約するために画質を下げて視聴するというケースがあります。自動的に最高画質での配信が行われてしまう場合、意図せずデータ通信量が増大してしまうことで一部の職員の方にとって不利益が生じる可能性があります。

以前まで利用していた動画配信プラットフォーム上では、mp4 ファイルで複数画質の動画が提供されていたため、ダウンロードする mp4 ファイルの画質を選択することで視聴する職員の方が画質を制御することが出来ました。一方、 Cloudflare Stream では mp4 ファイルでの配信自体は設定により可能ですが、配信される mp4 の画質は常に最高画質での配信に固定されるため、今回の画質を選択したいというケースには利用できませんでした。

また、 mp4 を利用すると動画配信が発生した段階で動画全体の再生時間が課金対象になります。例えば 30 分の動画を 1 分だけ視聴して配信画面を閉じた場合、 HLS / MPEG-DASH だと 1 分が配信費用の課金対象として計上されるのに対し、 mp4 での配信だと 30 分が配信費用の課金対象として計上されてしまいます。利用状況によってはコストがかさむ可能性があるため、注意が必要です。

この配信する画質についての課題は、 Cloudflare Stream で提供されている動画配信時に画質を制御するオプション(clientBandwidthHint)を利用することで解決することが出来ました。このオプションは最終手段であるという旨がドキュメント内に記載されていますが、今回のケースでの利用は妥当だということを Cloudflare Stream の開発者である Zaid Saleem 氏に X 上で確認済みです。

結果的に画質を選択する機能を提供することが出来ました。が、Cloudflare Stream が提供する配信方法の仕様上仕方ないところではありつつ、他の動画配信プラットフォームで提供している mp4 の特定の解像度を配信する方法と比較すると、直感的ではなく開発工数がかかってしまいました。

clientBandwidthHint と解像度の対応表(ジョブメドレーアカデミーのフルHD動画で検証したデータ)
clientBandwidthHint画質
0.1240p
0.2360p
0.3480p
0.4480p
0.5720p
0.6720p
0.7720p
0.8720p
0.9720p
1.01080p

Cloudflare Stream の採用を検討している方へ

Cloudflare Stream を導入するメリットは大きいですが、サービスの特性上、すべてのケースに適しているわけではありません。以下のポイントを踏まえて検討することをお勧めします。

Cloudflare Stream が向いているケース

  • シンプルで予測可能な料金体系を希望している
  • 高品質な動画を安定して提供したい
  • 開発リソースや運用リソースが限られている
  • 開発者向けのサポートやドキュメントが充実している環境を求めている

特に、Cloudflare 内の他サービス(Workers や Pages など)を利用している場合、Stream との組み合わせでコスト削減や運用の効率化が期待できます。

Cloudflare Stream が向いていないケース

一方で、以下のようなケースでは他のサービスを検討することも選択肢に入れるべきです。

動画サイズが 30GB を超えるような動画が必要な場合

Cloudflare Stream では、1 動画あたり最大 30GB のアップロード制限があります。長時間の高解像度動画を扱う場合は、この制限に注意が必要です。

By default, a video upload can be at most 30 GB.
Is there a limit to the amount of videos I can upload? | Frequently asked questions about Cloudflare Stream

高度な分析機能が必要な場合

Cloudflare Stream の分析機能はミニマムなものであるため、視聴履歴や詳細な視聴データの分析は外部ツールで行う必要がある場合があります。

Cloudflare Stream 分析画面

実際の分析画面 - 基本的に課金単位の再生時間に注目した、分析機能のみ提供されている

動画管理機能が求められる場合

前述の通り、 Cloudflare Stream は他サービスと比べ、CMS 機能は非常に限られています。動画のディレクトリ管理やタグ付けなど、細かい管理が必要な場合には、自前で管理システムを構築するか、他のサービスを選ぶ方が効率的です。

おわりに

Cloudflare Stream のシンプルな料金体系と高品質な動画提供は大きな魅力です。一方で、CMS 機能や高度な分析機能を求める場合には、他のサービスも視野に入れる必要があります。

動画配信プラットフォームの選定は、プロダクトの特性やチームの状況に応じて異なりますが、この記事がその一助になれば幸いです。今後もユーザー体験の向上とプロダクトの成長に向けて、最適な技術選定を続けていきたいと思います。


2024 年 9 月時点の情報をもとに執筆しました。サービス内容や仕様は変更される可能性がありますので、最新情報は公式の情報をご参照ください。

株式会社メドレーDeveloper Portal

© 2016 MEDLEY, INC.