...
Контроль наличия медиа трафика работает только при публикации, но не при проигрывании потоков.
Если браузер Chrome публикует пустое видео при занятой веб-камере
Некоторые версии браузера Chrome не возвращают ошибку в случае, если веб-камера занята другим процессом, а публикуют поток с пустым видео (черный экран). Остановить публикацию в этом случае можно двумя способами: при помощи JavaScript и HTML5 на клиенте, или при помощи настройки на сервере.
Остановка публикации потока на стороне клиента
Видеодорожка, созданная браузером Chrome для занятой камеры, останавливается в пределах первой секунды публикации, затем поток публикуется уже без видео. При этом состояние видеодорожки (переменная readyState
) меняется на ended
, и генерируется соответствующее событие onended
, которое может быть перехвачено веб-приложением. Для того, чтобы использовать это событие:
1. Добавляем в скрипт веб-приложения функцию регистрации обработчика события onended, в котором завершаем публикацию при помощи stream.stop()
Отключение контроля активности видео и аудио дорожек по имени потока
В сборке 5.2.1784 добавлена возможность отключить контроль активности видео и аудио дорожек в потоках, имя которых совпадает с регулярным выражением
Code Block | ||
---|---|---|
| ||
rtp_activity_audio_exclude=stream1
rtp_activity_video_exclude=stream1 |
Это может быть полезно для потоков, трафик в которых может останавливаться на длительное время, например, для потоков с экрана или окна приложения:
Code Block | ||
---|---|---|
| ||
rtp_activity_audio_exclude=.*-screen$
rtp_activity_video_exclude=.*-screen$ |
В данном случае контроль активности не будет применяться к потокам с именами conference-123-user-456-screen
Если браузер Chrome публикует пустое видео при занятой веб-камере
Некоторые версии браузера Chrome не возвращают ошибку в случае, если веб-камера занята другим процессом, а публикуют поток с пустым видео (черный экран). Остановить публикацию в этом случае можно двумя способами: при помощи JavaScript и HTML5 на клиенте, или при помощи настройки на сервере.
Остановка публикации потока на стороне клиента
Видеодорожка, созданная браузером Chrome для занятой камеры, останавливается в пределах первой секунды публикации, затем поток публикуется уже без видео. При этом состояние видеодорожки (переменная readyState
) меняется на ended
, и генерируется соответствующее событие onended
, которое может быть перехвачено веб-приложением. Для того, чтобы использовать это событие:
1. Добавляем в скрипт веб-приложения функцию регистрации обработчика события onended, в котором завершаем публикацию при помощи stream.stop()
Code Block | ||||
---|---|---|---|---|
| ||||
function addVideoTrackEndedListener(localVideo, stream) { var videoTrack = extractVideoTrack(localVideo); if (videoTrack && videoTrack.readyState == 'ended') { console.error("Video source error. Disconnect..."); stream.stop(); } else if (videoTrack) { videoTrack.onended = function (event) { console.error("Video source error. Disconnect..."); stream.stop(); }; } } |
...
Code Block | ||||
---|---|---|---|---|
| ||||
session.createStream({ name: streamName, display: localVideo, cacheLocalResources: true, receiveVideo: false, receiveAudio: false, videoContentHint: "detail" ... }).publish(); |
По умолчанию, В сборках WebSDK до 2.0.242 эта опция по умолчанию установлена в detail
и указывает браузеру удерживать разрешение, заданное в constraints при публикации. Однако, при публикации с некоторых веб камер, подключаемых по USB, браузер может в этом случае сбрасывать FPS. Если необходимо удерживать FPS, но разрешение публикации при этом не важно, необходимо установить опцию в motion
Code Block | ||||
---|---|---|---|---|
| ||||
session.createStream({ name: streamName, display: localVideo, cacheLocalResources: true, receiveVideo: false, receiveAudio: false, videoContentHint: "motion" ... }).publish(); |
Начиная со сборки 2.0.242, videoContentHint
установлена в motion
по умолчанию. Значения detail
или text
следует выбирать только при публикации экрана в браузере.
В сборке WebSDK 2.0.204 в пример Media Devices добавлен пример установки опции videoContentHint
...
Также можно использовать внешний или встроенный TURN сервер либо RTMP или RTSP для публикации потока.
Известные проблемы
1. Если веб-приложение расположено внутри iframe элемента, публикация видеопотока может не пройти.
Симптомы: ошибки IceServer error в консоли браузера.
Решение: вынести приложение из iframe на отдельную страницу.
2. Если публикация потока идет с Windows 10 или Windows 8 и в браузере Google Chrome включено аппаратное ускорение, могут быть проблемы с битрейтом.
Симптомы: качество видео плохое, мутное, битрейт в chrome://webrtc-internals показывает меньше 100 kbps.
Решение: отключите аппаратное ускорение в браузере, переключите браузер или сервер на использование кодека VP8.
3. Публикация потока с воспроизведением локального видео в Delight Player не работает в MS Edge
Симптомы: при публикации потока в MS Edge не запускается воспроизведение локального видео в Delight Player
Решение: использовать другой браузер для публикации
4. В некоторых случаях в браузере Chrome не работает микрофон при публикации WebRTC
Симптомы: не работает микрофон при публикации WebRTC, в том числе в примерах из комплекта поставки
...
Code Block | ||||
---|---|---|---|---|
| ||||
Flashphoner.init({
flashMediaProviderSwfLocation: '../../../../media-provider.swf',
createMicGainNode: false
}); |
При этом не будет работать регулировка усиления микрофона.
5. Кодек G722 не работает в браузере Edge
Симптомы: поток со звуком G722 не публикуется в браузере Edge
Решение: использовать другой кодек или другой браузер. В случае, если использование другого браузера невозможно, исключить кодек G722 при помощи настройки
Code Block | ||
---|---|---|
| ||
codecs_exclude_streaming=g722,telephone-event |
6. Некоторые браузеры, основанные на Chromium, например Opera, Yandex, в зависимости от версии и ОС не поддерживают кодек H264
Симптомы: не работает публикация, не работает воспроизведение частично (только звук) или полностью при трансляции WebRTC потока H264
Решение: разрешить поддержку vp8 на стороне сервера
Code Block | ||
---|---|---|
| ||
codecs=opus,...,h264,vp8,... |
исключить H264 для трансляции или воспроизведения на стороне клиента
Code Block | ||||
---|---|---|---|---|
| ||||
publishStream = session.createStream({
...
stripCodecs: "h264,H264"
}).on(STREAM_STATUS.PUBLISHING, function (publishStream) {
...
});
publishStream.publish(); |
Необходимо отметить, что при трансляции VP8 потока и воспроизведении его как H264 на сервере включается транскодинг.
7. iOS Safari 12.1 не отсылает видео при публикации определенных разрешений
Симптомы: при публикации WebRTC H264 потока из iOS Safari 12.1 зритель получает только аудиопакеты, в статистике WebRTC также отображаются только аудиопакеты
Решение: разрешить поддержку vp8 на стороне сервера
Code Block | ||
---|---|---|
| ||
codecs=opus,...,h264,vp8,... |
исключить H264 для трансляции или воспроизведения на стороне клиента
Code Block | ||||
---|---|---|---|---|
| ||||
publishStream = session.createStream({
...
stripCodecs: "h264,H264"
}).on(STREAM_STATUS.PUBLISHING, function (publishStream) {
...
});
publishStream.publish(); |
Необходимо отметить, что при трансляции H264 потока и воспроизведении его как VP8 на сервере включается транскодинг.
8. iOS Safari 12 и MacOS Safari 12 не публикует видеопоток со встроенной камеры в некоторых разрешениях
Симптомы: поток из браузера не публикуется, в консоли может быть ошибка
Code Block | ||
---|---|---|
| ||
Overconstrained error: width |
Решение:
a) использовать только разрешения, которые проходят тест WebRTC Camera Resolution
b) в MacOS Safari использовать внешнюю камеру, поддерживающую необходимые разрешения
c) отключить нормализацию разрешения и задавать ширину и высоту как ideal, см пример выше.
9. При публикации потока необходимо кодирование не-латинских символов в его имени
Симптомы: на стороне сервера при использовании не-латинских символов в имени потока эти символы заменяются на знаки вопроса
Решение: использовать функцию JavaScript encodeURIComponent() при публикации потока
...
language | js |
---|---|
theme | RDark |
...
Поддержка избыточности при публикации аудио
В сборке 5.2.1969 добавлена поддержка избыточности при публикации аудио данных (RED, RFC2198). Это позволяет снизить влияние потерь при публикации аудио в кодеке opus. Данная возможность включается при помощи настройки
Code Block | ||
---|---|---|
| ||
codecs=red,opus,alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,h264,vp8,flv,mpv |
Обратите внимание, что кодек red
должен быть указан перед кодеком opus
. В этом случае браузер, поддерживающий RED, будет отправлять избыточные данные в аудио пакетах. Отметим, что битрейт публикации аудио будет повышен.
Для тех случаев, когда RED не может быть применен, его следует исключить:
Code Block | ||
---|---|---|
| ||
codecs_exclude_sip=red,mpeg4-generic,flv,mpv
codecs_exclude_sip_rtmp=red,opus,g729,g722,mpeg4-generic,vp8,mpv |
Получение дополнительной информации о конфигурации клиента
В сборке WebSDK 2.0.246, поставляемой со сборкой WCS, начиная с 5.2.2015, добавлена передача на сервер дополнительной информации о конфигурации публикующего клиента. Эти данные могут помочь при диагностике и решении проблем с публикацией.
Данные передаются в REST хуках.
Информация о системе
Информация о системе и браузере передается в REST хуке /connect
Code Block | ||||
---|---|---|---|---|
| ||||
{
"nodeId" : "VuQnlozpitGdVKzoIZg3f2JmJdMldzPV@192.168.0.40",
"appKey" : "defaultApp",
"sessionId" : "/192.168.0.231:11641/192.168.0.40:8443-b7efee23-45ac-4591-9aec-37f896ef10f1",
...,
"clientInfo" : {
"architecture" : "x86",
"bitness" : "64",
"brands" : [ {
"brand" : "Not/A)Brand",
"version" : "8"
}, {
"brand" : "Chromium",
"version" : "126"
}, {
"brand" : "Google Chrome",
"version" : "126"
} ],
"fullVersionList" : [ {
"brand" : "Not/A)Brand",
"version" : "8.0.0.0"
}, {
"brand" : "Chromium",
"version" : "126.0.6478.127"
}, {
"brand" : "Google Chrome",
"version" : "126.0.6478.127"
} ],
"mobile" : false,
"model" : "",
"platform" : "Windows",
"platformVersion" : "10.0.0"
}
} |
Warning |
---|
Информация об архитектуре, версии операционной системы и полном номере сборки браузера доступна только в браузерах на основе Chromium |
Информация о системе и браузере доступна также в ответах на REST запросы /connection/find
и /connection/find_all
Информация о медиа устройствах клиента
Информация о медиа устройствах клиента передается в REST хуке /publishStream
Code Block | ||||
---|---|---|---|---|
| ||||
{ "nodeId" : "d2hxbqNPE04vGeZ51NPhDuId6k3hUrBB@192.168.0.39", "appKey" : "defaultApp", "sessionId" : "/192.168.0.83:42172/192.168.0.39:8443-325c8258-81a6-43de-8c74-1bf582fb436a", "mediaSessionId" : "bb237f90-39be-11ef-81b8-bda3bf19742b", "name" : "test", "published" : true, ..., "localMediaInfo" : { "devices" : { "video" : [ { "id" : "bc18c5c2510d338d7b2c26bce4e37967feea3172f54ba2077558775d51839419", cacheLocalResources: true"label" : "HD Webcam C615 (046d:082c)", receiveVideo"type" : false,"camera" }, { receiveAudio: false ... "id" }).publish(); |
10. В некоторых случаях сервер не может разобрать H264 поток, закодированный CABAC
Симптомы: не работает публикация при трансляции WebRTC потока H264
Решение:
a) понизить профиль кодирования
b) разрешить поддержку vp8 на стороне сервера
Code Block | ||
---|---|---|
| ||
codecs=opus,...,h264,vp8,... |
исключить H264 для трансляции или воспроизведения на стороне клиента
Code Block | ||||
---|---|---|---|---|
| ||||
publishStream = session.createStream({ ... stripCodecs: "h264,H264" }).on(STREAM_STATUS.PUBLISHING, function (publishStream): "1f78289ccdbf27d67d605a35d6288acbdefe257275d4b5403525fb5cb1e1822e", "label" : "HP HD Camera (0408:5347)", "type" : "camera" } ], "audio" : [ { ... }); publishStream.publish(); |
Необходимо отметить, что при трансляции VP8 потока и воспроизведении его как H264 и наоборот на сервере включается транскодинг.
11. В macOS Catalina при воспроизведении трансляции по WebRTC в Firefox выводится системное предупреждение и запрет на воспроизведение H264 потока.
Симптомы: при воспроизведении трансляции по WebRTC в Firefox на macOS Catalina выводится системное предупреждение "Приложение libgmpopenh264.dylib нельзя открыть, так как не удалось проверить разработчика" и запрет на воспроизведение трансляции H264 потока.
Решение: Firefox для работы с H264 использует стороннюю библиотеку, не подписанную разработчиком, которая по политикам безопасности macOS Catalina запрещается к выполнению. Для добавления исключения перейдите в System Preferences > Security & Privacy > General > Allow apps downloaded from > App Store and identified developers > "libgmpopenh264.dylib" was blocked from opening because it is not from an identified developer > выберите Open Anyway.
12. Начиная со сборки 5.2.672, настройка
Code Block | ||
---|---|---|
| ||
ice_keep_alive_enabled=true |
не применяется. Отсчет интервала ICE keep alive активируется автоматически, если WCS начинает первым высылать STUN keep alive пакеты, например, при входящем звонке или при публикации WebRTC потока на на другой сервер
13. MacOS Safari 14.0.2 (MacOS 11) не публикует поток со встроенной камеры MacBook с соотношением сторон 4:3
Симптомы: в примере Two Way Streaming, Stream Recording и других публикация начинается, но в течение 10 секунд прекращается отправка видео пакетов, при проигрывании потока виден черный экран, публикация завершается по отсутствию видео трафика
Решение:
...
"id" : "de988681c02901db0bfe012cd393eb2db5245fc2fb34709a26686ae6ca85b3ba",
"label" : "HD Webcam C615 Mono",
"type" : "mic"
}, {
"id" : "default",
"label" : "Default",
"type" : "mic"
}, {
"id" : "e7f4beddb0d71ea1f618cf3bab0f7e94053b622ddaf312c403824caa006f5889",
"label" : "Quantum 600 Mono",
"type" : "mic"
}, {
"id" : "fc6ac664dec546102d3f83b7fb5981afe3f0e88f8b76ffbe660ecfdd989bcf96",
"label" : "Family 17h (Models 10h-1fh) HD Audio Controller Analog Stereo",
"type" : "mic"
} ]
},
"tracks" : {
"video" : [ {
"trackId" : "1922f1d0-3a3f-4fa5-bd6e-e91ac84c666c",
"device" : "HD Webcam C615 (046d:082c)"
} ],
"audio" : [ {
"trackId" : "44187ea1-b756-4feb-80f0-ac57934c2200",
"device" : "MediaStreamAudioDestinationNode"
} ]
}
}
} |
Здесь:
- devices - список доступных браузеру медиа устройств
- tracks - с каких устройств захватываются видео и аудио дорожки в данном потоке
Информация о медиа устройствах доступна также в ответах на REST запросы /stream/find
и /stream/find_all
Известные проблемы
1. Если веб-приложение расположено внутри iframe элемента, публикация видеопотока может не пройти.
Симптомы: ошибки IceServer error в консоли браузера.
Решение: вынести приложение из iframe на отдельную страницу.
2. Если публикация потока идет с Windows 10 или Windows 8 и в браузере Google Chrome включено аппаратное ускорение, могут быть проблемы с битрейтом.
Симптомы: качество видео плохое, мутное, битрейт в chrome://webrtc-internals показывает меньше 100 kbps.
Решение: отключите аппаратное ускорение в браузере, переключите браузер или сервер на использование кодека VP8.
3. Публикация потока с воспроизведением локального видео в Delight Player не работает в MS Edge
Симптомы: при публикации потока в MS Edge не запускается воспроизведение локального видео в Delight Player
Решение: использовать другой браузер для публикации
4. В некоторых случаях в браузере Chrome не работает микрофон при публикации WebRTC
Симптомы: не работает микрофон при публикации WebRTC, в том числе в примерах из комплекта поставки
Решение: отключить создание gain node в Chrome при помощи параметра инициализации createMicGainNode:false
Code Block | ||||
---|---|---|---|---|
| ||||
Flashphoner.init({
flashMediaProviderSwfLocation: '../../../../media-provider.swf',
createMicGainNode: false
}); |
При этом не будет работать регулировка усиления микрофона.
5. Кодек G722 не работает в браузере Edge
Симптомы: поток со звуком G722 не публикуется в браузере Edge
Решение: использовать другой кодек или другой браузер. В случае, если использование другого браузера невозможно, исключить кодек G722 при помощи настройки
Code Block | ||
---|---|---|
| ||
codecs_exclude_streaming=g722,telephone-event |
6. Некоторые браузеры, основанные на Chromium, например Opera, Yandex, в зависимости от версии и ОС не поддерживают кодек H264
Симптомы: не работает публикация, не работает воспроизведение частично (только звук) или полностью при трансляции WebRTC потока H264
Решение: разрешить поддержку vp8 на стороне сервера
Code Block | ||
---|---|---|
| ||
codecs=opus,...,h264,vp8,... |
исключить H264 для трансляции или воспроизведения на стороне клиента
Code Block | ||||
---|---|---|---|---|
| ||||
publishStream = session.createStream({
...
stripCodecs: "h264,H264"
}).on(STREAM_STATUS.PUBLISHING, function (publishStream) {
...
});
publishStream.publish(); |
Необходимо отметить, что при трансляции VP8 потока и воспроизведении его как H264 на сервере включается транскодинг.
7. iOS Safari 12.1 не отсылает видео при публикации определенных разрешений
Симптомы: при публикации WebRTC H264 потока из iOS Safari 12.1 зритель получает только аудиопакеты, в статистике WebRTC также отображаются только аудиопакеты
Решение: разрешить поддержку vp8 на стороне сервера
Code Block | ||
---|---|---|
| ||
codecs=opus,...,h264,vp8,... |
исключить H264 для трансляции или воспроизведения на стороне клиента
Code Block | ||||
---|---|---|---|---|
| ||||
publishStream = session.createStream({
...
stripCodecs: "h264,H264"
}).on(STREAM_STATUS.PUBLISHING, function (publishStream) {
...
});
publishStream.publish(); |
Необходимо отметить, что при трансляции H264 потока и воспроизведении его как VP8 на сервере включается транскодинг.
8. iOS Safari 12 и MacOS Safari 12 не публикует видеопоток со встроенной камеры в некоторых разрешениях
Симптомы: поток из браузера не публикуется, в консоли может быть ошибка
Code Block | ||
---|---|---|
| ||
Overconstrained error: width |
Решение:
a) использовать только разрешения, которые проходят тест WebRTC Camera Resolution
b) в MacOS Safari использовать внешнюю камеру, поддерживающую необходимые разрешения
c) отключить нормализацию разрешения и задавать ширину и высоту как ideal, см пример выше.
9. При публикации потока необходимо кодирование не-латинских символов в его имени
Симптомы: на стороне сервера при использовании не-латинских символов в имени потока эти символы заменяются на знаки вопроса
Решение: использовать функцию JavaScript encodeURIComponent() при публикации потока
Code Block | ||||
---|---|---|---|---|
| ||||
var streamName = encodeURIComponent($('#publishStream').val());
session.createStream({
name: streamName,
display: localVideo,
cacheLocalResources: true,
receiveVideo: false,
receiveAudio: false
...
}).publish(); |
10. В некоторых случаях сервер не может разобрать H264 поток, закодированный CABAC
Симптомы: не работает публикация при трансляции WebRTC потока H264
Решение:
a) понизить профиль кодирования
b) разрешить поддержку vp8 на стороне сервера
Code Block | ||
---|---|---|
| ||
codecs=opus,...,h264,vp8,... |
исключить H264 для трансляции или воспроизведения на стороне клиента
Code Block | ||||
---|---|---|---|---|
| ||||
publishStream = session.createStream({ ... constraints: { video: { width: 640, height: 360 ... stripCodecs: "h264,H264" }, audio: true } }).on(STREAM_STATUS.PUBLISHING, function (publishStream) { ... }); publishStream.publish(); |
b) Обновить Web SDK до сборки 0.5.28.2753.153, где разрешение по умолчанию для Safari приведено к 16:9
c) Обновить MacOS до 11.3.1, Safari до 14.1 (16611.1.21.161.6)
14. При исключении профилей кодирования H264 потоки, опубликованные на Origin сервере в CDN, не играют на Edge
Симптомы: WebRTC поток H264, опубликованный на Origin, играет на Edge как аудио поток, в метриках отображается кодек VP8
Решение: при исключении профилей кодирования на Origin
Code Block | ||
---|---|---|
| ||
webrtc_sdp_h264_exclude_profiles=4d,64 |
указать на Edge разрешенные профили в настройке
Code Block | ||
---|---|---|
| ||
profiles=42e01f |
15. MacOS Safari 14.0.* после того, как видео заглушено, затем снова включено, перестает высылать видео пакеты из-за бага Webkit
Симптомы: после применения muteVideo(), затем unmuteVideo() публикация прекращается через минуту с ошибкой Failed by Video RTP activity
Решение: обновить MacOS до 11.3.1, Safari до 14.1 (16611.1.21.161.6), в данной сборке баг Webkit исправлен, проблема не воспроизводится
16. При публикации с телефона Google Pixel 3/3XL, в некоторых разрешениях изображение сильно искажено
Симптомы: локальное видео отображается нормально, но при проигрывании сильно искажено (поперечные полосы)
Решение: избегать публикации следующих разрешений с телефона Google Pixel 3/3XL:
- 160x120
- 1920x1080
17. iOS Safari 15.1 требует от сервера включенной поддержки ориентации изображения для публикации H264 потока
Симптомы: страница в iOS Safari 15.1 крашится при старте публикации потока (баги Webkit https://bugs.webkit.org/show_bug.cgi?id=232381 и https://bugs.webkit.org/show_bug.cgi?id=231505)
Решение:
a) включить поддержку ориентации изображения на стороне клиента для iOS Safari
Code Block | ||||
---|---|---|---|---|
| ||||
session.createStream({
name: streamName,
...
cvoExtension: true
}).publish(); |
и в сборках сервера до 5.2.1074 отключить поддержку RTP bundle
Code Block | ||
---|---|---|
| ||
rtp_bundle=false |
Начиная со сборки 5.2.1074 поддержку RTP bundle отключать не требуется
b) использовать VP8 для публикации
Code Block | ||||
---|---|---|---|---|
| ||||
session.createStream({
name: streamName,
...
stripCodecs: "H264"
}).publish(); |
18. В Safari 16 переключение в полноэкранный режим работает только в случае, если для HTML5 видео элемента включены стандартные элементы управления
Симптомы: при переключении в полноэкранный режим видео не отображается, аудио продолжает играть, при нескольких переключениях подряд страница может зависнуть
...
).on(STREAM_STATUS.PUBLISHING, function (publishStream) {
...
});
publishStream.publish(); |
Необходимо отметить, что при трансляции VP8 потока и воспроизведении его как H264 и наоборот на сервере включается транскодинг.
11. В macOS Catalina при воспроизведении трансляции по WebRTC в Firefox выводится системное предупреждение и запрет на воспроизведение H264 потока.
Симптомы: при воспроизведении трансляции по WebRTC в Firefox на macOS Catalina выводится системное предупреждение "Приложение libgmpopenh264.dylib нельзя открыть, так как не удалось проверить разработчика" и запрет на воспроизведение трансляции H264 потока.
Решение: Firefox для работы с H264 использует стороннюю библиотеку, не подписанную разработчиком, которая по политикам безопасности macOS Catalina запрещается к выполнению. Для добавления исключения перейдите в System Preferences > Security & Privacy > General > Allow apps downloaded from > App Store and identified developers > "libgmpopenh264.dylib" was blocked from opening because it is not from an identified developer > выберите Open Anyway.
12. Начиная со сборки 5.2.672, настройка
Code Block | ||
---|---|---|
| ||
ice_keep_alive_enabled=true |
не применяется. Отсчет интервала ICE keep alive активируется автоматически, если WCS начинает первым высылать STUN keep alive пакеты, например, при входящем звонке или при публикации WebRTC потока на на другой сервер
13. MacOS Safari 14.0.2 (MacOS 11) не публикует поток со встроенной камеры MacBook с соотношением сторон 4:3
Симптомы: в примере Two Way Streaming, Stream Recording и других публикация начинается, но в течение 10 секунд прекращается отправка видео пакетов, при проигрывании потока виден черный экран, публикация завершается по отсутствию видео трафика
Решение:
a) Публиковать поток с соотношением сторон 16:9 (например, 320x180, 640x360 и т.д.)
Code Block | ||||
---|---|---|---|---|
| ||||
publishStream = session.createStream({
...
constraints: {
video: {
width: 640,
height: 360
},
audio: true
}
}).on(STREAM_STATUS.PUBLISHING, function (publishStream) {
...
});
publishStream.publish(); |
b) Обновить Web SDK до сборки 0.5.28.2753.153, где разрешение по умолчанию для Safari приведено к 16:9
c) Обновить MacOS до 11.3.1, Safari до 14.1 (16611.1.21.161.6)
14. При исключении профилей кодирования H264 потоки, опубликованные на Origin сервере в CDN, не играют на Edge
Симптомы: WebRTC поток H264, опубликованный на Origin, играет на Edge как аудио поток, в метриках отображается кодек VP8
Решение: при исключении профилей кодирования на Origin
Code Block | ||
---|---|---|
| ||
webrtc_sdp_h264_exclude_profiles=4d,64 |
указать на Edge разрешенные профили в настройке
Code Block | ||
---|---|---|
| ||
profiles=42e01f |
15. MacOS Safari 14.0.* после того, как видео заглушено, затем снова включено, перестает высылать видео пакеты из-за бага Webkit
Симптомы: после применения muteVideo(), затем unmuteVideo() публикация прекращается через минуту с ошибкой Failed by Video RTP activity
Решение: обновить MacOS до 11.3.1, Safari до 14.1 (16611.1.21.161.6), в данной сборке баг Webkit исправлен, проблема не воспроизводится
16. При публикации с телефона Google Pixel 3/3XL, в некоторых разрешениях изображение сильно искажено
Симптомы: локальное видео отображается нормально, но при проигрывании сильно искажено (поперечные полосы)
Решение: избегать публикации следующих разрешений с телефона Google Pixel 3/3XL:
- 160x120
- 1920x1080
17. iOS Safari 15.1 требует от сервера включенной поддержки ориентации изображения для публикации H264 потока
Симптомы: страница в iOS Safari 15.1 крашится при старте публикации потока (баги Webkit https://bugs.webkit.org/show_bug.cgi?id=232381 и https://bugs.webkit.org/show_bug.cgi?id=231505)
Решение:
a) включить поддержку ориентации изображения на стороне клиента для iOS Safari
Code Block | ||||
---|---|---|---|---|
| ||||
function playStream(session) session.createStream({ varname: streamName, = $('#streamName').val(); ... var options = cvoExtension: true }).publish(); |
и в сборках сервера до 5.2.1074 отключить поддержку RTP bundle
Code Block | ||
---|---|---|
| ||
rtp_bundle=false |
Начиная со сборки 5.2.1074 поддержку RTP bundle отключать не требуется
b) использовать VP8 для публикации
Code Block | ||||
---|---|---|---|---|
| ||||
session.createStream({ name: streamName, display: remoteVideo, useControls: true }; ... stream = session.createStream(options).on(STREAM_STATUS.PENDING, function (stream) { ... }); stream.play(); }stripCodecs: "H264" }).publish(); |