...
где sample.mp4 - имя файла, который должен находиться в "media" каталоге (по умолчанию /usr/local/FlashphonerWebCallServer/media/, или, начиная . Начиная со сборки 5.2.687, каталог , заданный при помощи параметра media_dir).для размещения файлов, может быть указан при помощи настройки в файле flashphoner.properties
Code Block | ||
---|---|---|
| ||
media_dir=/usr/local/FlashphonerWebCallServer/media |
В случае, если файл с таким именем отсутствует, сервер вернет сообщение StreamStatusEvent FAILED, в поле "info" которого будет указан диагноз "File not found".
Поток, созданный таким образом, предназначен для трансляции одному пользователю (персональный VOD). На этот поток нельзя подписаться, его нельзя транскодировать, добавить в микшер или проиграть по HLS
В случае, если необходимо организовать полноценную онлайн-трансляцию, следует указать ссылку на файл в виде:
...
К такому потоку могут подключиться одновременно несколько пользователей в реальном времени.
...
, он может быть транскодирован, добавлен в микшер или воспроизведен по HLS.
Поддерживаемые форматы и кодеки
- Контейнер: MP4
- Видео: H.264
- Аудио: AAC
...
Code Block | ||
---|---|---|
| ||
vod_live_loop=true |
Захват файла, размещенного на AWS или другом S3 хранилище
Поток может быть захвачен из файла, размещенного на AWS в хранилище S3. В отличие от VOD захвата файла с локального диска, файл, размещенный на внешнем хранилище, загружается и воспроизводится последовательно.
...
- bucket - имя корзины S3
- sample.mp4 - имя файла
Схема работы
1. Браузер запрашивает захват потока из файла на AWS
2. WCS сервер направляет запрос AWS
3. Файл загружается на WCS сервер
4. WebRTC поток из файла передается в браузер для воспроизведения
Настройка
Доступ к хранилищу AWS S3
Для загрузки файлов из AWS необходимо указать в файле настроек flashphoner.properties данные для доступа к хранилищу S3В сборке 5.2.939 добавлена возможность указать полный URL файла в S3 хранилище, это позволяет захватывать файлы из других S3 хранилищ (Digital Ocean, Selectel и т.д.)
Пример для Digital Ocean Spaces
Code Block | ||
---|---|---|
| ||
aws_s3_credentials=zone;login;hash |
Здесь
- zone - регион, где размещено хранилище
- login - идентификатор ключа доступа (Access Key ID)
- hash - секретный ключ доступа (Secret Accesss Key)
Пример настройки доступа:
Code Block | ||
---|---|---|
| ||
aws_s3_credentials=eu-central-1;AA22BB33CC44DE;DhlAkpZ4adclHhbLwhTNL4hvWTo80Njo |
Захват VOD из файла во время загрузки
...
vod://s3/https://ams3.digitaloceanspaces.com/myspace/folder/file.mp4 |
Пример для Selectel
Code Block | ||
---|---|---|
| ||
vod://s3/https://s3.selcdn.ru/mystorage/file.mp4 |
Схема работы
1. Браузер запрашивает захват потока из файла на AWS
2. WCS сервер направляет запрос AWS
3. Файл загружается на WCS сервер
4. WebRTC поток из файла передается в браузер для воспроизведения
Настройка
Доступ к хранилищу S3
AWS
Для загрузки файлов из AWS необходимо указать в файле настроек flashphoner.properties данные для доступа к хранилищу S3
Code Block | ||
---|---|---|
| ||
vodaws_mp4s3_container_new=true |
При низкой пропускной способности канала между WCS и хранилищем S3, либо при недостаточной его стабильности, может быть включена буферизация файла при загрузке. Размер буфера задается в миллисекундах настройкой
Code Block | ||
---|---|---|
| ||
vod_mp4_container_new_buffer_ms=10000 |
В данном случае, размер буфера составит 10 секунд.
Требования к формату файлов
Заголовок (moov) должен всегда располагаться перед данными (mdat). Примерная структура файла должна быть такой:
Code Block | ||
---|---|---|
| ||
Atom ftyp @ 0 of size: 32, ends @ 32
Atom moov @ 32 of size: 357961, ends @ 357993
...
Atom free @ 357993 of size: 8, ends @ 358001
Atom mdat @ 358001 of size: 212741950, ends @ 213099951 |
Проверить структуру файла можно при помощи утилиты AtomicParsley
Code Block | ||||
---|---|---|---|---|
| ||||
AtomicParsley file.mp4 -T 1 |
Если структура файла не соответствует требованиям, файл не будет воспроизводиться. При необходимости, структуру файла можно исправить при помощи ffmpeg без перекодирования
Code Block | ||||
---|---|---|---|---|
| ||||
ffmpeg -i bad.mp4 -acodec copy -vcodec copy -movflags +faststart good.mp4 |
Требования к именам файлов
Официальная документация по AWS S3 не рекомендует использование пробелов наряду с другими специальными символами, но и не запрещает их. Если пробелы в именах файлов все же используются, их необходимо заменять на '%20', например
Code Block | ||
---|---|---|
| ||
vod://s3/bucket/sample%20with%20spaces.mp4 |
Управление VOD при помощи REST API
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
- HTTP: http://test.flashphoner.com:8081/rest-api/vod/startup
- HTTPS: https://test.flashphoner.com:8444/rest-api/vod/startup
Здесь:
- test.flashphoner.com - адрес WCS-сервера
- 8081 - стандартный REST / HTTP порт WCS-сервера
- 8444 - стандартный HTTPS порт
- rest-api - обязательная часть URL
- /vod/startup - используемый REST-метод
REST-методы и статусы ответа
...
REST-метод
...
Пример тела REST-запроса
...
Пример тела REST-ответа
...
Статусы ответа
...
Описание
...
/vod/startup
...
Code Block | ||||
---|---|---|---|---|
| ||||
{
"uri":"vod-live://sample.mp4",
"localStreamName": "test"
} |
409 - Conflict
500 - Internal error
Захватить поток из указанного файла
...
Code Block | ||||
---|---|---|---|---|
| ||||
{
"localStreamName": "test"
} |
credentials=zone;login;hash |
Здесь
- zone - регион, где размещено хранилище
- login - идентификатор ключа доступа (Access Key ID)
- hash - секретный ключ доступа (Secret Accesss Key)
Пример настройки доступа:
Code Block | ||
---|---|---|
| ||
aws_s3_credentials=eu-central-1;AA22BB33CC44DE;DhlAkpZ4adclHhbLwhTNL4hvWTo80Njo |
Digital Ocean Spaces
Для загрузки файлов из DO Spaces необходимо указать настройку
Code Block | ||
---|---|---|
| ||
aws_s3_credentials=ams3;access_key;secret |
Здесь
- ams3 - поддомен digitaloceanspaces.com
- access_key - ключ доступа к хранилищу
- secret - секретный код доступа к хранилищу
Selectel
Для загрузки файлов из Selectel S3 необходимо указать настройку
Code Block | ||
---|---|---|
| ||
aws_s3_credentials=ru-1a;login;password |
Здесь
- ru-1a - регион хранилища
- login - имя пользователя
- password - пароль
Захват VOD из файла во время загрузки
Чтобы захватывать поток из файла во время его загрузки, необходимо указать следующую настройку
Code Block | ||
---|---|---|
| ||
vod_mp4_container_new=true |
При низкой пропускной способности канала между WCS и хранилищем S3, либо при недостаточной его стабильности, может быть включена буферизация файла при загрузке. Размер буфера задается в миллисекундах настройкой
Code Block | ||
---|---|---|
| ||
vod_mp4_container_new_buffer_ms=10000 |
В данном случае, размер буфера составит 10 секунд.
Требования к формату файлов
Заголовок (moov) должен всегда располагаться перед данными (mdat). Примерная структура файла должна быть такой:
Code Block | ||
---|---|---|
| ||
Atom ftyp @ 0 of size: 32, ends @ 32
Atom moov @ 32 of size: 357961, ends @ 357993
...
Atom free @ 357993 of size: 8, ends @ 358001
Atom mdat @ 358001 of size: 212741950, ends @ 213099951 |
Проверить структуру файла можно при помощи утилиты AtomicParsley
Code Block | ||||
---|---|---|---|---|
| ||||
AtomicParsley file.mp4 -T 1 |
Если структура файла не соответствует требованиям, файл не будет воспроизводиться. При необходимости, структуру файла можно исправить при помощи ffmpeg без перекодирования
Code Block | ||||
---|---|---|---|---|
| ||||
ffmpeg -i bad.mp4 -acodec copy -vcodec copy -movflags +faststart good.mp4 |
Требования к именам файлов
Официальная документация по AWS S3 не рекомендует использование пробелов наряду с другими специальными символами, но и не запрещает их. Если пробелы в именах файлов все же используются, их необходимо заменять на '%20', например
Code Block | ||
---|---|---|
| ||
vod://s3/bucket/sample%20with%20spaces.mp4 |
Управление VOD при помощи REST API
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
- HTTP: http://test.flashphoner.com:8081/rest-api/vod/startup
- HTTPS: https://test.flashphoner.com:8444/rest-api/vod/startup
Здесь:
- test.flashphoner.com - адрес WCS-сервера
- 8081 - стандартный REST / HTTP порт WCS-сервера
- 8444 - стандартный HTTPS порт
- rest-api - обязательная часть URL
- /vod/startup - используемый REST-метод
REST-методы и статусы ответа
REST-метод | Пример тела REST-запроса | Пример тела REST-ответа | Статусы ответа | Описание | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
/vod/startup |
| 409 - Conflict 500 - Internal error | Захватить поток из указанного файла | |||||||||||||||
/vod/find |
|
| 200 – потоки найдены 404 – потоки не найдены | Найти VOD-потоки по указанному критерию | ||||||||||||||
/vod/find_all |
| 200 – потоки найдены 404 – потоки не найдены | Найти все VOD-потоки | по указанному критерию|||||||||||||||
/vod/find_allterminate |
| 200 - поток завершен 404 - поток не найден | Завершить VOD-поток |
Параметры
Имя параметра | Описание | Пример | ||||
---|---|---|---|---|---|---|
uri | Имя файла для захвата потока | vod://sample.mp4", "status": "PROCESSED_LOCAL", "hasAudio": true, "hasVideo": true, "record": false } ] | 200 – потоки найдены 404 – потоки не найдены | Найти все VOD-потоки | /vod/terminate | |
localStreamName | Имя создаваемого потока | test | ||||
status | Текущий статус потока | PROCESSED_LOCAL | ||||
localMediaSessionId | Идентификатор медиасессии | 29ec3236-1093-42bb-88d6-d4ac37af3ac0 | ||||
hasAudio | В потоке есть аудио | true | ||||
hasVideo | В потоке есть видео | true | ||||
record | Поток записывается | false | ||||
loop | Файл захватывается циклически | false |
Циклический захват потока из файла по запросу
В сборке 5.2.1528 добавлена возможность указать, должен ли файл захватываться циклически, при создании VOD live трансляции по REST API
Code Block | ||||
---|---|---|---|---|
|
...
{
"uri":"vod://sample.mp4",
"localStreamName": "test"
}
...
200 - поток завершен
404 - поток не найден
...
Завершить VOD-поток
Параметры
...
Имя параметра
...
Описание
...
Пример
...
uri
...
Имя файла для захвата потока
...
{ "uri":"vod-live://sample.mp4 |
...
test
...
status
...
Текущий статус потока
...
PROCESSED_LOCAL
...
29ec3236-1093-42bb-88d6-d4ac37af3ac0
...
true
...
true
...
",
"localStreamName": "test",
"loop": true
} |
По умолчанию, если параметр loop
не указан, применяется настройка vod_live_loop
. Если параметр указан, то, в зависимости от его значения
true
- файл будет захватываться циклическиfalse
- файл будет проигран однократно, после чего VOD live трансляция остановится
Значение параметра loop
имеет приоритет над значением настройки vod_live_loop.
Ограничения
Запрос /rest-api/vod/startup может применяться только для создания VOD live трансляций. При этом, запросы find, find_all и terminate могут быть применены как к VOD, так и к VOD live трансляциям.
...