워터마킹
워터마킹이란?
워터마킹(Watermarking)은 오디오, 이미지, 영상 등 멀티미디어 콘텐츠에 소유권 정보를 삽입하는 기술입니다.
콘텐츠에 저작권자 또는 배포 경로 등의 정보를 숨겨 삽입함으로써, 저작권 보호는 물론 불법 복제나 유출된 콘텐츠의 추적에 활용됩니다.
ℹ️ 참고
- 워터마킹 기능은 기본적으로 비활성화되어 있습니다.
해당 기능을 활성화하려면 Kollus 영업 담당자(AM, biz@catenoid.net) 또는 기술 지원팀(PE, tech_support@catenoid.net)으로 문의해 주세요. - JavaScript Injection 공격 등을 통한 워터마크 훼손을 방지하는 기능은 기본으로 활성화되어 있습니다.
- 워터마킹은 JWT(JSON Web Token) 페이로드에 워터마킹 정책을 포함하는 방식으로 구현합니다.
Kollus 비디오 워터마크
Kollus 비디오 워터마크는 콘텐츠 화면에 소유자 또는 사용자 정보를 텍스트 오버레이 방식으로 삽입하는 기능입니다.
설정 가능한 항목은 다음과 같습니다.
- 식별 정보 수정(예: 사용자 ID, 이메일, 소유자 정보 등)
- 크기, 색상, 투명도, 노출 주기 설정
단, 워터마크의 위치는 콘텐츠 재생 중 무작위로 변경됩니다.
워터마크 삽입 방법
Kollus 비디오 워터마크는 JWT(JSON Web Token) 페이로드에 워터마킹 정책을 포함하는 방식으로 삽입합니다.
ℹ️참고
JWT에 대한 자세한 설명은 콘텐츠 접근 제어(JWT) 문서를 참고하세요.
워터마킹 정책이 포함된 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}"
}
]
}
video_watermarking_code_policy의 각 항목에 대한 설명은 아래 표를 참고하세요.
| 항목 | 타입 | 기본값 | 설명 |
|---|---|---|---|
code_kind | string | - | "client_user_id" 입력 시 cuid가 표시되며, 그 외의 값은 텍스트 그대로 출력됩니다. |
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 | Web Player 사용 여부false이면 전용 플레이어로 재생됩니다. |
전체 코드 예시
<?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 포렌식 워터마크
포렌식 워터마크는 사람의 눈에는 보이지 않는 식별 정보를 콘텐츠에 은닉 삽입하는 보안 기술입니다.
영상의 각 프레임에 사용자 ID, 미디어 콘텐츠 키 등 고유 정보를 암호화하여 삽입합니다.
이 방식은 다음과 같은 장점을 제공합니다.
- 콘텐츠가 불법으로 유출되거나 배포된 경우, 최초 유포자를 식별할 수 있습니다.
- 유출된 콘텐츠가 발견되면, 식별된 정보를 기반으로 유포 경로를 추적할 수 있습니다.
- 유료 강의, 기업 교육 자료 등 보안 민감도가 높은 콘텐츠에 적합합니다.