①サービスの全体構成
本シリーズの目的
本シリーズでは、複数回に分けて、防犯カメラ映像を24時間クラウドサーバーに保存し続けるサービスを作ります。
最後までご覧いただければ、必ず動くサービスを作ることができると思います。
しかし、本シリーズの目指すところは、ただサービスが出来上がる、というところではなく、設計検討のポイントや、技術内容の説明なども加えながら、インターネット上の動画配信技術の基本的な知識と実装方法の習得にあります。
ある程度、思った通りのプログラムが組めるレベルになったプログラマーが、次のステージに進むためには、プログラミングの技術だけでなく、ある特定の技術領域に対する、より深い知識・理解が必要になってきます。
本書は、そうした次のレベルに進むプログラマーに対して、一つの技術領域として、インターネット上の動画配信に関しての入り口を示すことを意識して執筆しました。
インターネット上の動画配信技術を深堀していくと、動画やネットワークに関する深い知識が必要になってきます。また、システムを構築するには、多くの場合、クラウドサービスを使用しなければならず、AWSやMicrosoft Azureといったクラウドサービスに対する知識・理解も必要になってきます。AIによる画像解析などでも、まずは解析する場所までカメラ映像をネットワークを介して送る必要があります。
このように、インターネット上の動画配信という切り口で、さらに技術を深堀していくと、付随して様々な技術に出会うことができ、次のステージに進む為の、新たな知識・理解を得ることができます。
こうした技術・知識を、本当に使える自分の技術として身に付けるには、実際に動くものを作ることが最短の道だと、私は常々思っています。
本記事がそのきっかけになり、多くのプログラマーが次のステージに進めることを願っています。
本シリーズを読むうえで
本シリーズではプログラム言語として、PythonとJavaScriptを使用していますので、それらの言語に精通している方が望ましいですが、ある程度の言語に対する理解があれば、問題なく進められると思います。
また、クラウドサービスとしてAWSを使用しますが、基本的なサービスしか使用しませんので、AWSを使用したことがない方でも問題なく進められると思います。
ただ、技術的な内容を中心に説明していきますので、すでにインターネット上に有用な情報が多くあるような部分に関しては説明を省略しています。
必要であれば、他の情報で補いながら読み進めていただければと思います。
特に、FFmpegやWiresharkなどのツールに関しては、機能が膨大の為、本書で説明しきれません。
今回のシステム作成上、必要なコマンドや使い方のみ説明しますので、興味を持った方は、他の書籍やインターネット上の情報を参考に、より理解を深めてもらえればと思います。
今回作成するサービスの構成
まず最初に、今回作成する録画サービスの構成を説明します。
クラウドレコーダ
クラウドレコーダは、カメラと同じネットワーク上に配置し、カメラからの映像をクラウドサーバーに録画する、Pythonのプログラムです。
RTSPネットワークカメラとローカルにUSB接続されたUVCカメラ(USB Video Class)の両方に対応し、カメラとの接続処理や動画の圧縮・多重化処理はPythonからFFmpegを利用して実現します。
Linux/Windows/Macいずれの環境でも、PythonとFFmpegが動く環境であれば、クラウドレコーダも動くようになっています。
取得したカメラ映像は、MPEG2-TSコンテナに多重化した後、数十秒のMPEG2-TSファイルとして、クラウドサーバーにアップロードします。
クラウドサーバー
クラウドサーバーには、AWSを使用します。
使用するAWSのサービスは以下の2つです。
S3
AWSが提供するクラウドストレージ・サービスです。
コンテンツの保存だけでなく、HTTPでのコンテンツ公開も可能なので、簡易的なHTTPサーバーとしても利用できます。
今回は、クラウドレコーダからアップロードされてくるMPEG2-TSファイルの保存と配信の両方をS3で行います。
また、動画再生用のJavaScriptを含んだHTMLファイルも同じくS3に配置・配信します。
Lambda
いわゆるサーバーレスなシステムを実現する為の、イベント駆動型コンピューティングサービスです。
簡単に言うと、関数の中身を書くだけで、インフラやサーバーを気にせずにWebAPIが作れるサービスです。
今回のシステムでは、指定した区間の動画を再生する為のM3U8ファイルを、動的に作成する機能をLambdaを使って、Pythonで作ります。
動画再生プレイヤー
保存したカメラ映像の再生は、ウェブブラウザ上で行いますので、JavaScriptを使って動画再生プレイヤーを作ります。
JavaScriptで実装するので、HLSの再生はVideo.JSで行います。
また、保存した動画の再生だけでなく、簡易的なリアルタイム・ライブビューの機能も実装します。