237 lines
5.5 KiB
Markdown
237 lines
5.5 KiB
Markdown
# API Библиотеки
|
||
|
||
Adaptive Video Converter можно использовать программно в ваших Node.js/TypeScript проектах.
|
||
|
||
## Установка
|
||
|
||
```bash
|
||
npm install @grom13/adaptive-video-converter
|
||
```
|
||
|
||
## Быстрый старт
|
||
|
||
```typescript
|
||
import { convertToDash } from '@grom13/adaptive-video-converter';
|
||
|
||
const result = await convertToDash({
|
||
inputPath: './video.mp4',
|
||
outputDir: './output'
|
||
});
|
||
|
||
console.log('Готово!', result.manifestPath);
|
||
```
|
||
|
||
## Основные экспорты
|
||
|
||
### Функции
|
||
|
||
- [`convertToDash()`](/api/convert) — Главная функция конвертации
|
||
- [Утилиты](/api/utilities) — Вспомогательные функции (checkFFmpeg, getVideoMetadata и др.)
|
||
- [Профили](/api/profiles) — Работа с профилями качества
|
||
|
||
### TypeScript типы
|
||
|
||
- [Типы](/api/types) — Все доступные типы и интерфейсы
|
||
|
||
## Структура API
|
||
|
||
```typescript
|
||
// Основная функция
|
||
export { convertToDash } from './core/converter';
|
||
|
||
// Утилиты
|
||
export {
|
||
checkFFmpeg,
|
||
checkMP4Box,
|
||
checkNvenc,
|
||
checkAV1Support,
|
||
getVideoMetadata,
|
||
selectAudioBitrate
|
||
} from './utils';
|
||
|
||
// Профили
|
||
export {
|
||
DEFAULT_PROFILES,
|
||
selectProfiles
|
||
} from './config/profiles';
|
||
|
||
// Типы
|
||
export type {
|
||
DashConvertOptions,
|
||
DashConvertResult,
|
||
VideoProfile,
|
||
ThumbnailConfig,
|
||
ConversionProgress,
|
||
VideoMetadata,
|
||
VideoOptimizations,
|
||
CodecType
|
||
} from './types';
|
||
```
|
||
|
||
## Примеры использования
|
||
|
||
### Базовая конвертация
|
||
|
||
```typescript
|
||
import { convertToDash } from '@grom13/adaptive-video-converter';
|
||
|
||
await convertToDash({
|
||
inputPath: './video.mp4',
|
||
outputDir: './output'
|
||
});
|
||
```
|
||
|
||
### С кастомными профилями
|
||
|
||
```typescript
|
||
await convertToDash({
|
||
inputPath: './video.mp4',
|
||
outputDir: './output',
|
||
customProfiles: ['720', '1080', '1440']
|
||
});
|
||
```
|
||
|
||
### С обработкой прогресса
|
||
|
||
```typescript
|
||
await convertToDash({
|
||
inputPath: './video.mp4',
|
||
outputDir: './output',
|
||
onProgress: (progress) => {
|
||
console.log(`${progress.percent}% - ${progress.stage}`);
|
||
console.log(`ETA: ${progress.eta}s`);
|
||
}
|
||
});
|
||
```
|
||
|
||
### Выбор кодека и формата
|
||
|
||
```typescript
|
||
await convertToDash({
|
||
inputPath: './video.mp4',
|
||
outputDir: './output',
|
||
codecType: 'dual', // 'h264' | 'av1' | 'dual'
|
||
format: 'both' // 'dash' | 'hls' | 'both'
|
||
});
|
||
```
|
||
|
||
### С проверкой системы
|
||
|
||
```typescript
|
||
import {
|
||
convertToDash,
|
||
checkFFmpeg,
|
||
checkNvenc
|
||
} from '@grom13/adaptive-video-converter';
|
||
|
||
// Проверка перед конвертацией
|
||
try {
|
||
await checkFFmpeg();
|
||
const hasNvenc = await checkNvenc();
|
||
|
||
console.log('NVENC:', hasNvenc ? 'доступен' : 'недоступен');
|
||
|
||
await convertToDash({
|
||
inputPath: './video.mp4',
|
||
outputDir: './output'
|
||
});
|
||
} catch (error) {
|
||
console.error('Ошибка:', error.message);
|
||
}
|
||
```
|
||
|
||
### С анализом исходного видео
|
||
|
||
```typescript
|
||
import {
|
||
getVideoMetadata,
|
||
convertToDash
|
||
} from '@grom13/adaptive-video-converter';
|
||
|
||
// Получить метаданные
|
||
const metadata = await getVideoMetadata('./video.mp4');
|
||
|
||
console.log('Разрешение:', `${metadata.width}×${metadata.height}`);
|
||
console.log('FPS:', metadata.fps);
|
||
console.log('Длительность:', metadata.duration, 'сек');
|
||
|
||
// Конвертация с учетом метаданных
|
||
await convertToDash({
|
||
inputPath: './video.mp4',
|
||
outputDir: './output',
|
||
customProfiles: metadata.height >= 1080
|
||
? ['720', '1080', '1440']
|
||
: ['360', '720']
|
||
});
|
||
```
|
||
|
||
## Обработка ошибок
|
||
|
||
```typescript
|
||
import { convertToDash } from '@grom13/adaptive-video-converter';
|
||
|
||
try {
|
||
const result = await convertToDash({
|
||
inputPath: './video.mp4',
|
||
outputDir: './output'
|
||
});
|
||
|
||
console.log('✅ Успешно:', result.manifestPath);
|
||
} catch (error) {
|
||
if (error.message.includes('FFmpeg not found')) {
|
||
console.error('❌ FFmpeg не установлен');
|
||
} else if (error.message.includes('MP4Box not found')) {
|
||
console.error('❌ MP4Box не установлен');
|
||
} else {
|
||
console.error('❌ Ошибка:', error.message);
|
||
}
|
||
}
|
||
```
|
||
|
||
## Интеграция в Express
|
||
|
||
```typescript
|
||
import express from 'express';
|
||
import multer from 'multer';
|
||
import { convertToDash } from '@grom13/adaptive-video-converter';
|
||
import { promises as fs } from 'fs';
|
||
|
||
const app = express();
|
||
const upload = multer({ dest: 'uploads/' });
|
||
|
||
app.post('/convert', upload.single('video'), async (req, res) => {
|
||
try {
|
||
const result = await convertToDash({
|
||
inputPath: req.file.path,
|
||
outputDir: './public/videos',
|
||
onProgress: (progress) => {
|
||
// Можно отправлять через WebSocket
|
||
console.log(`${progress.percent}%`);
|
||
}
|
||
});
|
||
|
||
// Удалить временный файл
|
||
await fs.unlink(req.file.path);
|
||
|
||
res.json({
|
||
success: true,
|
||
manifestPath: result.manifestPath
|
||
});
|
||
} catch (error) {
|
||
res.status(500).json({
|
||
success: false,
|
||
error: error.message
|
||
});
|
||
}
|
||
});
|
||
|
||
app.listen(3000);
|
||
```
|
||
|
||
## Следующие шаги
|
||
|
||
- [convertToDash()](/api/convert) — Подробная документация основной функции
|
||
- [Утилиты](/api/utilities) — Вспомогательные функции
|
||
- [Профили](/api/profiles) — Работа с профилями качества
|
||
- [Типы](/api/types) — TypeScript типы и интерфейсы
|