Skip to content

مرجع کامل رابط برنامه‌نویسی (Public API Reference) ​

این سند راهنمای کامل انواع داده‌ها، ساختارها، توابع و گزینه‌های پیکربندی پکیج github.com/farshidrezaei/mosaic به زبان فارسی است.


۱. ایمپورت پکیج ​

go
import "github.com/farshidrezaei/mosaic"

۲. ساختارهای اصلی (Core Structs) ​

ساختار Job ​

go
type Job struct {
	Input           string          // آدرس فایل ورودی محلی یا URL راه دور (HTTP/HTTPS)
	OutputDir       string          // مسیر پوشه ذخیره‌سازی مانیفست‌ها و سگمنت‌ها
	Profile         Profile         // پروفایل ویدیو: ProfileVOD یا ProfileLive
	ProgressHandler ProgressHandler // تابع کالبک دریافت پیشرفت بلادرنگ
}

ساختار ProgressInfo ​

go
type ProgressInfo struct {
	CurrentTime string  // زمان سپری شده (مثال: "00:01:23.456000")
	Bitrate     string  // بیت‌ریت لحظه‌ای انکود (مثال: "2450.3kbits/s")
	Speed       string  // ضریب سرعت انکودینگ (مثال: "2.15x")
	Percentage  float64 // درصد دقیق پیشرفت از 0.0 تا 100.0
}

نوع داده کدک‌های ویدیویی (VideoCodec) ​

go
type VideoCodec = config.VideoCodec

const (
	CodecH264 VideoCodec = "h264" // کدک استاندارد H.264 / AVC
	CodecHEVC VideoCodec = "hevc" // کدک با راندمان بالا H.265 / HEVC
	CodecAV1  VideoCodec = "av1"  // کدک باز و نسل جدید AV1
)

ساختار تنظیمات تامبنیل (ThumbnailConfig) ​

go
type ThumbnailConfig struct {
	SpriteFilename  string // الگوی نام فایل اسپرایت (پیش‌فرض: "thumbnails_%d.jpg")
	VTTFilename     string // نام فایل راهنمای WebVTT (پیش‌فرض: "thumbnails.vtt")
	IntervalSeconds int    // فاصله زمانی ثبت تامبنیل‌ها به ثانیه (پیش‌فرض: ۲)
	TileWidth       int    // عرض هر فریم تامبنیل به پیکسل (پیش‌فرض: ۱۶۰)
	TileHeight      int    // ارتفاع هر فریم تامبنیل به پیکسل (پیش‌فرض: ۹۰)
	Columns         int    // تعداد ستون‌های شبکه اسپرایت (پیش‌فرض: ۵)
	Rows            int    // تعداد سطرهای شبکه اسپرایت (پیش‌فرض: ۵)
	Quality         int    // کیفیت تصویر JPEG از ۱ تا ۳۱ (پیش‌فرض: ۳)
}

ساختار واترمارک و موقعیت‌ها (WatermarkConfig) ​

go
type WatermarkConfig struct {
	Path     string            // مسیر تصویر لوگو (PNG یا WebP)
	Position WatermarkPosition // موقعیت قرارگیری روی فریم
	OffsetX  int               // فاصله افقی از لبه تصویر به پیکسل (پیش‌فرض: ۲۰)
	OffsetY  int               // فاصله عمودی از لبه تصویر به پیکسل (پیش‌فرض: ۲۰)
	Opacity  float64           // میزان شفافیت آلفا از 0.0 تا 1.0 (پیش‌فرض: 1.0)
}

const (
	PositionTopRight    WatermarkPosition = "top-right"    // بالا-راست
	PositionTopLeft     WatermarkPosition = "top-left"     // بالا-چپ
	PositionBottomRight WatermarkPosition = "bottom-right" // پایین-راست
	PositionBottomLeft  WatermarkPosition = "bottom-left"  // پایین-چپ
	PositionCenter      WatermarkPosition = "center"       // وسط تصویر
)

ساختار تراک زیرنویس (SubtitleTrack) ​

go
type SubtitleTrack struct {
	Path     string // مسیر فایل زیرنویس (.srt یا .vtt)
	Language string // کد زبان استاندارد ایزو (مثال: "fa", "en")
	Label    string // عنوان نمایشی در پلیر (مثال: "فارسی", "English")
	Default  bool   // آیا این تراک به صورت پیش‌فرض فعال باشد
	Forced   bool   // آیا این زیرنویس از نوع اجباری (Forced) است
}

ساختار رمزنگاری HLS (EncryptionConfig) ​

go
type EncryptionConfig struct {
	KeyURI string // آدرس URI کلید در پلی‌لیست HLS (پیش‌فرض: "enc.key")
	IV     string // بردار اولیه هگزادسیمال اختیاری ۳۲ کاراکتری
	Key    []byte // کلید ۱۶ بایتی امن AES (در صورت nil بودن خودکار تولید می‌شود)
}

ساختار اتصال ابری S3 (S3Config) ​

go
type S3Config struct {
	Endpoint        string // آدرس سرور S3 یا MinIO یا R2
	Bucket          string // نام باکت مقصد
	Region          string // ریجن AWS (پیش‌فرض: "us-east-1")
	AccessKey       string // شناسه دسترسی Access Key
	SecretKey       string // کلید امنیتی Secret Key
	KeyPrefix       string // پیشوند مسیر کلید اشیاء (مثال: "vod/streams/movie1")
	ConcurrentFiles int    // تعداد ورکر‌های آپلود همزمان (پیش‌فرض: ۵)
	UseSSL          bool   // استفاده از پروتکل امن HTTPS (پیش‌فرض: true)
}

۳. توابع اصلی پکیجینگ ​

تابع EncodeHls ​

go
func EncodeHls(ctx context.Context, job Job, opts ...Option) (*executor.Usage, error)

ویدیو را به استریم چندکیفیته HLS به همراه مانیفست اصلی master.m3u8 و سگمنت‌های فریم‌بندی‌شده fMP4 یا TS تبدیل می‌کند.

تابع EncodeDash ​

go
func EncodeDash(ctx context.Context, job Job, opts ...Option) (*executor.Usage, error)

ویدیو را به استریم چندکیفیته MPEG-DASH بر اساس ساختار CMAF به همراه فایل مانیفست manifest.mpd تبدیل می‌کند.


۴. جدول گزینه‌های پیکربندی (Functional Options) ​

گزینه پیکربندیعملکرد و کاربرد
mosaic.WithCodec(codec)تعیین فرمت فشرده‌سازی ویدیو (CodecH264, CodecHEVC, CodecAV1).
mosaic.WithHEVC()میانبر فعال‌سازی کدک H.265 / HEVC.
mosaic.WithAV1()میانبر فعال‌سازی کدک نسل جدید AV1.
mosaic.WithCRF(crf)فعال‌سازی بهینه‌سازی Capped-CRF (کیفیت ثابت با سقف بیت‌ریت).
mosaic.WithThumbnails(cfg...)تولید اسپرایت تامبنیل و فایل نشانه‌گذاری زمانی thumbnails.vtt.
mosaic.WithSubtitles(tracks...)تبدیل خودکار SRT به WebVTT و تزریق به پلی‌لیست‌های HLS و DASH.
mosaic.WithNormalizeAudio()یکسان‌سازی خودکار بلندی صدا با استاندارد برودکست EBU R128 (loudnorm).
mosaic.WithWatermark(cfg)درج لوگو/واترمارک داینامیک با موقعیت‌دهی و شفافیت اختصاصی.
mosaic.WithAES128Encryption(cfg...)رمزنگاری امن سگمنت‌های HLS با کلید ۱۶ بایتی AES-128.
mosaic.WithS3Upload(cfg)آپلود مستقیم و همزمان خروجی به فضای ابری S3 / MinIO / Cloudflare R2.
mosaic.WithIFrames()تولید پلی‌لیست‌های تریک‌پلی فریم‌های I (#EXT-X-I-FRAMES-ONLY).
mosaic.WithNormalizeOrientation()بازرسی چرخش و تصحیح فیزیکی ویدیوهای ضبط‌شده با موبایل.
mosaic.WithThreads(n)تعیین تعداد ریسمان‌های پردازنده برای انکودینگ FFmpeg.
mosaic.WithBFrames(n)تنظیم تعداد فریم‌های B متوالی برای رندیشن‌ها.
mosaic.WithScaleBitrateWithFPS()افزایش هوشمند سقف بیت‌ریت برای ویدیوهای با نرخ فریم بالا (>30 FPS).
mosaic.WithNVENC()استفاده از شتاب‌دهنده سخت‌افزاری کارت‌های گرافیک NVIDIA.
mosaic.WithVAAPI()استفاده از شتاب‌دهنده سخت‌افزاری Intel و AMD.
mosaic.WithVideoToolbox()استفاده از شتاب‌دهنده سخت‌افزاری اپل در سیستم‌عامل macOS.

منتشر شده تحت لایسنس MIT.