# Recording Delivery

OvenMediaEngine을 사용하여 라이브 스트림을 녹화하고 녹화된 파일을 Object Storage로 전송하는 방법을 설명합니다.

* OvenMediaEngine 및 OvenMediaEngine Delivery를 설정하여 녹화 파일 전송을 활성화 합니다.
* OvenMediaEngine의 자동 녹화 기능을 이용하거나, 녹화 RestAPI를 이용해 녹화 전송을 시작합니다.
* 녹화 전송 상태를 모니터링 합니다.

## 1단계: OvenMediaEngine에서 녹화 기능 설정

OvenMediaEngine의 File Publisher 기능을 활성화하여 스트림 녹화 기능을 사용합니다.

#### **설정 파일 경로:**

* `/usr/share/ovenmediaengine/conf/Server.xml`에서 File Publisher를 활성화할 수 있습니다.

### 자동 녹화 설정 <a href="#id-1-1" id="id-1-1"></a>

스트림 송출이 시작되면 자동으로 녹화 및 전송을 시작할 수 있게 설정합니다.

#### **`Server.xml` 예시:**

```xml
<Applications>
  <Application>
    <Name>app</Name>
    ...
    <Publishers>
      <FILE>
        <RootPath>/usr/share/ovenmediaengine/records</RootPath>
        <StreamMap>
          <Enable>true</Enable>
          <Path>./record_map.xml</Path>
        </StreamMap>
      </FILE>
    </Publishers>
    ...
</Applications>
```

OvenMediaEngine이 자동으로 녹화 및 전송 작업을 수행할 수 있게 하기 위해 `FILE.StreamMap.Path`에 녹화 형식과Object Storage 정보를정의한 파일을 지정합니다.

#### **Server.xml에 지정한대로 record\_map.xml 파일을 생성:**

* `/usr/share/ovenmediaengine/conf/record_map.xml`

#### **`record_map.xml` 예시:**

```xml
<RecordInfo>
  <Record>
    <Enable>true</Enable>
    <StreamName>stream</StreamName>
    <FilePath>${VirtualHost}/${Application}/${Stream}-${StartTime:YYYYMMDDhhmmss}_${EndTime:YYYYMMDDhhmmss}.mp4</FilePath>
    <InfoPath>${VirtualHost}/${Application}/${Stream}-${StartTime:YYYYMMDDhhmmss}_${EndTime:YYYYMMDDhhmmss}.xml</InfoPath>
    <Metadata>aws_access_key_id='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',aws_secret_access_key='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',endpoint='https://object.storage.com',region='us-east-1',bucket_name='bucket_name',object_dir='my/vod/path/',delete='true'</Metadata>
  </Record>
</RecordInfo>
```

`MetaData`에 `key='value',key='value',...` 형식으로 전송 정보를 설정합니다.

전송 정보 포맷:

```
aws_access_key_id='****',aws_secret_access_key='****',endpoint='https://object.storage.com',region='us-east-1',bucket_name='record-bucket',object_dir='/my/vod/path/',delete='true'
```

* `aws_access_key_id` (required): Object Storage에 접근 가능한 access key id를 지정합니다.
* `aws_secret_access_key` (required): Object Storage에 접근 가능한 secret access key를 지정합니다.
* `endpoint` (optional): Object Storage의 접속 endpoint를 지정합니다. 빈 값일 경우 AWS S3의 endpoint를 사용합니다.
* `region` (optional): Object Storage의 지역을 지정합니다. 빈 값일 경우 AWS S3의 기본 지역을 사용합니다.
* `bucket_name` (required): 녹화 파일을 전송 할 버킷명을 입력합니다.
* `object_dir` (required): Bucket 내 녹화 파일을 전송할 경로를 지정합니다. -delete (optional) 전송을 완료 후 Server.xml 의 File Publisher의 RootPath에 생성되었던 녹화 파일 삭제 여부를 true 또는 false로 지정합니다.
* `delete` (optional)  : 전송을 완료 후 Server.xml 의 File Publisher의 RootPath에 생성되었던 녹화 파일 삭제 여부를 true 또는 false로 지정합니다.

### Rest API를 이용한 녹화 설정 <a href="#id-1-2.-rest-api" id="id-1-2.-rest-api"></a>

OvenMediaEngine의 녹화 REST API를 이용해 송출 중인 스트림을 녹화 및 전송할 수 있게 설정합니다.

{% hint style="success" %}
녹화 형식 및 Object Storage 정보는 녹화 시작 REST API를 호출하면서 설정할 수 있습니다.
{% endhint %}

#### **`Server.xml` 예시:**

```xml
<Applications>
  <Application>
    <Name>app</Name>
    ...
    <Publishers>
      <FILE>
        <RootPath>/usr/share/ovenmediaengine/records</RootPath>
        <FilePath>${VirtualHost}/${Application}/${Stream}-${StartTime:YYYYMMDDhhmmss}_${EndTime:YYYYMMDDhhmmss}.ts</FilePath>
        <InfoPath>${VirtualHost}/${Application}/${Stream}-${StartTime:YYYYMMDDhhmmss}_${EndTime:YYYYMMDDhhmmss}.xml</InfoPath>
      </FILE>
    </Publishers>
    ...
</Applications>
```

{% hint style="info" %}
녹화 기능에 대한 상세한 내용은  <https://docs.ovenmediaengine.com/recording> 에서 확인할 수 있습니다.
{% endhint %}

## 2단계: 전송 서비스 설정 및 서비스 활성화 <a href="#id-2" id="id-2"></a>

### 전송 서비스 설정 <a href="#id-2-1" id="id-2-1"></a>

전송 서비스 설정에서 OvenMediaEngine이 녹화한 파일 경로를 설정합니다.

#### **전송 서비스 설정 파일 경로:**

* `/usr/share/ovenmediaengine/delivery/conf/config.ini`

설정 파일에서 `RECORD_INFO_FILE_BASE_DIR` 을 OvenMediaEngine의 File Publisher가 녹화 파일을 생성하는 경로로 설정합니다. (기본적으로 다른 설정은 변경할 필요가 없습니다.)

#### **`config.ini` 예시:**

```ini
[DELIVERY]
# database uri
DATABASE_URI = /usr/share/ovenmediaengine/delivery/delivery.db
# log file will saved
LOG_DIR = /var/log/ovenmediaengine/delivery/
# dump base directory
DUMP_INFO_FILE_BASE_DIR = 
# recording base directory
RECORD_INFO_FILE_BASE_DIR = /usr/share/ovenmediaengine/records
```

### 전송 서비스 활성화

전송 서비스는 기본적으로 비활성화 되어있습니다. 전송 서비스를 활성화 합니다.

```
sudo systemctl start ovenmediaengine-delivery
```

## 3단계: 녹화 및 전송 시작 <a href="#id-3" id="id-3"></a>

### 자동 녹화 기능을 이용할 경우 <a href="#id-3-1" id="id-3-1"></a>

`app/stream` 스트림을 송출 합니다. OvenMediaEngine이 자동으로 녹화를 시작하고 설정된 Object Storage로 녹화 파일을 전송합니다.

### 녹화 REST API를 이용할 경우 <a href="#id-3-2.-rest-api" id="id-3-2.-rest-api"></a>

`app/stream` 스트림을 송출 합니다. `app/stream`에 대해 녹화 시작 REST API를 호출하면 OvenMediaEngine이 녹화를 시작하고 녹화가 완료되면 전송 서비스가 Object Storage에 녹화 파일을 전송합니다.

#### **녹화 시작 API 호출 예시:**

```json
curl --location 'http://{OME_HOST}:{OME_REST_API_PORT}/v1/vhosts/default/apps/app:startRecord' \
--header 'Authorization: Basic {OME_API_CREDENTIAL}' \
--header 'Content-Type: application/json' \
--data '{
    "id": "unique_id",
    "stream": {
        "name": "stream"
    },
    "metadata": "aws_access_key_id='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',aws_secret_access_key='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',endpoint='https://object.storage.com',region='us-east-1',bucket_name='bucket_name',object_dir='my/vod/path/',delete='true'"
}'
```

{% hint style="info" %}
녹화 기능 REST API는 <https://docs.ovenmediaengine.com/rest-api/v1/virtualhost/application/recording>에서 확인할 수 있습니다.
{% endhint %}

### 전송 상태 확인 <a href="#id-3-3" id="id-3-3"></a>

전송 서비스 로그를 확인하여 녹화 파일의 전송 상태를 모니터링합니다.

```
tail -f /var/log/ovenmediaengine/delivery/delivery-daemon.log
```

***

이상으로 OvenMediaEngine을 사용하여 라이브 스트림 녹화 및 녹화된 파일을 Object Storage로 전송하는 방법을 마칩니다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ovenmediaengine-enterprise.gitbook.io/guide/ko-kr/features/operations-and-monitoring/recording-delivery.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
