Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

где sample.mp4 - имя файла, который должен находиться в "media" каталоге (по умолчанию /usr/local/FlashphonerWebCallServer/media/, или, начиная с версии . Начиная со сборки 5.2.687, каталог , заданный при помощи параметра media_dir).для размещения файлов, может быть указан при помощи настройки в файле flashphoner.properties

Code Block
themeRDark
media_dir=/usr/local/FlashphonerWebCallServer/media

В случае, если файл с таким именем отсутствует, сервер вернет сообщение StreamStatusEvent FAILED, в поле "info" которого будет указан диагноз "File not found".

Поток, созданный таким образом, предназначен для трансляции одному пользователю (персональный VOD). На этот поток нельзя подписаться, его нельзя транскодировать, добавить в микшер или проиграть по HLS

В случае, если необходимо организовать полноценную онлайн-трансляцию, следует указать ссылку на файл в виде:

...

К такому потоку могут подключиться одновременно несколько пользователей в реальном времени., он может быть транскодирован, добавлен в микшер или воспроизведен по HLS.

Поддерживаемые форматы и кодеки

...

Code Block
themeRDark
vod_live_loop=true

Захват файла, размещенного на AWS или другом S3 хранилище

Поток может быть захвачен из файла, размещенного на AWS в хранилище S3. В отличие от VOD захвата файла с локального диска, файл, размещенный на внешнем хранилище, загружается и воспроизводится последовательно.

...

  • bucket - имя корзины S3
  • sample.mp4 - имя файла

Схема работы

Image Removed

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
themeRDark
aws_s3_credentials=zone;login;hash

Здесь

  • zone - регион, где размещено хранилище
  • login - идентификатор ключа доступа (Access Key ID)
  • hash - секретный ключ доступа (Secret Accesss Key)

Пример настройки доступа:

Code Block
themeRDark
aws_s3_credentials=eu-central-1;AA22BB33CC44DE;DhlAkpZ4adclHhbLwhTNL4hvWTo80Njo

Захват VOD из файла во время загрузки

...

vod://s3/https://ams3.digitaloceanspaces.com/myspace/folder/file.mp4

Пример для Selectel

Code Block
themeRDark
vod://s3/https://s3.selcdn.ru/mystorage/file.mp4


Схема работы

Image Added

1. Браузер запрашивает захват потока из файла на AWS

2. WCS сервер направляет запрос AWS

3. Файл загружается на WCS сервер

4. WebRTC поток из файла передается в браузер для воспроизведения

Настройка

Доступ к хранилищу S3

AWS

Для загрузки файлов из AWS необходимо указать в файле настроек flashphoner.properties данные для доступа к хранилищу S3

Code Block
themeRDark
vodaws_mp4s3_container_new=true

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

Code Block
themeRDark
vod_mp4_container_new_buffer_ms=10000

В данном случае, размер буфера составит 10 секунд.

Требования к формату файлов

Заголовок (moov) должен всегда располагаться перед данными (mdat). Примерная структура файла должна быть такой:

Code Block
themeRDark
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
languagebash
themeRDark
AtomicParsley file.mp4 -T 1

Если структура файла не соответствует требованиям, файл не будет воспроизводиться. При необходимости, структуру файла можно исправить при помощи ffmpeg без перекодирования

Code Block
languagebash
themeRDark
ffmpeg -i bad.mp4 -acodec copy -vcodec copy -movflags +faststart good.mp4

Требования к именам файлов

Официальная документация по AWS S3 не рекомендует использование пробелов наряду с другими специальными символами, но и не запрещает их. Если пробелы в именах файлов все же используются, их необходимо заменять на '%20', например

Code Block
themeRDark
vod://s3/bucket/sample%20with%20spaces.mp4

Управление VOD  при помощи REST API

REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:

Здесь:

  • test.flashphoner.com - адрес WCS-сервера
  • 8081 - стандартный REST / HTTP порт WCS-сервера
  • 8444 - стандартный HTTPS порт
  • rest-api - обязательная часть URL
  • /vod/startup - используемый REST-метод

REST-методы и статусы ответа

...

REST-метод

...

Пример тела REST-запроса

...

Пример тела REST-ответа

...

Статусы ответа

...

Описание

...

/vod/startup

...

Code Block
languagejs
themeRDark
{
 "uri":"vod-live://sample.mp4",
 "localStreamName": "test"
}

409 - Conflict

500 - Internal error

Захватить поток из указанного файла

...

Code Block
languagejs
themeRDark
{
 "localStreamName": "test"
}
credentials=zone;login;hash

Здесь

  • zone - регион, где размещено хранилище
  • login - идентификатор ключа доступа (Access Key ID)
  • hash - секретный ключ доступа (Secret Accesss Key)

Пример настройки доступа:

Code Block
themeRDark
aws_s3_credentials=eu-central-1;AA22BB33CC44DE;DhlAkpZ4adclHhbLwhTNL4hvWTo80Njo

Digital Ocean Spaces

Для загрузки файлов из DO Spaces необходимо указать настройку

Code Block
themeRDark
aws_s3_credentials=ams3;access_key;secret

Здесь

  • ams3 - поддомен digitaloceanspaces.com
  • access_key - ключ доступа к хранилищу
  • secret - секретный код доступа к хранилищу

Selectel

Для загрузки файлов из Selectel S3 необходимо указать настройку

Code Block
themeRDark
aws_s3_credentials=ru-1a;login;password

Здесь

  • ru-1a - регион хранилища
  • login - имя пользователя
  • password - пароль

Захват VOD из файла во время загрузки

Чтобы захватывать поток из файла во время его загрузки, необходимо указать следующую настройку

Code Block
themeRDark
vod_mp4_container_new=true

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

Code Block
themeRDark
vod_mp4_container_new_buffer_ms=10000

В данном случае, размер буфера составит 10 секунд.

Требования к формату файлов

Заголовок (moov) должен всегда располагаться перед данными (mdat). Примерная структура файла должна быть такой:

Code Block
themeRDark
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
languagebash
themeRDark
AtomicParsley file.mp4 -T 1

Если структура файла не соответствует требованиям, файл не будет воспроизводиться. При необходимости, структуру файла можно исправить при помощи ffmpeg без перекодирования

Code Block
languagebash
themeRDark
ffmpeg -i bad.mp4 -acodec copy -vcodec copy -movflags +faststart good.mp4

Требования к именам файлов

Официальная документация по AWS S3 не рекомендует использование пробелов наряду с другими специальными символами, но и не запрещает их. Если пробелы в именах файлов все же используются, их необходимо заменять на '%20', например

Code Block
themeRDark
vod://s3/bucket/sample%20with%20spaces.mp4

Управление VOD  при помощи REST API

REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:

Здесь:

  • test.flashphoner.com - адрес WCS-сервера
  • 8081 - стандартный REST / HTTP порт WCS-сервера
  • 8444 - стандартный HTTPS порт
  • rest-api - обязательная часть URL
  • /vod/startup - используемый REST-метод

REST-методы и статусы ответа

по указанному критерию

REST-метод

Пример тела REST-запроса

Пример тела REST-ответа

Статусы ответа

Описание

/vod/startup

Code Block
languagejs
themeRDark
{
 "uri":"vod-live://sample.mp4",
 "localStreamName": "test"
}

409 - Conflict

500 - Internal error


Захватить поток из указанного файла


/vod/find
Code Block
languagejs
themeRDark
{
 "localStreamName": "test"
}
Code Block
languagejs
themeRDark
[
    {
        "localMediaSessionId": "29ec3236-1093-42bb-88d6-d4ac37af3ac0",
        "localStreamName": "test",
        "uri": "vod-live://sample.mp4",
        "status": "PROCESSED_LOCAL",
        "hasAudio": true,
        "hasVideo": true,
        "record": false,
        "loop": false
    }
]

200 – потоки найдены

404 – потоки не найдены

Найти VOD-потоки по указанному критерию

/vod/find_all


Code Block
languagejs
themeRDark
[
    {
        "localMediaSessionId": "29ec3236-1093-42bb-88d6-d4ac37af3ac0",
        "localStreamName": "test",
        "uri": "vod-live://sample.mp4",
        "status": "PROCESSED_LOCAL",
        "hasAudio": true,
        "hasVideo": true,
        "record": false,
        "loop": false
    }
]

200 – потоки найдены

404 – потоки не найдены

Найти все VOD-потоки

/vod/find_allterminate

Code Block
languagejs
themeRDark
[
    {
        "localMediaSessionIduri": "29ec3236-1093-42bb-88d6-d4ac37af3ac0"vod://sample.mp4",
        "localStreamName": "test",
        "uri": "vod-live
}

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
languagejs
themeRDark

...

{
 "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 трансляциям.

...