Проблема с разрешением на ios

Nikita_

New Member
добрый день! Наблюдается проблема с разрешением на ios устройствах, при публикации потока устанавливаем разрешение 640x360
JavaScript:
this.myStream = await room
          .publish({
            name: encodeURIComponent(this.localOrator.name),
            display: display,
            disableConstraintsNormalization: true,
            transport: 'UDP',
            constraints: {
              audio: true,     
              video: {
                 aspectRatio: { ideal: 0.5625 },
                 bitrate: 450000,
                 deviceId,
                 height: { ideal: 640 },
                 width: { ideal: 360 }
               }
            },
            record: false,
            receiveVideo: false,
            receiveAudio: false,
            sdpHook: this.sdpHook,
          })
При воспроизведении потока ширина и высота почему-то поменяны местами
JavaScript:
.on(STREAM_STATUS.PLAYING, (stream) => {
    stream.videoResolution() } // height: 360, width: 640
при событии resize тоже наблюдаем не корректные высоту и ширину
JavaScript:
{
    "mediaSessionId": "04ef4300-e909-11ed-9110-dd1386b940c3",
    "type": "resize",
    "payload": {
        "streamerVideoWidth": 640,
        "streamerVideoHeight": 360
    }
}
на андройдах и ПК все норм, проблема только на ios в сафари и хроме
Подскажите, пожалуйста, в чем может быть проблема?
 

Max

Administrator
Staff member
Добрый день.
При воспроизведении потока ширина и высота почему-то поменяны местами
Проверьте, воспроизводится ли проблема в примере Media Devices (исходный код) в последней сборке Web SDK 2.0.228. Если проблема не воспроизводится, модифицируйте код примера минимально таким образом, чтобы проблема воспроизводилась, и пришлите, используя эту форму.
Возможно, проблема в этом:
aspectRatio: { ideal: 0.5625 },
Уберите этот констрейнт и проверьте свой пример. Обычно, браузер определяет аспект по заданному разрешению, поэтому явное указание аспекта выглядит лишним
проблема только на ios в сафари и хроме
Фактически, все браузеры на iOS - это движок Safari, другое напрямую запрещается политиками Apple.
Также обращаем Ваше внимание, что вопросы на русском языке следует задавать в русскоязычном разделе форума.
 

Nikita_

New Member
Спасибо за ответ
В примере Media Devices проблема не воспроизводится, пытался модифицировать код чтоб воспроизвести - не получилось
AspectRatio убрал - ситуация не изменилась

в проекте мы используем @flashphoner/websdk/src/room-module, может ли проблема заключаться в этом?
 

Max

Administrator
Staff member
в проекте мы используем @flashphoner/websdk/src/room-module, может ли проблема заключаться в этом?
Room Api дает только дополнительный сигналинг для комнаты, за публикацию в Room Api примерах и других примерах отвечают одни и те же модули.
Мы воспроизвели проблему, в том числе и в Media Devices, и выглядит так, что это проблема браузера именно на iOS. Мы передаем браузеру нужные констрейнты, а дальше он кодирует видеопоток сам. Если сделать так:
Code:
constraints: {
        audio: true,
        video: {
            minBitrate: 400000,
            maxBitrate: 450000
            height: { ideal: 360 },
            width: { ideal: 640 }
       }
то изображение из Safari и других браузеров на iOS будет публиковаться как 360x640 (аспект 9:16)
Обратите внимание, что границы битрейта необходимо задавать значениями minBitrate, maxBitrate.
В WebSDK есть вспомогательные методы для детекта операционной системы и браузера:
Code:
let Flashphoner = RoomApi.sdk;
let Browser = Flashphoner.Browser;
let constraints = {
      audio: true,
      video: {
            deviceId,
            minBitrate: 400000,
            maxBitrate: 450000
      }
}
if (Browser.isSafariWebRTC() && Browser.isiOS()) {
     constraints.height = { ideal: 360 };
     constraints.width = { ideal: 640 };
} else {
     constraints.height = { ideal: 640 };
     constraints.width = { ideal: 360 };
}
this.myStream = await room.publish({
     ...
});
 
Top