MacOS Safari: в некоторых устройствах не работает трансляция камеры

inpost

Member
Здравствуйте.
Проблема в следующем, при попытке включить камеру пользователь получает ошибку: invalid constraint
Замечу, эту ошибку я ранее уже пытался побороть, какая-то версия она якобы исправила проблему, но, оказалось, часть пользователей всё равно эту ошибку хватают, при этом другие пользователи с Мака говорят, что у них работает!
Ошибку получают в: MacBook Pro (15-inch, Late 2011), macOS High Sierra 10.13.6 (17G8030), Safari Версия 13.0.5 (13608.5.12)


Code:
        Flashphoner.init({
            flashMediaProviderSwfLocation: '/skins/components/flashphoner-0.5.28.2753.133/media-provider.swf',
            receiverLocation: '/skins/components/flashphoner-0.5.28.2753.133/examples/demo/dependencies/websocket-player/WSReceiver2.js',
            decoderLocation: '/skins/components/flashphoner-0.5.28.2753.133/examples/demo/dependencies/websocket-player/video-worker2.js'
        });
Code:
session.createStream({
        name: streamName,
        display: localVideo,
        cacheLocalResources: true,
        constraints: {
            audio: false,
            video: {
                width: 640,
                height: 480,
                minBitrate: 600,
                maxBitrate: 1200
            }
        },
        record: recordStream
})
 

inpost

Member
С этого же устройства пробовали запустить на demo, та же ошибка.
 

Max

Administrator
Staff member
Добрый день.
Попробуйте отключить нормализацию ограничений и выставить разрешение как ideal, как описано здесь
Code:
session.createStream({
 name: streamName,
 display: localVideo,
 cacheLocalResources: true,
 disableConstraintsNormalization: true,
 constraints: {
  audio: false,
  video: {
    width: {ideal: 640},
    height: {ideal: 480},
    minBitrate: 600,
    maxBitrate: 1200
  }
 },
 record: recordStream
})
 

inpost

Member
Добрый день.
Этот фикс сократил число проблем, да, но появилась новая. Теперь, все трансляции публикуются не как я указываю в ideal, а абсолютно все 320:240, то есть в очень низком разрешении. Можно ли поднять до 640х480 ?
 

Max

Administrator
Staff member
Добрый день.
Этот фикс сократил число проблем, да, но появилась новая. Теперь, все трансляции публикуются не как я указываю в ideal, а абсолютно все 320:240, то есть в очень низком разрешении. Можно ли поднять до 640х480 ?
Очевидно, нельзя. Когда Вы прописываете модификатор ideal, браузер это понимает как "проставить указанное разрешение, если камера его поддерживает". Если браузер не может выставить такое разрешение трансляции, следовательно, камера его не поддерживает. Именно поэтому, скорее всего, публикация и не работала с настройками по умолчанию.
Решить это можно только сменой оборудования.
Попробуйте провести тест WebRTC Camera Resolution, он должен показать доступные разрешения.
 

inpost

Member
Тогда у меня 2 вопроса:
1. Как всё же правильно определять, чтобы можно было задать корректный, а не минимальный для абсолютно всех транслций.
2. Что тут не так? Вот скан показывает по поводу моей камеры и тут есть поддержка 640х480, у меня Logitech HD Pro Webcam C920:


 

Max

Administrator
Staff member
Нормализация констрейнтов работает только в Safari, а Вы тестируете камеру в Chrome
Уточните. в каком именно из браузеров проявляется проблема?
 

inpost

Member
Ошибка была только в Safari, я параметры применил для всех пользователей и теперь у всех Ideal прописан, а не фиксированный размер. Теперь у всех пользователей во всех браузерах передаётся Ideal. И теперь я смотрю, у всех ставится 320х240, включая меня. Поэтому и пишу сюда, что теперь у всех такая проблема, не берётся 640х480 в Google Chrome Win10
 

Max

Administrator
Staff member
Ошибка была только в Safari
Если ошибка была только в Safari, то и применять параметры нужно только для Safari
Code:
if (Browser.isSafariWebRTC()
{
 var options = {
  name: streamName,
   display: localVideo,
   cacheLocalResources: true,
   disableConstraintsNormalization: true,
   constraints: {
    audio: false,
    video: {
      width: {ideal: 640},
      height: {ideal: 480},
      minBitrate: 600,
      maxBitrate: 1200
    }
   },
   record: recordStream
 }
}
 

inpost

Member
Я смотрю ваш код и не могу понять этот участок:



То есть isNaN({ideal : 640}) возвращает ВСЕГДА true; Проверил в консоли:


То есть, если я правильно понял, то у вас в этой строчке ошибка и всегда, когда я передаю ideal, он игнорируется и перезатирается на значения по умолчанию в 320 и 240.
 

Max

Administrator
Staff member
То есть, если я правильно понял, то у вас в этой строчке ошибка и всегда, когда я передаю ideal, он игнорируется и перезатирается на значения по умолчанию в 320 и 240.
Это не ошибка. ideal имеет смысл передавать только для Safari, при условии отключенной нормализации. То есть:
- если браузер == Safari, отключаете нормализацию и проставляете ideal
- если браузер == другой браузер, не трогаете нормализацию и проставляете разрешение, какое нужно, без модификатора ideal
 
Top