# レガシー録画 API

*バージョン 2025.2.0 で削除。*

> **注意**
>
> レガシー録画機能 API は 2025 年 12 月リリースの Sora にて廃止しました。
> 今後は [録画機能 (セッション単位) API](API_RECORDING.html) をご利用ください。

> **重要**
>
> レガシー録画機能と録画機能 (セッション単位) はチャネル単位で異なる仕組みを同時に利用できます。
> 例えば、channel_id a ではレガシー録画機能、channel_id b では録画機能（セッション単位）のように利用することができます。

録画されたファイルは `sora.conf` の [archive_dir](SORA_CONF.html#ad2156) に指定したディレクトリに置かれます。


## StartRecording

**x-sora-target**: Sora_20161101.StartRecording

指定したチャネルの録画を開始します。

クラスター機能利用時には、クラスター内のどのノードで実行しても開始された録画情報はすべてのノードで共有されます。

* - キー
  - 型
* - channel_id
  - string
* - expire_time
  - integer
* - split_duration (オプション)
  - integer
* - split_only (オプション)
  - boolean
* - metadata (オプション)
  - JSONValue

- `expire_time` の範囲は `0` から `86400` までで、秒数を指定してください。- `expire_time` を `0` に指定した場合、録画の期限が無くなります
  - 指定できる最大値はデフォルトで `86400` で [recording_max_expire_time](SORA_CONF.html#f3ff8d) に指定した値で変わります
- `split_only` は `true` か `false` を指定してください。指定しない場合は `false` が指定されます
- `split_only` を `true` に指定する場合は `expire_time` は `0` を指定する必要があります
- `split_only` を `true` に指定する場合は `split_duration` を指定する必要があります
- `split_duration` を指定する範囲は `1` から `86400` までで、秒数を指定してください- 指定できる最大値はデフォルトで `86400` で、 [recording_max_split_duration](SORA_CONF.html#927da9) に指定した値で変わります
- この `metadata` は `recording.report` ウェブフックやレポートファイルに含まれるようになります。

### expire_time が 0

```console
$ curl -sS \
    -X POST \
    http://127.0.0.1:3000/ \
    -H "x-sora-target: Sora_20161101.StartRecording" \
    --json '{"channel_id":"sora","expire_time":0}' \
    | jq .
{
    "channel_id": "sora",
    "expire_time": 0,
    "recording_id": "C0YTCRZM715BKATBXWFPKTYGRM"
}
```

### expire_time が 3600

```console
$ curl -sS \
    -X POST \
    http://127.0.0.1:3000/ \
    -H "x-sora-target: Sora_20161101.StartRecording" \
    --json '{"channel_id":"sora","expire_time":3600}' \
    | jq .
{
    "channel_id": "sora",
    "expire_time": 3600,
    "recording_id": "C0YTCRZM715BKATBXWFPKTYGRM"
}
```

### split_only が true

```console
$ curl -sS \
    -X POST \
    http://127.0.0.1:3000/ \
    -H "x-sora-target: Sora_20161101.StartRecording" \
    --json '{"channel_id":"sora","expire_time":0,"split_duration":3600,"split_only":true}' \
    | jq .
{
    "channel_id": "sora",
    "expire_time": 0,
    "recording_id": "MK4J54QBGS4ES0MCSZMF6C9M9M",
    "split_duration": 3600,
    "split_only": true
}
```

### エラー

- "STARTED-RECORDING"- 指定したチャネル ID で、すでに録画が開始している
  ```console
  $ curl -sS \
      -X POST \
      http://127.0.0.1:3000/ \
      -H "x-sora-target: Sora_20161101.StartRecording" \
      --json '{"channel_id":"sora","expire_time":3600}' \
      | jq .
  {
      "error_type": "STARTED-RECORDING"
  }
  ```
- "NOT-CLUSTER-MAJORITY"- クラスターで過半数以下のグループに所属している


## StopRecording

**x-sora-target**: Sora_20161101.StopRecording

指定したチャネルの録画を停止します。

この API は非同期です。200 が返ってきた場合でも録画ファイルや録画メタデータファイルが生成されていることを保証しません。
イベントウェブフックの [archive.available](EVENT_WEBHOOK.html#de9132) または event-webhook-recording.report の通知を利用してください。

* - キー
  - 型
* - channel_id
  - string

```console
$ curl -sS \
    -X POST \
    http://127.0.0.1:3000/ \
    -H "x-sora-target: Sora_20161101.StopRecording" \
    --json '{"channel_id":"sora"}' \
    | jq .
{
    "channel_id": "sora"
}
```

### エラー

- "NOT-STARTED-RECORDING"- 指定したチャネルの録画が開始されていない
- "NOT-CLUSTER-MAJORITY"- クラスターで過半数以下のグループに所属している


## GetStartedRecording

**x-sora-target**: Sora_20161101.GetStartedRecording

録画が有効かどうかを確認します。

* - キー
  - 型
* - channel_id
  - string

```console
$ curl -sS \
    -X POST \
    http://127.0.0.1:3000/ \
    -H "x-sora-target: Sora_20161101.GetStartedRecording" \
    --json '{"channel_id":"sora"}' \
    | jq .
{
    "channel_id": "sora",
    "expire_time": 3600,
    "expired_at": 1479563964,
    "created_at": 1479560364
}
```

### エラー

- "NOT-STARTED-RECORDING"- 指定したチャネルの録画が開始されていない
  ```console
  $ curl -sS \
      -X POST \
      http://127.0.0.1:3000/ \
      -H "x-sora-target: Sora_20161101.GetStartedRecording" \
      --json '{"channel_id":"sora"}' \
      | jq .
  {
      "error_type": "NOT-STARTED-RECORDING"
  }
  ```
- "NOT-CLUSTER-MAJORITY"- クラスターで過半数以下のグループに所属している


## ListStartedRecording

**x-sora-target**: Sora_20161101.ListStartedRecording

録画が行われているチャネル一覧を取得します。

クラスター機能利用時には、クラスター内のどのノードで実行しても、クラスター内で有効な録画の一覧を取得できます。

```console
$ curl -sS \
    -X POST \
    http://127.0.0.1:3000/ \
    -H "x-sora-target: Sora_20161101.ListStartedRecording" \
    | jq .
[
    {
        "channel_id": "sora",
        "created_at": 1638234656,
        "expire_time": 3600,
        "expired_at": 1638238256,
        "recording_id": "WWZ61PT4GS03F80F39MCPVSEQR",
        "split_only": false
    },
    {
        "channel_id": "zakuro",
        "created_at": 1638234654,
        "expire_time": 3600,
        "expired_at": 1638238254,
        "recording_id": "Z60BJP5YDN4PD0D7RGM4TFEE48",
        "split_only": false
    }
]
```

### エラー

- "NOT-CLUSTER-MAJORITY"- クラスターで過半数以下のグループに所属している


## ListArchiving

**x-sora-target**: Sora_20161101.ListArchiving

現在録画中の状態を取得します。

> **注釈**
>
> クラスター機能利用時であっても、API を実行したノードで録画中の状態のみを取得します。
> クラスター内で録画中のすべてを取得したい場合はすべてのノードに ListArchiving API を実行する必要があります。

```console
$ curl -sS \
    -X POST \
    http://127.0.0.1:3000/ \
    -H "x-sora-target: Sora_20161101.ListArchiving" \
    | jq .
[
    {
        "audio": {
            "codec_type": "OPUS"
        },
        "channel_id": "sora",
        "client_id": "C0YTCRZM715BKATBXWFPKTYGRM",
        "bundle_id": "C0YTCRZM715BKATBXWFPKTYGRM",
        "connection_id": "C0YTCRZM715BKATBXWFPKTYGRM",
        "seconds": 146,
        "video": {
            "bit_rate": 1000,
            "codec_type": "VP9",
            "vp9_params": { "profile_id": 0 }
        }
    }
]
```

- seconds は録画を開始してからの経過時間(秒)です
- video が設定されていない場合は `"video": false` という値が入ってきます
- audio が設定されていない場合は `"audio": false` という値が入ってきます
