SORACOM Fluxでソラカメの画質をHDに保つ
やりたいこと
タイトルのとおりです。ソラカメの画質をHDに保つ方法をSORACOM Fluxを使って実現します。
以前書いた下記のブログを実装したら勝手に画質が下がっちゃって急に精度が出なくなって困ってる方向けの記事です。
背景
なぜこのようなことをやりたいかについて説明します。
ソラカメは、Wifi接続で24時間映像をクラウドにアップロードし続けるクラウド録画型のカメラソリューションです。
カメラはwifi接続でインターネットを経由して映像をアップロードしますが。通信環境によって映像を送るための帯域が一時的に不十分になることがあります。
ソラカメ対応カメラには、通信帯域が不十分になったことを検知し映像の画質を自動的に下げてアップロードを続けるという動作が実装されています。
このようにして、できるだけ映像を取り逃がさないようになっているのは良いのですが、この機能が発動して一度画質が下がるとその後も画質が下がったままになってしまいます。
帯域の低下が慢性的なものでなく一時的なものである場合、もう一度画質を上げられないかと思うのが人間の性です。
そこで、SORACOM Fluxを使って、一度画質が下がったソラカメの画質をHDに保つ方法を考えてみました。
公式ドキュメントの記述は下記のとおりですので一読ください。
やり方
準備
必要なもの
- SORACOM アカウント
- ソラカメ関連
- ソラカメ(AtomCam2)
- Wifi環境
- ソラカメライセンス(常時録画ライセンス 7日間プラン)
ソラカメが初めての方はこちら(購入から設置まで)!
SORACOMのアカウント作成など
カバレッジタイプはJPで。
ソラカメの購入〜セットアップまで
実は最近はソラカメのセットアップにアプリを使わなくても良くなっていたりする。
ソラカメの設置
設置に関する知見はここにたくさん溜まっています。
カメラチェック
何はともあれ、カメラが正常に動作しているか確認しましょう。
「ソラコムクラウドカメラサービス」 -> 「デバイス管理」
デバイスの一覧表示で、先ほど登録したカメラがオンラインになっていることを確認します。
さらに、カメラの名前をクリックすると、カメラの映像が表示されます。
SORACOM Fluxの設定
SORACOM Fluxの設定をしていきます。
SORACOM Flux is 何?という方はこちらをご覧ください。
設定の概要
以下のようなことを実施するフローを作っていきます。
数字は、上記のフローの説明をした図中の吹き出しの番号に合わせています。
-
タイマーで定期的にトリガ
出力チャネル: Timer Cnannel -
APIアクションを使ってソラカメの画質を取得
入力チャネル: Timer ChannelAPIアクションブロックの設定
利用するAPI:画質設定を取得する SoraCam:getSoraCamDeviceAtomCamSettingsQuality
https://users.soracom.io/ja-jp/tools/api/reference/#/SoraCam/getSoraCamDeviceAtomCamSettingsQuality設定内容
大項目 詳細項目 設定値 備考 CONDITION アクションの実行条件 空欄 CONFIG URL GET
/v1/sora_cam/devices/カメラID/atom_cam/settings/quality
カメラID
はソラカメのデバイスIDに置き換える
getSoraCamDeviceAtomCamSettingsQuality
で検索CONFIG HTTPボディ 空欄 設定不可 CONFIG APIを実行するSAMユーザー 新規作成 個別に制御する場合は、 SoraCam:getSoraCamDeviceAtomCamSettingsQuality
とOAuth2:authorize
OUTPUT アクションのアウトプットを別のチャネルに送信する 有効 OUTPUT 送信先チャネル Current Quality チャネル名称は自由 設定画面(例)
出力チャネル: Current Quality
-
取得した画質(low / mid / high)を数値(1 / 2 / 3)に変換
入力チャネル: Current Qualityrepubrishブロックの設定
入力されるpayload
{ "state": "low" // または "state": "mid" // または "state": "high" }
設定内容
大項目 詳細項目 設定値 備考 CONDITION アクションの実行条件 payload.state == "low"
low, mid, highの分岐を用意する CONFIG データを変換する ✅️ CONFIG Content Type application/json デフォルト設定 CONFIG Content {
"state" : "${payload.state}",
"state_num":1
}payload.state
はそのまま残し、新たにstate_num
というキーを追加する。
lowの場合1, midは2, highは3とする。OUTPUT アクションのアウトプットを別のチャネルに送信する 有効 OUTPUT 送信先チャネル midとlowの場合: mid_or_low
highの場合:high
lowの出力先を新規で作った場合は、midは既存の出力先に接続する 出力チャネル: mid_or_low (画質がmidまたはlowの場合), high (画質がhighの場合)
-
APIアクションを使って画質がlowまたはmidの場合、画質をhighに設定
入力チャネル: mid_or_lowAPIアクションブロックの設定
利用するAPI: 画質設定を変更する SoraCam:setSoraCamDeviceAtomCamSettingsQuality
https://users.soracom.io/ja-jp/tools/api/reference/#/SoraCam/setSoraCamDeviceAtomCamSettingsQuality設定内容
大項目 詳細項目 設定値 備考 CONDITION 空欄 CONFIG URL POST
/v1/sora_cam/devices/カメラID/atom_cam/settings/quality
カメラID
はソラカメのデバイスIDに置き換える
setSoraCamDeviceAtomCamSettingsQuality
で検索CONFIG HTTPボディ {
"state": "high"
}state
の値をhigh
に設定するCONFIG APIを実行するSAMユーザー 新規作成 個別に制御する場合は、 SoraCam:setSoraCamDeviceAtomCamSettingsQuality
とOAuth2:authorize
OUTPUT アクションのアウトプットを別のチャネルに送信する 無効 -
画質 -> 数値変換後の出力をそのまま同じチャンネルに返す
入力チャネル: high, mid_or_lowrepubrishブロックの設定
入力されるpayload
{ "state": "low", "state_num": 1 // stateがmidの場合はstate_numが2, // stateがhighの場合はstate_numが3となる }
設定内容
大項目 詳細項目 設定値 備考 CONDITION アクションの実行条件 空欄 CONFIG データを変換する □ チェックしない CONFIG Content Type 設定不可 CONFIG Content 設定不可 OUTPUT アクションのアウトプットを別のチャネルに送信する 有効 OUTPUT 送信先チャネル Quality Data low_or_midからの出力先を新規で作った場合は、highからの出力は既存の出力先から選択する 出力チャネル: Quality Data
-
APIアクションを使って数値変換された画質をSORACOM Harvest Dataに送信
入力チャネル: Quality DataAPIアクションブロックの設定
入力されるpayload
{ "state": "low", "state_num": 1 // stateがmidの場合はstate_numが2, // stateがhighの場合はstate_numが3となる }
利用するAPI:任意のデータをソラカメ対応カメラに紐づけて Harvest Data に保存する createSoraCamDeviceDataEntry
https://users.soracom.io/ja-jp/tools/api/reference/#/SoraCam/createSoraCamDeviceDataEntry設定内容
大項目 詳細項目 設定値 備考 CONDITION アクションの実行条件 空欄 CONFIG URL POST
/v1/sora_cam/devices/カメラID/data
カメラID
はソラカメのデバイスIDに置き換える
createSoraCamDeviceDataEntry
で検索CONFIG HTTPボディ ${payload} 前のチャネルの出力をそのままHarvest Dataに投入する CONFIG APIを実行するSAMユーザー 新規作成 個別に制御する場合は、 SoraCam:createSoraCamDeviceDataEntry
とOAuth2:authorize
OUTPUT アクションのアウトプットを別のチャネルに送信する 無効
画質の時間変化の確認
SORACOM Harvest Dataに保存されたデータを確認して、画質がどのように変化しているかを確認します。
「リソース」で「ソラカメ」を選択しソラカメの名称やIDなどを入力して検索します。
画質がlowに落ちたタイミングで「3」-> 「1」に変わっていることが確認できます。
まとめ
ここまでの設定で、もしソラカメの画質がlowまたはmidになった場合、自動的に画質をhighに設定することができます。
また、5分起きに画質を取得して、その結果をSORACOM Harvest Dataに保存することができるので、もし頻繁にlowまたはmidになる場合はその時間帯や状況を把握することができます。
あまりにも頻度が多い場合はボトルネックを解消する、特定のイベントに連動している場合(電子レンジを使っているタイミングで画質が落ちるなど)は、その影響を受けないようにするなど、速度低下の原因究明と抜本対策に役立てましょう。
まあ別に
画質さえ良くなればいいから、いつ画質落ちたかとかそんなの知りたくないしどうでもいいよって方は、Harvest Dataにデータを貯める処理と、そのデータを整えるrepublishをなくして、シンプルにこんなフローにしてみてください。
Discussion