# Исходный код FFmpeg в Редакто

Редакто использует библиотеку из официального Electron 43.2.0. Собственных изменений FFmpeg нет.
Electron использует Chromium 150.0.7871.129 и FFmpeg из коммита `ad41607c61898cf7150e0fb20fe4bbabd44922a3`.
Связь версий зафиксирована в `DEPS` архива Electron и приложенном `CHROMIUM-DEPS`.

## Состав комплекта

- Архив FFmpeg содержит исходники, лицензии, файлы GN и настройки Chromium для каждой платформы.
- Архив Electron содержит сценарии сборки, список зависимостей и патч FFmpeg `patches/ffmpeg/link_with_loader_path.patch`.
- `link_with_loader_path.patch` меняет путь загрузки библиотеки в macOS. Это изменение Electron, а не Редакто.
- `COPYING.LGPLv2.1` содержит оригинальный текст лицензии.
- `SHA256SUMS` фиксирует содержимое опубликованного комплекта.

## Сборка

Используйте [инструкцию Electron для macOS](https://github.com/electron/electron/blob/v43.2.0/docs/development/build-instructions-macos.md)
или [Windows](https://github.com/electron/electron/blob/v43.2.0/docs/development/build-instructions-windows.md).
Подготовьте указанные в инструкции инструменты и системный комплект разработки.
Получите исходники Electron тега `v43.2.0` через описанный там `gclient`.
Синхронизируйте зависимости из `DEPS`. Сценарий Electron применяет патчи, включая приложенный патч FFmpeg.

Для обычной библиотеки, входящей в Electron, используются `build/args/release.gn` и `build/args/all.gn`.
Их параметры: `is_component_ffmpeg=true`, `ffmpeg_branding="Chrome"`, `proprietary_codecs=true`.
Файл `build/args/ffmpeg.gn` относится к другому, отдельному архиву FFmpeg без закрытых кодеков. Он не описывает библиотеку внутри нашего Electron.

Пример генерации сборки macOS ARM64 из каталога `src`:

```sh
gn gen out/Release --args='import("//electron/build/args/release.gn") target_cpu="arm64"'
autoninja -C out/Release electron
```

Для x64 укажите `target_cpu="x64"`. Условия сборки каждой платформы определяет инструкция соответствующей версии Electron.
Настройки FFmpeg находятся в `chromium/config/Chrome/<платформа>/<архитектура>/config.h` исходного архива FFmpeg.
В подготовленном комплекте для macOS ARM64, macOS x64 и Windows x64 значения `CONFIG_GPL`, `CONFIG_NONFREE`, `CONFIG_VERSION3` равны `0`.

Библиотека подключается отдельно. Ее имя в macOS — `libffmpeg.dylib`, в Windows — `ffmpeg.dll`.
Для замены библиотека должна сохранять совместимый интерфейс Electron. При изменении подписанного приложения потребуется собственная подпись.

Этот комплект фиксирует исходники и сценарии поставщика. Побитовое воспроизведение официальной библиотеки отдельно не проверялось.
Патентные ограничения кодеков и применимость лицензий к условиям распространения проверяет ответственный за выпуск.
