Описание
При публикации WebRTC потока с мобильного устройства, ориентация устройства может быть изменена. Устройства на базе Android при этом самостоятельно поворачивают изображение, а устройства на базе iOS передают признак ориентации картинки в потоке
Значение признака | Угол поворота в градусах |
0 | 0 |
1 | 90 |
2 | 180 |
3 | 270 |
Изображение поворачивается по часовой стрелке.
Публикация WebRTC потока с признаком ориентации картинки
Для публикации WebRTC потока с признаком ориентации картинки необходимо передать параметр cvoExtension
в функцию createStream()
session.createStream({ name: streamName, ... cvoExtension: true }).publish();
Воспроизведение потока с признаком ориентации картинки как RTMP
Для воспроизведения потока с признаком ориентации картинки как RTMP требуется поддержка со стороны плеера. Так, в пример Flash Streaming необходимо добавить следующий код:
public function onMetaData(info:Object):void { Logger.info("Video orientation " + info.orientation); revertVideoFarEndPos(); if (info.orientation == 0) { videoFarEnd.rotation = 0; } else if (info.orientation == 1) { videoFarEnd.rotation = 90; videoFarEnd.x = videoFarEnd.x + videoFarEnd.width; } else if (info.orientation == 2) { videoFarEnd.rotation = 180; videoFarEnd.x = videoFarEnd.x + videoFarEnd.width; videoFarEnd.y = videoFarEnd.y + videoFarEnd.height; } else if (info.orientation == 3) { videoFarEnd.rotation = 270; videoFarEnd.y = videoFarEnd.y + videoFarEnd.height; } videoFarEndOrientation = info.orientation; } public function revertVideoFarEndPos():void { if (videoFarEndOrientation == 1) { videoFarEnd.x = videoFarEnd.x - videoFarEnd.width; } else if (videoFarEndOrientation == 2) { videoFarEnd.x = videoFarEnd.x - videoFarEnd.width; videoFarEnd.y = videoFarEnd.y - videoFarEnd.height; } else if (videoFarEndOrientation == 3) { videoFarEnd.y = videoFarEnd.y - videoFarEnd.height; } }
При использовании транскодинга, например, при публикации потока VP8+opus, для того чтобы плеер получил признак ориентации транскодированного потока, необходимо в файле flashphoner.properties установить следующую настройку
video_filter_enable_rotate=true
При использовании CDN, эту настройку необходимо установить на всех серверах CDN, с которых предполагается воспроизведение RTMP потока.
Особенности трансляции с мобильных устройств
Если разрешен поворот экрана мобильного устройства, то при повороте устройства будет меняться соотношение сторон картинки от портретного к ландшафтному и наоборот.
Если поворот экрана устройства запрещен (например, установлен переключатель Lock Portrait Orientation), то при повороте устройства соотношение сторон остается тем, же, что и в начале публикации, но картинка поворачивается в соответствии с ориентацией устройства.
Известные проблемы
1. iOS Safari не высылает ориентацию картинки при повороте на 180 градусов (устройство вверх ногами)
2. Safari в iOS 12 перестает высылать видео пакеты при повороте направо на 90 градусов (из портретной в ландшафтную ориентацию)
3. При публикации с Android устройств соотношение сторон картинки меняется при повороте независимо от значения параметра cvoExtension