워터마킹
워터마킹이란?
워터마킹(Watermarking)은 영상 콘텐츠 내부에 저작권자 정보나 시청자 식별 정보를 삽입하여 무단 복제를 방지하고 사후 추적을 가능하게 하는 핵심 보안 기술입니다. 단순히 소유권을 표시하는 용도를 넘어, 불법으로 녹화되거나 유출된 영상이 발견되었을 때 해당 영상에 심어진 고유 정보를 분석하여 최초 유출자의 계정 및 배포 경로를 역추적하는 강력한 증거로 활용됩니다.
ℹ️참고
- 기능 활성화: 워터마킹 기능은 기본적으로 비활성화되어 있습니다. 해당 기능을 활성화하려면 영업 담당자(AM, biz@catenoid.net) 또는 기술 지원팀(PE, tech_support@catenoid.net)으로 문의해 주세요.
- 위변조 방지: 외부 스크립트(JavaScript Injection)를 통한 워터마크 훼손 방지 기능이 기본 적용됩니다.
- 동적 구현: 모든 워터마크 설정은 JWT(JSON Web Token) 페이로드를 통해 정의됩니다. (참고: 콘텐츠 접근 제어 (JWT))
Kollus 비디오 워터마크
시청 중인 화면 위에 식별 정보(사용자 ID, 이메일 등)를 텍스트 형태로 노출하는 방식입니다.
- 무작위 위치 이동: 녹화 및 캡처를 통한 교묘한 편집을 방지하기 위해 워터마크의 위치가 재생 중 랜덤하게 변경됩니다.
- 유연한 커스터마이징: 서비스 성격에 맞춰 텍스트의 크기, 색상, 투명도, 노출 주기를 정밀하게 조정할 수 있습니다.
워터마크 정책 설정
Kollus 비디오 워터마크는 재생 URL을 생성하는 JWT 페이로드에 video_watermarking_code_policy 객체를 포함하여 제어합니다.
워터마킹 정책이 포함된 JWT 페이로드 예시
{
"cuid": "catenoid",
"video_watermarking_code_policy": {
"code_kind": "client_user_id",
"font_size": 7,
"font_color": "FFFFFF",
"show_time": 1,
"hide_time": 60,
"alpha": 200,
"show_paused": false,
"enable_html5_player": false,
},
"expt": 1703980800,
"mc": [
{
"mckey": "{MEDIA_CONTENT_KEY}"
}
]
}
| 항목 | 타입 | 기본값 | 설명 |
|---|---|---|---|
code_kind | string | - | 워터마크 표시 텍스트
|
font_size | integer | 7 | 워터마크 텍스트 크기 (px) |
font_color | string | "FFFFFF" | 워터마크 색상 (HEX) |
alpha | integer | 200 | 워터마크 투명도 (0~255) |
show_time | integer | 1 | 워터마크 노출 지속 시간 (초) |
hide_time | integer | 60 | 워터마크 숨김 지속 시간 (초) |
show_paused | boolean | false | 일시정지 상태에서 워터마크 노출 여부 |
enable_html5_player | boolean | false | Kollus Web Player 사용 여부
|
PHP 기반 구현 예시 코드
<?php
/**
* base64_urlencode
*
* @param string $str
* @return string
*/
function base64_urlencode($str) {
return rtrim(strtr(base64_encode($str), '+/', '-_'), '=');
}
/**
* jwt_encode
*
* @param array $payload
* @param string $key
* @return string
*/
function jwt_encode($payload, $key) {
$jwtHead = base64_urlencode(json_encode(array('typ' => 'JWT', 'alg' => 'HS256')));
$jsonPayload = base64_urlencode(json_encode($payload));
$signature = base64_urlencode(hash_hmac('SHA256', $jwtHead . '.' . $jsonPayload, $key, true));
return $jwtHead . '.' . $jsonPayload . '.' . $signature;
}
$securityKey = 'SECURITY_KEY';
$customKey = 'CUSTOME_KEY';
$mediaContentKey = 'MEDIA_CONTENT_KEY';
$clientUserId = 'CLIENT_USER_ID';
$expireTime = 7200; // 120 min
$mediaItems = array(
array(
'media_content_key' => $mediaContentKey,
),
);
$payload = array(
'mc' => array(),
'cuid' => $clientUserId,
'expt' => time() + $expireTime,
'video_watermarking_code_policy' =>
array(
'code_kind' => '2930451',
'font_size' => 20,
'font_color' => 'ffffff',
'show_time' => 10,
'hide_time' => 1,
'alpha' => 255,
'enable_html5_player' => true
),
);
foreach ($mediaItems as $mediaItem) {
$mcClaim = array();
$mcClaim['mckey'] = $mediaItem['media_content_key'];
$payload['mc'][] = $mcClaim;
}
$jwtToken = jwt_encode($payload, $securityKey);
$webTokenURL = 'http://v.kr.kollus.com/s?jwt=' . $jwtToken . '&custom_key=' . $customKey;
?>
<!DOCTYPE html>
<html lang="en">
<body>
<iframe width="840" height="472" src="<?php echo $webTokenURL; ?>" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>
</body>
</html>
워터마크 적용 예시 영상
아래 영상은 식별 정보(2930451)가 랜덤하게 이동하며 노출되는 실제 동작 예시입니다.
Kollus 포렌식 워터마크
포렌식 워터마크는 인간의 시각으로는 인지할 수 없는 미세한 식별 정보를 영상의 각 프레임에 암호화하여 은닉하는 최고 수준의 보안 기술입니다.
- 비가시성(Invisibility): 원본 영상의 품질을 전혀 훼손하지 않으면서 정보를 삽입하므로 시청 경험에 지장을 주지 않습니다.
- 강력한 추적 성능: 유출된 영상이 재인코딩되거나, 캠코더로 재촬영(Screen Recording)되더라도 삽입된 정보를 정밀 분석하여 최초 유출자를 식별할 수 있습니다.
- 주요 대상: 프리미엄 유료 강의, 기업 내부 교육 자료 등 최고 수준의 저작권 보호가 필요한 경우 권장합니다.