add vitepress
This commit is contained in:
236
docs/api/index.md
Normal file
236
docs/api/index.md
Normal file
@@ -0,0 +1,236 @@
|
||||
# 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 типы и интерфейсы
|
||||
Reference in New Issue
Block a user