3.2.5. Media Service

3.2.5.1. Environment Variables

設定ファイル内の設定値は環境変数で上書きできます。

例えば、設定ファイルが次のようになっている場合、

[section]
  attributes-1 = "value"

以下のような環境変数で設定を上書きできます。

MEDIA_SECTION_ATTRIBUTES_1="overwrite"

設定値が文字列の配列である場合は、カンマ区切りでの指定が可能です。

例えば、設定ファイルが次のようになっている場合、

[section]
  array-attributes = ['val1', 'val2']

環境変数に以下のような値を与えることで設定を上書きできます。

MEDIA_SECTION_ARRAY_ATTRIBUTES="overwrite1,overwrite2

テーブルの配列([[section-name]]のように二重角括弧で記述)の中の項目は、環境変数による上書きはできません。

3.2.5.2. Reference

すべての設定項目と、デフォルト値を示します。

3.2.5.2.1. api

Property

Description

Default

bind-address

指定したホストとポートでサーバーをAPIサーバーをリスンします。

127.0.0.1:8094

[api]
  # 指定したホストとポートでサーバーをAPIサーバーをリスンします。
  bind-address = '127.0.0.1:8094'

3.2.5.2.2. postgres

Property

Description

Default

dbname

DB名です。

media

username

DBユーザー名です。

media

password

DBパスワードです。

media

address

DBアドレスです。

127.0.0.1:5432

max-idle-conns

コネクションプールの最大アイドルコネクション数です。

10

max-open-conns

コネクションプールの最大オープンコネクション数です。

10

max-conn-idle-time

コネクションの最大アイドル時間です。この時間を超えると切断されます。

0s

max-conn-lifetime

コネクションの最大接続時間です。この時間を超えると切断されます。

0s

[postgres]
  # DB名です。
  dbname = 'media'
  # DBユーザー名です。
  username = 'media'
  # DBパスワードです。
  password = 'media'
  # DBアドレスです。
  address = '127.0.0.1:5432'
  # コネクションプールの最大アイドルコネクション数です。
  max-idle-conns = 10
  # コネクションプールの最大オープンコネクション数です。
  max-open-conns = 10
  # コネクションの最大アイドル時間です。この時間を超えると切断されます。
  max-conn-idle-time = '0s'
  # コネクションの最大接続時間です。この時間を超えると切断されます。
  max-conn-lifetime = '0s'

3.2.5.2.3. broker

Property

Description

Default

url

Broker ServiceのURLです。

http://127.0.0.1:8080

[broker]
  # Broker ServiceのURLです。
  url = 'http://127.0.0.1:8080'

3.2.5.2.4. measurement

Property

Description

Default

url

Measurement ServiceのURLです。

http://127.0.0.1:8080

[measurement]
  # Measurement ServiceのURLです。
  url = 'http://127.0.0.1:8080'

3.2.5.2.5. auth

Property

Description

Default

url

Authentication ServiceのURLです。

http://127.0.0.1:8080

[auth]
  # Authentication ServiceのURLです。
  url = 'http://127.0.0.1:8080'

3.2.5.2.6. media

Property

Description

Default

conversion-timeout

brokerからデータが受け取れなくなってから、ffmpegプロセスを再起動するまでの時間です。

5s

ffmpeg

ffmpegへのパスです。

ffmpeg

ffmpeg-log-level

ffmpegのログレベルです。 https://ffmpeg.org/ffmpeg.html

debug

[media]
  # brokerからデータが受け取れなくなってから、ffmpegプロセスを再起動するまでの時間です。
  conversion-timeout = '5s'
  # ffmpegへのパスです。
  ffmpeg = 'ffmpeg'
  # ffmpegのログレベルです。 https://ffmpeg.org/ffmpeg.html
  ffmpeg-log-level = 'debug'

3.2.5.2.7. media-filmed

Property

Description

Default

ffmpeg

ffmpegへのパスです。

ffmpeg

ffmpeg-log-level

ffmpegのログレベルです。 https://ffmpeg.org/ffmpeg.html

debug

ffmpeg-threads

libopenh264を使用して変換を行うときの`-threads` オプション(使用されるスレッド数)です。0を指定するとスレッド数は自動で設定されます。

0

dummy-file-path

変換に失敗した場合に使用するダミー動画へのパスです。

./dummy.ts

storage.type

ストレージのタイプです。 (s3, local)

local

storage.local.base-dir

ローカルストレージに保存する際の基準となるパスです。

./media-filmed/hls

storage.s3.bucket-name

バケット名です。

intdash-media-service

storage.s3.region

リージョンです。

ap-northeast-1

storage.s3.aws-access-key

AWSアクセスキーです。

storage.s3.aws-secret-access-key

AWSシークレットです。

storage.s3.endpoint

S3のエンドポイントです。

storage.s3.s3-force-path-style

オブジェクトの指定にpath-styleのURLを使用します。 https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/interfaces/bucketendpointinputconfig.html#forcepathstyle

true

nats-streaming.url

nats-streamingのURLを指定します

nats://127.0.0.1:4222

nats-streaming.username

ユーザー名です。

intdash

nats-streaming.password

パスワードです。

aptpod1234

nats-streaming.cluster-id

クラスタIDです。

intdash

jet-stream.url

jet-streamのURLを指定します。

nats://nats:4222

jet-stream.username

ユーザー名です。

intdash

jet-stream.password

パスワードです。

aptpod1234

jet-stream.max-delivery-count

サブスクライバーの最大配信数です。

3

jet-stream.max-pings-outstanding

Pingの最大未処理数です。

3

jet-stream.ping-interval

Pingの間隔です。

5s

jet-stream.max-reconnects

再接続回数です。

1800

jet-stream.reconnect-wait

再接続間隔です。

2s

event.driver

イベントバスのドライバーです。(nats-streaming/jet-stream)

nats-streaming

event.driver-only-subscribe

サブスクライブ専用のイベントバスのドライバーです。(nats-streaming/jet-stream)

event.subscriber.redelivery-allowed-max-count

Measurement Serviceからの1つのメッセージを再処理する最大回数です。

10

job.creator.reconvert-threshold

finished ステータスではない計測に対する再変換実行までのインターバルです。

6h

job.worker.max-work-time

1つのjobを処理する際のタイムアウトです。

1h

job.worker.max-concurrent

jobを処理するgoroutineの最大数です。

3

job.worker.converter-parallel-number

ffmpegコマンドが使用するCPUのコア数です。

0

[media-filmed]
  # ffmpegへのパスです。
  ffmpeg = 'ffmpeg'
  # ffmpegのログレベルです。 https://ffmpeg.org/ffmpeg.html
  ffmpeg-log-level = 'debug'
  # libopenh264を使用して変換を行うときの`-threads` オプション(使用されるスレッド数)です。0を指定するとスレッド数は自動で設定されます。
  ffmpeg-threads = 0
  # 変換に失敗した場合に使用するダミー動画へのパスです。
  dummy-file-path = './dummy.ts'

  [media-filmed.storage]
    # ストレージのタイプです。 (`s3`, `local`)
    type = 'local'

    [media-filmed.storage.local]
      # ローカルストレージに保存する際の基準となるパスです。
      base-dir = './media-filmed/hls'

    [media-filmed.storage.s3]
      # バケット名です。
      bucket-name = 'intdash-media-service'
      # リージョンです。
      region = 'ap-northeast-1'
      # AWSアクセスキーです。
      aws-access-key = ''
      # AWSシークレットです。
      aws-secret-access-key = ''
      # S3のエンドポイントです。
      endpoint = ''
      # オブジェクトの指定にpath-styleのURLを使用します。 https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/interfaces/bucketendpointinputconfig.html#forcepathstyle
      s3-force-path-style = true

  [media-filmed.nats-streaming]
    # nats-streamingのURLを指定します
    url = 'nats://127.0.0.1:4222'
    # ユーザー名です。
    username = 'intdash'
    # パスワードです。
    password = 'aptpod1234'
    # クラスタIDです。
    cluster-id = 'intdash'

  [media-filmed.jet-stream]
    # jet-streamのURLを指定します。
    url = 'nats://nats:4222'
    # ユーザー名です。
    username = 'intdash'
    # パスワードです。
    password = 'aptpod1234'
    # サブスクライバーの最大配信数です。
    max-delivery-count = 3
    # Pingの最大未処理数です。
    max-pings-outstanding = 3
    # Pingの間隔です。
    ping-interval = '5s'
    # 再接続回数です。
    max-reconnects = 1800
    # 再接続間隔です。
    reconnect-wait = '2s'

  [media-filmed.event]
    # イベントバスのドライバーです。(nats-streaming/jet-stream)
    driver = 'nats-streaming'
    # サブスクライブ専用のイベントバスのドライバーです。(nats-streaming/jet-stream)
    driver-only-subscribe = ''

    [media-filmed.event.subscriber]
      # Measurement Serviceからの1つのメッセージを再処理する最大回数です。
      redelivery-allowed-max-count = 10

  [media-filmed.job]
    [media-filmed.job.creator]
      # `finished` ステータスではない計測に対する再変換実行までのインターバルです。
      reconvert-threshold = '6h'

    # HLS動画のdelete, update, finalizeといったjobを実行する非同期ワーカーの設定です。
    [media-filmed.job.worker]
      # 1つのjobを処理する際のタイムアウトです。
      max-work-time = '1h'
      # jobを処理するgoroutineの最大数です。
      max-concurrent = 3
      # ffmpegコマンドが使用するCPUのコア数です。
      converter-parallel-number = 0

3.2.5.2.8. logger

Property

Description

Default

level

ログレベルです。debugwarninfowarnerror から指定します。

info

encoding

ログの出力フォーマットです。 jsonconsole から指定します。

json

[logger]
  # ログレベルです。`debug`、`warn`、`info`、`warn`、`error` から指定します。
  level = 'info'
  # ログの出力フォーマットです。 `json`、`console` から指定します。
  encoding = 'json'

3.2.5.2.9. gops

Property

Description

Default

enable

gopsによるプロファイリングを有効にします。

false

address

gopsのプロファイリングのアドレスを指定します。

127.0.0.1:0

[gops]
  # gopsによるプロファイリングを有効にします。
  enable = false
  # gopsのプロファイリングのアドレスを指定します。
  address = '127.0.0.1:0'

3.2.5.2.10. rate-limit

Property

Description

Default

quota-set-type

レートリミットの設定を選択します(smallmediumlarge)。 large が最も多くのトラフィックを許可する設定です。

large

enable

レートリミットを有効にします。

false

store.driver

レートリミットの状態をキャッシュする際のドライバーとして inmem または redis のいずれかを指定します。

inmem

store.redis.network

Redisとの接続方法として tcp または unix (UNIXドメインソケット)を選択します。

tcp

store.redis.address

Redisのアドレスです。

127.0.0.1:6749

store.redis.password

Redisのパスワードです。

P@ssw0rd

store.redis.db

DB

0

store.inmem.max-keys

キャッシュ保存時のキーの最大数

65535

[rate-limit]
  # レートリミットの設定を選択します(`small`、`medium`、`large`)。 `large` が最も多くのトラフィックを許可する設定です。
  quota-set-type = 'large'
  # レートリミットを有効にします。
  enable = false

  [rate-limit.store]
    # レートリミットの状態をキャッシュする際のドライバーとして `inmem` または `redis` のいずれかを指定します。
    driver = 'inmem'

    [rate-limit.store.redis]
    # Redisとの接続方法として `tcp` または `unix` (UNIXドメインソケット)を選択します。
      network = 'tcp'
    # Redisのアドレスです。
      address = '127.0.0.1:6749'
    # Redisのパスワードです。
      password = 'P@ssw0rd'
    # DB
      db = 0

    # inmemを使用する場合の設定
    [rate-limit.store.inmem]
      # キャッシュ保存時のキーの最大数
      max-keys = 65535

3.2.5.2.11. health

Property

Description

Default

enable

ヘルスチェックサービスを有効にします。

true

bind-address

指定したホストとポートでヘルスチェックサーバーををリスンします。

0.0.0.0:9080

base-path

ヘルスチェックのベースとなるパスを指定します。

disable-aws

AWSへのヘルスチェックを無効にします。AWSのアカウントがビジネスプラン未満の場合、ヘルスチェックが実行不可なのでtrueにしてください。ref: https://docs.aws.amazon.com/health/latest/ug/health-api.html

false

disable-micro-services

依存するサービスへのヘルスチェックを無効にします。

false

http-health-urls.authentication-service

Authentication Serviceのヘルスチェックエンドポイントです。

http://auth:9080/status

http-health-urls.broker-service

Broker Serviceのヘルスチェックエンドポイントです。

http://broker:9080/status

http-health-urls.measurement-service

Measurement Serviceのヘルスチェックエンドポイントです。

http://measurement:9080/status

[health]
  # ヘルスチェックサービスを有効にします。
  enable = true
  # 指定したホストとポートでヘルスチェックサーバーををリスンします。
  bind-address = '0.0.0.0:9080'
  # ヘルスチェックのベースとなるパスを指定します。
  base-path = ''
  # AWSへのヘルスチェックを無効にします。
  # AWSのアカウントがビジネスプラン未満の場合、ヘルスチェックが実行不可なのでtrueにしてください。
  # ref: https://docs.aws.amazon.com/health/latest/ug/health-api.html
  disable-aws = false
  # 依存するサービスへのヘルスチェックを無効にします。
  disable-micro-services = false

  # 外部のHTTPサービスのヘルスチェックエンドポイントの設定です。
  [health.http-health-urls]
    # Authentication Serviceのヘルスチェックエンドポイントです。
    authentication-service = 'http://auth:9080/status'
    # Broker Serviceのヘルスチェックエンドポイントです。
    broker-service = 'http://broker:9080/status'
    # Measurement Serviceのヘルスチェックエンドポイントです。
    measurement-service = 'http://measurement:9080/status'

3.2.5.3. 補足

  • ローカルストレージとS3は同時には使用できません。使用するストレージをローカルストレージからS3に変更する場合、または逆方向に変更する場合は、既存のファイルも移動する必要があります。