채택완료

그누보드 게시판에서 동영상 자막 활성화 방법

그누보드 5.4.2.5를 사용중입니다.
게시판에서 video 태그를 이용해, 동영상 재생에는 문제가 없습니다.
궁금한 점은 track 태그를 이용해, 동영상에 자막을 활성화 하는 방법입니다.
track 태그를 정상적으로 입력해도, 자막이 나오지 않습니다.
|

답변 2개

채택된 답변
+20 포인트
소스가 어떻게 구현되어잇는지 몰르겟으나 아래 참고해보시기 바랍니다.
먼저 https://도메인.com/data/file/board1/video.vtt 이런식으로 자막이 있는 영상인지  확인부터해보시기바랍니다.
그리고 내장영상이라면  ffmpeg -i video.mp4 이렇게 파일위치에서 터미널에서 실행해보시기 바랍니다.
만약  Stream #0:2: Subtitle: mov_text  이런식으로 나오면  자막이포함된영상 이라고생각하시면됩니다. 
이럴경우에는 자막을 .srt 그리고다시 vtt변환작업을하셔야합니다.
결론은 한마디로 영상과 자막파일을 같이 업로드 되어 있어야 한다라는 뜻이며 없으면 자막파일을 만들어야 한다라는 뜻입니다.
다음은 되어있을때 예제이니 참고하시기 바랍니다.
<video width="640" controls>
    <source src="/data/file/board1/video.mp4" type="video/mp4">
    <track 
        src="/data/file/board1/video.vtt"
        kind="subtitles"
        srclang="ko"
        label="한국어"
        default>
</video>
추측컨대, 그누보드의 보안 필터(`html_purifier`)가 `<track>` 태그를 걸러내고 있는 상황으로 보입니다. 그누보드 5.4는 사용자 입력값을 필터링할 때 `HTML Purifier`라는 라이브러리를 사용하는데, 이 라이브러리가 기본적으로 `<track>` 같은 비교적 최신의 HTML5 태그는 허용 목록에 포함시키지 않아서 발생하는 문제입니다.

---

### 🛠️ 해결 방법: \’html_purifier\’에 `<track>` 태그 허용하기

`/lib/common.lib.php` 파일에 있는 `html_purifier` 함수를 수정하여 `<track>` 태그를 허용 목록에 추가해야 합니다.

**방법 1: 직접 수정 (권장)**

1. FTP나 서버 파일 관리자로 접속해 `/lib/common.lib.php` 파일을 엽니다.
2. `function html_purifier($html){ ... }` 함수 내부를 찾습니다.
3. `$purifier = new HTMLPurifier($config);` 구문 바로 **위**에 다음 코드를 추가합니다.
    ```php
    // HTML5 태그인 video, track 등을 허용 목록에 추가
    $config->set('HTML.DefinitionID', 'html5-definitions');
    $config->set('HTML.DefinitionRev', 1);
    if ($def = $config->maybeGetRawHTMLDefinition()) {
        // 기존에 video 태그가 이미 정의되어 있을 수 있으니, 없을 경우에만 추가
        if (!$def->info['video']) {
            $def->addElement('video', 'Block', 'Optional: (source, Flow) | (Flow, source) | Flow', 'Common', array(
                'src' => 'URI',
                'type' => 'Text',
                'width' => 'Length',
                'height' => 'Length',
                'poster' => 'URI',
                'preload' => 'Enum#auto,metadata,none',
                'controls' => 'Bool',
            ));
        }
        // track 태그 정의 추가
        $def->addElement('track', 'Inline', 'Optional: (source, Flow) | (Flow, source) | Flow', 'Common', array(
            'src' => 'URI',
            'kind' => 'Text', // 'subtitles', 'captions' 등
            'srclang' => 'Text', // 언어 코드 (예: 'ko')
            'label' => 'Text', // 자막 이름 (예: 'Korean')
            'default' => 'Bool', // 기본 활성화 여부
        ));
    }
    ```

**방법 2: Hook 파일 사용**

코어 파일을 직접 수정하는 게 부담스럽다면, `hook` 기능을 이용할 수 있습니다.

1. 그누보드 루트에 `/hook` 디렉토리가 없다면 생성합니다.
2. `/hook` 디렉토리 안에 `html_purifier.config.sample.php` 파일을 만들고, 아래 코드를 붙여넣습니다.
    ```php
    <?php
    if (!defined('_GNUBOARD_')) exit;

    add_event('html_purifier_config', function($config) {
        $add_html_tag = $config->getHTMLDefinition(true);
        // track 태그 정의 추가
        $add_html_tag->addElement('track', 'Block', 'Flow', 'Common', [
            'src' => 'Text',
            'kind' => 'Text',
            'srclang' => 'Text',
            'label' => 'Text',
            'default' => 'Bool'
        ]);
    }, 1, 1);
    ```
3. 파일명을 `html_purifier.config.php`로 변경합니다.

---

### 🔍 추가 확인 사항

1. **textarea 이스케이프 문제**: 글을 작성할 때 `<textarea>` 내부에 HTML을 직접 입력하면, 브라우저가 `<`와 같은 문자를 `<` 같은 **HTML 엔티티로 변환**할 수 있습니다. 이 경우 `video`와 `track` 태그가 순수한 HTML로 인식되지 않습니다. 게시글 본문을 HTML 모드(소스 보기)로 확인하여 코드가 정상적인 태그로 출력되는지 꼭 체크하세요.

2. **브라우저 자체 문제**: `<track>` 태그가 제대로 작동하려면 **웹 서버**(Apache, Nginx)와 **웹 브라우저**(크롬, 엣지 등) 간의 통신 규약인 CORS 정책과 MIME 타입 설정이 올바르게 되어 있어야 합니다. 크롬 브라우저의 `개발자 도구(F12)` -> `Console`(콘솔) 탭에서 에러 메시지를 확인해보세요. 대표적인 에러는 다음과 같습니다.
    * **404 (Not Found)**: VTT 파일 경로가 잘못되었거나, 해당 위치에 파일이 존재하지 않습니다.
    * **CORS 정책 문제**: `No 'Access-Control-Allow-Origin' header is present on the requested resource.`라는 에러가 발생하면, 웹 서버 설정을 변경해야 합니다.
    * **MIME 타입 문제**: `Resource interpreted as TextTrack but transferred with MIME type text/plain` 같은 경고가 보인다면, 웹 서버가 VTT 파일의 MIME 타입을 `text/vtt`로 보내지 않을 때 발생합니다. `.htaccess` 파일이나 서버 설정에 `AddType text/vtt .vtt`를 추가하여 해결할 수 있습니다.

3. **표준 HTML 준수 여부**: `<video>` 태그 안에 `<track>` 태그가 올바르게 포함되어 있는지 확인하세요. 속성 중 `kind="subtitles"` 속성은 자막임을 명시하고, `srclang="ko"`은 언어를 나타내며 반드시 포함해야 합니다. 또한, `.vtt` 파일은 표준 형식을 지켜야 하며 반드시 **UTF-8 (BOM 없음)** 형식으로 저장되어야 합니다.

4. **대체 방법 고려**: HTML5 기본 `<track>` 태그 대신, JavaScript 기반의 **plyr.io** 또는 **video.js** 같은 동영상 플레이어 라이브러리를 사용하는 방법도 있습니다. 이런 라이브러리들은 더 다양한 자막 형식(SRT 등)을 지원하고, 더 풍부한 기능을 제공합니다.

---

 

답변을 작성하려면 로그인이 필요합니다.