Versions Compared

Key

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

...

5. Циклическая вставка не поддерживается. Невозможно вставить stream1 в stream2, а затем stream2 в stream1 без остановки предыдущей вставки.

Реализация вставки в сборках до 5.2.1618

Управление вставкой при помощи REST API

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

...

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

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

REST-метод

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

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

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

Описание

/stream/inject/startup

Code Block
languagejs
themeRDark
{
 "localStreamName": "stream1",
 "remoteStreamName": "stream2"
}

200 - OK

400 - Bad request

404 - Not found

409 - Conflict

500 - Internal error


Вставить поток stream2 в stream1


/stream/inject/find_all
Code Block
languagejs
themeRDark
[
 {
   "localStreamName": "stream1",
   "remoteStreamName": "stream2"
 }
]

200 - OK

404 - Not found


Найти все вставки на сервере
/stream/inject/terminate
Code Block
languagejs
themeRDark
{
 "localStreamName": "stream1"
}

200 - OK

400 - Bad request

404 - Not found

500 - Internal error


Остановить вставку в поток stream1

...

Имя параметра

Описание

Пример

localStreamNameИмя потока, в который производится вставка
stream1
remoteStreamNameИмя потока, который будет вставлен
stream2

Вставка VOD потока из файла

В сборке 5.2.1535 добавлена возможность вставить VOD поток непосредственно из файла при отправке запроса /stream/inject/startup:

Code Block
languagejs
themeRDark
{
    "localStreamName":"host",
    "remoteStreamName":"vod-live://advertising.mp4"
}

При этом вставляемый файл начинает проигрываться без пауз, с первого ключевого кадра. Если этот же файл вставить в другой поток, в том потоке файл также начнет проигрываться с начала.

Эта возможность полезна, например, при вставке рекламных роликов в поток, который смотрят зрители.

Настройка

В сборке 5.2.1235 добавлена настроканастройка, которая определяет, в течение какого времени в миллисекундах необходимо ждать ключевого кадра во вставляемом потоке

...

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

Реализация вставки в сборке 5.2.1618 и новее

Настройка

В сборке 5.2.1618 добавлена новая реализация вставки одного потока в другой, позволяющая выбрать, какую именно составляющую заменить: аудио, видео или обе. Эта возможность включается настройкой

Code Block
themeRDark
use_new_injector=true

REST API

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

  • HTTP: http://test.flashphoner.com:8081/rest-api/stream/inject2/startup

  • HTTPS: https://test.flashphoner.com:8444/rest-api/stream/inject2/startup

Здесь:

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

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

REST-метод

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

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

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

Описание

/stream/inject2/startup

Code Block
languagejs
themeRDark
{
 "localStreamName": "test",
 "remoteStreamName": "test2",
 "video": true,
 "audio": true,
 "muteIfAbsent": true
}

200 - OK

400 - Bad request

404 - Not found

409 - Conflict

500 - Internal error


Вставить поток test2 в поток test


/stream/inject2/find_all
Code Block
languagejs
themeRDark
[
  {
    "streamName": "test",
    "videoInjectorInfo": {
      "targetStreamName": "test2",
      "rootStreamName": "test2",
      "startTime": 1683344295099
    },
    "audioInjectorInfo": {
      "targetStreamName": "test2",
      "rootStreamName": "test2",
      "startTime": 1683344295056
    }
  }
]

200 - OK

404 - Not found


Найти все вставки на сервере
/stream/inject2/terminate
Code Block
languagejs
themeRDark
{
 "localStreamName": "test"
}

200 - OK

400 - Bad request

404 - Not found

500 - Internal error


Остановить вставку в поток test

Параметры

Имя параметра

Описание

Пример

localStreamNameИмя потока, в который производится вставка
test
remoteStreamNameИмя потока, который будет вставлен
test2
videoЗаменять видео составляющую при вставке потокаtrue 
audioЗаменять аудио составляющую при вставке потокаtrue 
muteIfAbsentЗаменять составляющую, которой нет в исходном потоке, на темноту или тишинуtrue 
videoInjectorInfoИнформация о видео из вставленного потока{
"targetStreamName": "test2",
"rootStreamName": "test2",
"startTime": 1683344295099
}
audioInjectorInfoИнформация об аудио из вставленного потока{
"targetStreamName": "test2",
"rootStreamName": "test2",
"startTime": 1683344295056
}

Вставка VOD потока из файла

В сборке 5.2.1719 добавлена возможность вставить VOD поток непосредственно из файла при отправке запроса /stream/inject2/startup:

Code Block
languagejs
themeRDark
{
    "localStreamName":"host",
    "remoteStreamName":"vod-live://advertising.mp4",
    "video":true,
    "audio":true
}

При этом вставляемый файл начинает проигрываться без пауз, с первого ключевого кадра. Если этот же файл вставить в другой поток, в том потоке файл также начнет проигрываться с начала.

Эта возможность полезна, например, при вставке рекламных роликов в поток, который смотрят зрители.

Краткое руководство по тестированию

...

7. В потоке test вновь играет оригинальное содержимое

Известные проблемы

1. По окончании вставки одного RTMP потока в другой может теряться синхронизация между аудио и видео а оригинальном потоке

Симптомы: при вставке RTMP потока в другой RTMP поток, по окончании вставки оригинальный поток играет с рассинхронизацией аудио и видео

Решение: включить буферизацию входящих RTMP потоков

Code Block
themeRDark
rtmp_in_buffer_enabled=true