😎

SORACOM Fluxでソラカメの画質をHDに保つ

2025/02/09に公開

やりたいこと

タイトルのとおりです。ソラカメの画質をHDに保つ方法をSORACOM Fluxを使って実現します。

以前書いた下記のブログを実装したら勝手に画質が下がっちゃって急に精度が出なくなって困ってる方向けの記事です。

https://zenn.dev/takao2704/articles/soracom-flux-croudness-count
https://zenn.dev/takao2704/articles/soracom-flux-croudness-count2

背景

なぜこのようなことをやりたいかについて説明します。
ソラカメは、Wifi接続で24時間映像をクラウドにアップロードし続けるクラウド録画型のカメラソリューションです。
カメラはwifi接続でインターネットを経由して映像をアップロードしますが。通信環境によって映像を送るための帯域が一時的に不十分になることがあります。
ソラカメ対応カメラには、通信帯域が不十分になったことを検知し映像の画質を自動的に下げてアップロードを続けるという動作が実装されています。
このようにして、できるだけ映像を取り逃がさないようになっているのは良いのですが、この機能が発動して一度画質が下がるとその後も画質が下がったままになってしまいます。

帯域の低下が慢性的なものでなく一時的なものである場合、もう一度画質を上げられないかと思うのが人間の性です。
そこで、SORACOM Fluxを使って、一度画質が下がったソラカメの画質をHDに保つ方法を考えてみました。

公式ドキュメントの記述は下記のとおりですので一読ください。

https://users.soracom.io/ja-jp/docs/soracom-cloud-camera-services/feature/#network-bandwidth

やり方

準備

必要なもの

  • SORACOM アカウント
  • ソラカメ関連
    • ソラカメ(AtomCam2)
    • Wifi環境
    • ソラカメライセンス(常時録画ライセンス 7日間プラン)
ソラカメが初めての方はこちら(購入から設置まで)!

SORACOMのアカウント作成など

https://users.soracom.io/ja-jp/guides/getting-started/create-account/

カバレッジタイプはJPで。

ソラカメの購入〜セットアップまで

https://sora-cam.com/setup/

実は最近はソラカメのセットアップにアプリを使わなくても良くなっていたりする。

ソラカメの設置

設置に関する知見はここにたくさん溜まっています。
https://weathernews.jp/s/topics/202403/180215/

カメラチェック

何はともあれ、カメラが正常に動作しているか確認しましょう。

「ソラコムクラウドカメラサービス」 -> 「デバイス管理」

alt text

デバイスの一覧表示で、先ほど登録したカメラがオンラインになっていることを確認します。

alt text

さらに、カメラの名前をクリックすると、カメラの映像が表示されます。

SORACOM Fluxの設定

SORACOM Fluxの設定をしていきます。
SORACOM Flux is 何?という方はこちらをご覧ください。

設定の概要

alt text
以下のようなことを実施するフローを作っていきます。
数字は、上記のフローの説明をした図中の吹き出しの番号に合わせています。

  1. タイマーで定期的にトリガ
    出力チャネル: Timer Cnannel

  2. APIアクションを使ってソラカメの画質を取得
    入力チャネル: Timer Channel

    APIアクションブロックの設定

    利用する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:getSoraCamDeviceAtomCamSettingsQualityOAuth2:authorize
    OUTPUT アクションのアウトプットを別のチャネルに送信する 有効
    OUTPUT 送信先チャネル Current Quality チャネル名称は自由

    設定画面(例)
    alt text

    出力チャネル: Current Quality

  3. 取得した画質(low / mid / high)を数値(1 / 2 / 3)に変換
    入力チャネル: Current Quality

    repubrishブロックの設定

    入力される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は既存の出力先に接続する

    alt text

    出力チャネル: mid_or_low (画質がmidまたはlowの場合), high (画質がhighの場合)

  4. APIアクションを使って画質がlowまたはmidの場合、画質をhighに設定
    入力チャネル: mid_or_low

    APIアクションブロックの設定

    利用する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:setSoraCamDeviceAtomCamSettingsQualityOAuth2:authorize
    OUTPUT アクションのアウトプットを別のチャネルに送信する 無効

    alt text

  5. 画質 -> 数値変換後の出力をそのまま同じチャンネルに返す
    入力チャネル: high, mid_or_low

    repubrishブロックの設定

    入力される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からの出力は既存の出力先から選択する

    alt text

    出力チャネル: Quality Data

  6. APIアクションを使って数値変換された画質をSORACOM Harvest Dataに送信
    入力チャネル: Quality Data

    APIアクションブロックの設定
     入力される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:createSoraCamDeviceDataEntryOAuth2:authorize
    OUTPUT アクションのアウトプットを別のチャネルに送信する 無効

    alt text

画質の時間変化の確認

SORACOM Harvest Dataに保存されたデータを確認して、画質がどのように変化しているかを確認します。

「リソース」で「ソラカメ」を選択しソラカメの名称やIDなどを入力して検索します。
alt text

画質がlowに落ちたタイミングで「3」-> 「1」に変わっていることが確認できます。
alt text

まとめ

ここまでの設定で、もしソラカメの画質がlowまたはmidになった場合、自動的に画質をhighに設定することができます。
また、5分起きに画質を取得して、その結果をSORACOM Harvest Dataに保存することができるので、もし頻繁にlowまたはmidになる場合はその時間帯や状況を把握することができます。
あまりにも頻度が多い場合はボトルネックを解消する、特定のイベントに連動している場合(電子レンジを使っているタイミングで画質が落ちるなど)は、その影響を受けないようにするなど、速度低下の原因究明と抜本対策に役立てましょう。

まあ別に

画質さえ良くなればいいから、いつ画質落ちたかとかそんなの知りたくないしどうでもいいよって方は、Harvest Dataにデータを貯める処理と、そのデータを整えるrepublishをなくして、シンプルにこんなフローにしてみてください。
alt text

GitHubで編集を提案

Discussion