...
REST-метод | Пример тела REST-запроса | Пример тела REST-ответа | Статусы ответа | Описание | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|
/pull/rtmp/pull |
| 409 - Conflict 500 - Internal error | Извлечь RTMP-поток по указанному URL | ||||||||
/pull/rtmp/find_all |
| 200 – потоки найдены 404 – потоки не найдены | Найти все извлеченные RTMP-потоки | ||||||||
/pull/rtmp/terminate |
| 200 - поток завершен 404 - поток не найден | Завершить извлеченный RTMP-поток |
...
В сборке 5.2.724 добавлена возможность указать имя, под которым захваченный поток будет опубликован на сервере, при помощи параметра localStreamName
. Если имя не указано, поток будет опубликован под именем, совпадающим с uri
, как в предыдущих сборках.
Повторный захват потока с тем же URI
При попытке повторного захвата потока с тем же URI запрос /pull/rtmp/pull
вернет 409 Conflict
. Если поток уже опубликован на сервере, необходимо подключаться к этому потоку.
Публикация потока только с аудио или только с видео
В сборке 5.2.1439 добавлена возможность указать в REST запросе, с какими составляющими захваченный поток будет опубликован на сервере. Например, для публикации потока только с видео
Code Block | ||||
---|---|---|---|---|
| ||||
{
"uri":"rtmp://myserver.com/live/myStream",
"localStreamName":"stream1",
"hasAudio": false,
"hasVideo": true
} |
Настройка
Управление параметрами кодеков
В каталоге /usr/local/FlashphonerWebCallServer/conf
может располагаться файл описания SDP для RTMP-агента rtmp_agent.sdp
:
Code Block | language | bash|
---|---|---|
| ||
v=0 o=- 1988962254 1988962254 IN IP4 0.0.0.0 c=IN IP4 0.0.0.0 t=0 0 a=sdplang:en m=video 0 RTP/AVP 95 a=rtpmap:95 H264/90000 a=fmtp:95 profile-level-id=42e01f;packetization-mode=1 a=sendonly m=audio 0 RTP/AVP 103 96 97 98 99 100 102 108 104 a=rtpmap:108 mpeg4-generic/48000/12 a=rtpmap:96 mpeg4-generic/8000/12 a=rtpmap:97 mpeg4-generic/11025/12 a=rtpmap:98 mpeg4-generic/12000/12 a=rtpmap:99 mpeg4-generic/16000/12 a=rtpmap:100 mpeg4-generic/22050/12 a=rtpmap:104 mpeg4-generic/24000/12 a=rtpmap:102 mpeg4-generic/32000/12 a=rtpmap:103 mpeg4-generic/44100/12 a=recvonly |
Для того, чтобы при записи захваченного потока на диск записывалось не только аудио, но и видео, необходимо в данном файле указать атрибут
Code Block | ||||
---|---|---|---|---|
| ||||
a=sendonly |
для видео.
Публикация потока без одной из составляющих
Если из файла rtmp_agent.sdp
убрать аудио или видео составляющую, то захваченный поток будет опубликован на сервере без этой составляющей. Например. для публикации только видео SDP должно выглядеть так:
Code Block | ||
---|---|---|
| ||
v=0
o=- 1988962254 1988962254 IN IP4 0.0.0.0
c=IN IP4 0.0.0.0
t=0 0
a=sdplang:en
m=video 0 RTP/AVP 95
a=rtpmap:95 H264/90000
a=fmtp:95 profile-level-id=42e01f;packetization-mode=1
a=sendonly |
Определение типа фрейма
В некоторых случаях, источник RTMP потока может некорректно проставлять тип фрейма на уровне сообщений RTMP протокола. В этом случае тип фрейма необходимо определять по его содержимому. Для этого используется настройка, добавленная в сборке 5.2.1446
Code Block | ||
---|---|---|
| ||
rtmp_detect_h264_frame_type=true |
Краткое руководство по тестированию
...
Ниже приводится последовательность выполнения операций при захвате RTMP-потока с другого сервера
Авторизация на сервере-источнике
WCS поддерживает авторизацию на RTMP сервере при захвате с него потока при помощи параметров в RTMP URL:
Code Block | ||
---|---|---|
| ||
rtmp://username:password@server:1935/live/streamKey |
Отметим, что, если поток запрашивается с другого WCS сервера по RTMP, такая авторизация не поддерживается.
В сборке 5.2.1069 также добавлена возможность передать параметры после имени потока
Code Block | ||
---|---|---|
| ||
rtmp://server:1935/live/streamKey?user=username&password=password |
В этом случае параметры будут переданы на сервер в RTMP сообщении connect
.
При необходимости, параметры могут быть указаны и после имени приложения
Code Block | ||
---|---|---|
| ||
rtmp://server:1935/live?user=username&password=password/streamKey |
В этом случае параметры также будут переданы на сервер в RTMP сообщении connect
. Если поток запрашивается с другого WCS сервера по RTMP, параметры авторизации будут доступны в REST hook /connect.
Известные проблемы
Excerpt | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1. Поток, содержащий B-фреймы, не воспроизводится либо воспроизводится с артефактами (задержки, подергивания) Симптомы:
Решение:
2. AAC фреймы типа 0 не поддерживаются декодером FFmpeg и будут игнорироваться при воспроизведении захваченного потока При этом в клиентском логе будут выведены предупреждения:
Решение: использовать кодек Fraunhofer при помощи настройки в файле flashphoner.properties
3. При публикации и последующем воспроизведении и записи H264 + AAC потока возможна рассинхронизация видео и звука, либо полное отсутствие звука. Симптомы: при воспроизведении H264 + AAC потока, опубликованного на сервере, а также в записи потока, звук не синхронизирован с видео или отсутствует Решение: а) установить настройку в файле flashphoner.properties
Эта настройка, в том числе, отключает игнорирование AAC фреймов. б) использовать кодек Fraunhofer при помощи настройки
4. При преобразовании звуковой дорожки AAC к частоте дискретизации 11025 Гц звук искажен или отсутствует Симптомы: при публикации H264 + AAC потока на WCS сервере и воспроизведении его как H264 + AAC c частотой дискретизации звука 11025 Гц звук искажен или отсутствует Решение: не использовать частоту дискретизации звука 11025 Гц, либо избегать преобразования звука к данной частоте, например, не указывать данную частоту в файлах настроек SDP. |
...