# Codecs

여러 개의 Hardware Device를 운용하는 사용자를 위해 다음과 같은 기능을 제공합니다.

1. 해당 Hardware Device에서 어떤 Codec/Module을 사용할 수 있는가?
2. 해당 Hardware Device에서 어떤 Encoder/Decode가 얼마큼 사용되고 있는가?
3. 해당 Hardware Device가 실제로 어느 정도 사용되고 있는가?

## Get Codecs 정보 (목록, 사용량)

OvenMediaEngine Enterprise가 설치된 각 Hardware Device 별로 사용 가능한 HW/SW Codec 정보와 사용량을 조회할 수 있습니다.

> **Request**

<details>

<summary><mark style="color:blue;">GET</mark> /v2/internals/codecs</summary>

**Header**

```http
Authorization: Basic {credentials}

# Authorization
    Credentials for HTTP Basic Authentication created with <AccessToken>
```

</details>

> **Response**

<details>

<summary><mark style="color:blue;">200</mark> Ok</summary>

The request has succeeded

**Header**

```
Content-Type: application/json
```

**Body**

```json
{
    "message": "OK",
    "response": [
        {
            "busId": "-",
            "displayName": "FFmpeg Video Codecs",
            "id": 0,
            "isDecoder": true,
            "isDefault": true,
            "isEncoder": false,
            "isHwAccel": false,
            "mediaType": "Video",
            "metrics": {
                "active": {
                    "decoder": 0,
                    "encoder": 0
                }
            },
            "module": "default",
            "name": "default:0",
            "supportedCodecs": [
                "H264",
                "H265",
                "VP8"
            ]
        },
        {
            "busId": "-",
            "displayName": "Open Source H.264 Codec",
            "id": 0,
            "isDecoder": false,
            "isDefault": true,
            "isEncoder": true,
            "isHwAccel": false,
            "mediaType": "Video",
            "metrics": {
                "active": {
                    "decoder": 0,
                    "encoder": 0
                }
            },
            "module": "openh264",
            "name": "openh264:0",
            "supportedCodecs": [
                "H264"
            ]
        },
        {
            "busId": "-",
            "displayName": "x264 H.264 Codec",
            "id": 0,
            "isDecoder": false,
            "isDefault": false,
            "isEncoder": true,
            "isHwAccel": false,
            "mediaType": "Video",
            "metrics": {
                "active": {
                    "decoder": 0,
                    "encoder": 0
                }
            },
            "module": "x264",
            "name": "x264:0",
            "supportedCodecs": [
                "H264"
            ]
        },
        {
            "busId": "-",
            "displayName": "WebM VP8/VP9 Codec SDK",
            "id": 0,
            "isDecoder": false,
            "isDefault": true,
            "isEncoder": true,
            "isHwAccel": false,
            "mediaType": "Video",
            "metrics": {
                "active": {
                    "decoder": 0,
                    "encoder": 0
                }
            },
            "module": "libvpx",
            "name": "libvpx:0",
            "supportedCodecs": [
                "VP8"
            ]
        },
        {
            "busId": "-",
            "displayName": "FFmpeg Audio Codecs",
            "id": 0,
            "isDecoder": true,
            "isDefault": true,
            "isEncoder": false,
            "isHwAccel": false,
            "mediaType": "Audio",
            "metrics": {
                "active": {
                    "decoder": 5,
                    "encoder": 0
                }
            },
            "module": "default",
            "name": "default:0",
            "supportedCodecs": [
                "AAC",
                "OPUS"
            ]
        },
        {
            "busId": "-",
            "displayName": "Fraunhofer FDK AAC",
            "id": 0,
            "isDecoder": false,
            "isDefault": true,
            "isEncoder": true,
            "isHwAccel": false,
            "mediaType": "Audio",
            "metrics": {
                "active": {
                    "decoder": 0,
                    "encoder": 0
                }
            },
            "module": "fdkaac",
            "name": "fdkaac:0",
            "supportedCodecs": [
                "AAC"
            ]
        },
        {
            "busId": "-",
            "displayName": "Opus Interactive Audio Codec",
            "id": 0,
            "isDecoder": false,
            "isDefault": true,
            "isEncoder": true,
            "isHwAccel": false,
            "mediaType": "Audio",
            "metrics": {
                "active": {
                    "decoder": 0,
                    "encoder": 5
                }
            },
            "module": "libopus",
            "name": "libopus:0",
            "supportedCodecs": [
                "OPUS"
            ]
        },
        {
            "busId": "-",
            "displayName": "FFmpeg Image Codec",
            "id": 0,
            "isDecoder": false,
            "isDefault": true,
            "isEncoder": true,
            "isHwAccel": false,
            "mediaType": "Video",
            "metrics": {
                "active": {
                    "decoder": 0,
                    "encoder": 0
                }
            },
            "module": "default",
            "name": "default:0",
            "supportedCodecs": [
                "JPEG",
                "PNG",
                "WEBP"
            ]
        },
        {
            "busId": "00000000:3B:00.0",
            "displayName": "NVIDIA GeForce GTX 1050",
            "id": 0,
            "isDecoder": true,
            "isDefault": false,
            "isEncoder": true,
            "isHwAccel": true,
            "mediaType": "Video",
            "metrics": {
                "active": {
                    "decoder": 0,
                    "encoder": 0
                }
            },
            "module": "nv",
            "name": "nv:0",
            "supportedCodecs": [
                "H264",
                "H265"
            ]
        },
        {
            "busId": "00000000:3B:00.0",
            "displayName": "NVIDIA GeForce GTX 1050",
            "id": 0,
            "isDecoder": false,
            "isDefault": false,
            "isEncoder": true,
            "isHwAccel": true,
            "mediaType": "Audio",
            "metrics": {
                "active": {
                    "decoder": 0,
                    "encoder": 0
                }
            },
            "module": "nv",
            "name": "nv:0",
            "supportedCodecs": [
                "WHISPER"
            ]
        },
        {
            "busId": "00000000:AF:00.0",
            "displayName": "NVIDIA RTX 4000 SFF Ada Generation",
            "id": 1,
            "isDecoder": true,
            "isDefault": false,
            "isEncoder": true,
            "isHwAccel": true,
            "mediaType": "Video",
            "metrics": {
                "active": {
                    "decoder": 0,
                    "encoder": 0
                }
            },
            "module": "nv",
            "name": "nv:1",
            "supportedCodecs": [
                "H264",
                "H265"
            ]
        },
        {
            "busId": "00000000:AF:00.0",
            "displayName": "NVIDIA RTX 4000 SFF Ada Generation",
            "id": 1,
            "isDecoder": false,
            "isDefault": false,
            "isEncoder": true,
            "isHwAccel": true,
            "mediaType": "Audio",
            "metrics": {
                "active": {
                    "decoder": 0,
                    "encoder": 0
                }
            },
            "module": "nv",
            "name": "nv:1",
            "supportedCodecs": [
                "WHISPER"
            ]
        },
        {
            "busId": "18:01.0",
            "displayName": "Xilinx Corporation Device 513d",
            "id": 0,
            "isDecoder": true,
            "isDefault": false,
            "isEncoder": true,
            "isHwAccel": true,
            "mediaType": "Video",
            "metrics": {
                "active": {
                    "decoder": 5,
                    "encoder": 4
                }
            },
            "module": "xma",
            "name": "xma:0",
            "supportedCodecs": [
                "H264",
                "H265"
            ]
        }
    ],
    "statusCode": 200
}
```

</details>

<table><thead><tr><th width="156">Element</th><th width="135">Value</th><th>Description</th></tr></thead><tbody><tr><td>busId</td><td>-</td><td>해당 Module 또는 Device가 가지고 있는 Unique ID입니다.</td></tr><tr><td>displayName</td><td>-</td><td>사람이 인지 가능한 해당 Module 또는 Device의 표기명입니다.</td></tr><tr><td>id</td><td>-</td><td>해당 Module 또는 Device에 지정된 ID입니다.</td></tr><tr><td>isDecoder</td><td>ture | false</td><td>해당 Module 또는 Device가 Decoder를 지원하는지 여부를 표시합니다.</td></tr><tr><td>isDefault</td><td>ture | false</td><td>해당 Module 또는 Device가 Default로 동작하는지 여부를 표시합니다.</td></tr><tr><td>isEncoder</td><td>ture | false</td><td>해당 Module 또는 Device가 Encoder를 지원하는지 여부를 표시합니다.</td></tr><tr><td>isHwAccel</td><td>ture | false</td><td>해당 Module 또는 Device가 Hardware-accelerated를 지원하는지 여부를 표시합니다.</td></tr><tr><td>metrics.active.decoder</td><td>-</td><td>해당 Module 또는 Device에서 사용되고 있는 Decoder 개수입니다.</td></tr><tr><td>metrics.active.encoder</td><td>-</td><td>해당 Module 또는 Device에서 사용되고 있는  Encoder 개수입니다.</td></tr><tr><td>module</td><td>-</td><td>Module Type을 표시합니다.</td></tr><tr><td>name</td><td>{module}:{#}</td><td>Module의 Name입니다.<br><mark style="color:yellow;">e.g., nv:0, nv:1, nv:2, ...</mark></td></tr><tr><td>supportedCodecs</td><td>-</td><td>해당 Module이 지원 가능한 Codec을 표시합니다.</td></tr></tbody></table>
