본문으로 건너뛰기

워터마킹

워터마킹이란?

워터마킹(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_kindstring-워터마크 표시 텍스트
  • "client_user_id" 입력 시 cuid가 출력되고, 일반 문자열 입력 시 해당 텍스트가 그대로 출력됩니다.
font_sizeinteger7워터마크 텍스트 크기 (px)
font_colorstring"FFFFFF"워터마크 색상 (HEX)
alphainteger200워터마크 투명도 (0~255)
show_timeinteger1워터마크 노출 지속 시간 (초)
hide_timeinteger60워터마크 숨김 지속 시간 (초)
show_pausedbooleanfalse일시정지 상태에서 워터마크 노출 여부
enable_html5_playerbooleanfalseKollus Web Player 사용 여부
  • false 설정 시 App Player for Windows로 재생됩니다.
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)되더라도 삽입된 정보를 정밀 분석하여 최초 유출자를 식별할 수 있습니다.
  • 주요 대상: 프리미엄 유료 강의, 기업 내부 교육 자료 등 최고 수준의 저작권 보호가 필요한 경우 권장합니다.