초기 커밋: DefVideo 소스 등록

abcVideo 플레이어 소스 (client / server / shared / pythonsource / docs / .claude).
.gitignore 적용으로 node_modules·storage·samplevideo·미디어 등 대용량 일괄 제외.
103 files, ~964K.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-16 03:20:27 +00:00
commit 82662d417d
103 changed files with 17213 additions and 0 deletions

10
shared/package.json Normal file
View File

@@ -0,0 +1,10 @@
{
"name": "@abcvideo/shared",
"version": "1.0.0",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"scripts": {
"build": "tsc",
"dev": "tsc --watch"
}
}

1
shared/src/index.ts Normal file
View File

@@ -0,0 +1 @@
export * from './types';

75
shared/src/types.ts Normal file
View File

@@ -0,0 +1,75 @@
// Video source types
export type VideoSourceType = 'local' | 'server';
export type HlsConversionStatus = 'idle' | 'converting' | 'done' | 'error';
export interface VideoMeta {
videoId: string;
filename: string;
size: number;
duration: number;
fps: number;
width: number;
height: number;
codec: string;
hlsStatus: HlsConversionStatus;
createdAt: string;
}
// Annotation types
export type AnnotationType = 'subtitle' | 'memo';
export interface AnnotationPosition {
x: number; // 0-100 percentage
y: number; // 0-100 percentage
}
export interface AnnotationSize {
width: number; // 0-100 percentage
height: number; // 0-100 percentage
}
export interface AnnotationStyle {
fontSize?: number;
color?: string;
backgroundColor?: string;
}
export interface Annotation {
id: string;
videoId: string;
type: AnnotationType;
timeStart: number; // seconds (float)
timeEnd: number; // seconds (float)
text: string;
position: AnnotationPosition;
size: AnnotationSize;
style: AnnotationStyle;
createdAt: string;
updatedAt: string;
}
export type CreateAnnotationInput = Omit<Annotation, 'id' | 'createdAt' | 'updatedAt'>;
export type UpdateAnnotationInput = Partial<Omit<Annotation, 'id' | 'videoId' | 'createdAt'>>;
// API response types
export interface ApiResponse<T> {
data?: T;
error?: string;
}
export interface HlsProgressEvent {
videoId: string;
percent: number;
time: number;
status: HlsConversionStatus;
}
// Upload types
export interface UploadStatus {
uploadId: string;
filename: string;
size: number;
uploadedBytes: number;
status: 'uploading' | 'complete' | 'error';
}

14
shared/tsconfig.json Normal file
View File

@@ -0,0 +1,14 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "CommonJS",
"declaration": true,
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"include": ["src"],
"exclude": ["node_modules", "dist"]
}