...
Chrome | Firefox | Safari 11 | Edge | |
Windows | + | + | + | |
Mac OS | + | + | + | |
Android | + | + | ||
iOSiPadOS | - | - | + |
Поддерживаемые кодеки
- Видео: H.264
- Аудио: AAC
...
Code Block | ||||
---|---|---|---|---|
| ||||
stream = session.createStream(options).on(STREAM_STATUS.PENDING, function(stream) { ... }).on(STREAM_STATUS.PLAYING, function(stream) { ... }).on(STREAM_STATUS.STOPPED, function() { setStatus(STREAM_STATUS.STOPPED); onStopped(); }).on(STREAM_STATUS.FAILED, function(stream) { ... }).on(STREAM_STATUS.NOT_ENOUGH_BANDWIDTH, function(stream){ ... }); stream.play(); |
Буферизация MSE
При большом количестве подписчиков, играющих потоки с помощью MSE, повышается средняя загрузка процессора на сервере. Для снижения нагрузки, в версии 5.2.360 добавлена возможность буферизации кадров, отправляемых MSE-подписчику. Количество кадров, передаваемых в одном пакете, определяется настройкой в файле flashphoner.properties
Code Block | ||
---|---|---|
| ||
avcc_buffer_wait_frames_count=5 |
По умолчанию, в одном пакете передается 5 кадров
Размер буфера для отправляемых пакетов задается в байтах настройкой
Code Block | ||
---|---|---|
| ||
avcc_send_buffer_size=500000 |
По умолчанию, размер буфера составляет 500 кбайт. Если пакет не помещается в буфер, он сразу отправляется подписчику с выводом в лог сообщения об ошибке
Code Block | ||
---|---|---|
| ||
12:00:50,555 ERROR AvccSendBuffer - VideoProcessor-db2da9a0-ddb6-11e9-9fc2-cf9284f3bdd0 Failed to buffer frame |
Для снижения средней загрузки процессора количество кадров в пакете и размер буфер рекомендуется увеличить. Отметим, что чем больше буферизация, тем больше вносимая ею задержка.
При необходимости, буферизация может быть отключена при помощи изменения параметра msePacketizationVersion
в исходных текстах WebSDK
Code Block | ||||
---|---|---|---|---|
| ||||
wsConnection.onopen = function () {
onSessionStatusChange(SESSION_STATUS.CONNECTED);
cConfig = {
appKey: appKey,
mediaProviders: Object.keys(MediaProvider),
keepAlive: keepAlive,
authToken:authToken,
clientVersion: "0.5.28",
clientOSVersion: window.navigator.appVersion,
clientBrowserVersion: window.navigator.userAgent,
msePacketizationVersion: 2,
custom: options.custom
}; |
на
Code Block | ||||
---|---|---|---|---|
| ||||
msePacketizationVersion: 1, |
В этом случае настройки буферизации работать не будут, кадры будут отправляться непосредственно MSE-подписчикам.
Известные проблемы
1. При воспроизведении видеопотока, опубликованного из Flash клиента с низким FPS, по MSE с установленной настройкой mseCutByIFrameOnly=true и включенным транскодингом в браузерах MS Edge и Internet Explorer 11 возможны фризы.
Симптомы: при воспроизведении видео, опубликованного из Flash клиента, в приложении Player с явно указанным разрешением и выставленной настройкой mseCutByIFrameOnly=true, например https://server:8888/client2/examples/demo/streaming/player/player.html?resolution=320x240&mediaProvider=MSE&mseCutByIFrameOnly=true в браузере MS Edge или Internet Explorer 11 наблюдаются частые фризы.
...
б) если увеличить FPS невозможно, необходимо уменьшать следующий параметр в файле flashphoner.properties, например
Code Block | ||||
---|---|---|---|---|
| ||||
video_encoder_h264_gop=30 |
2. MSE не поддерживается в iOS Safari на iPhone.
Симптомы: воспроизведение потока по MSE на iPhone c iOS 12 и выше не запускается, в примере Embed Player при этом отображается сообщение "None of preferred media providers available"
Решение:
а) использовать WebRTC на iPhone с iOS 12 и выше
б) если необходимо однопортовое соединение, использовать WSPlayer или TURN сервер
3. Нельзя воспроизвести два потока по MSE через одно Websocket соединение на одной странице
Симптомы: в примере 2Players не играют два потока при подключении по HTTP в основных браузерах (Chrome, Firefox, Safari)
Решение: использовать отдельное Websocket соединение для каждого потока на одной странице при воспроизведении по MSE