Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Для того, чтобы повернуть изображение на указанный угол, клиент должен прислать серверу RTMP-метаданные с полем 'orientation'. Поле может принимать следующие значения:

Значение поля

Угол поворота в градусах

0

0

1

90

2

180

3

270

Изображение поворачивается по часовой стрелке.

...

Тестирование

1. Для теста используем:

  • WCS сервер с включенной поддержкой поворота изображения по метаданным
  • Приложение Flash Streaming для публикации и вращения изображения
  • Приложение Player для воспроизведения потока

2. Откройте приложение Flash Streaming. Введите имя потока test, укажите желаемые параметры публикации потока

...

Code Block
languageactionscript3
themeRDark
 			private function rotate(degree:Number):void {
			    var metaDataObj:Object = new Object();
			    switch(degree) {
                    case 0:
                        Logger.info("rotate camera to 0");
                        metaDataObj.orientation = 0;
                        break;
                    case 90:
                        Logger.info("rotate camera to 90");
                        metaDataObj.orientation = 1;
                        break;
                    case 180:
                        Logger.info("rotate camera to 180");
                        metaDataObj.orientation = 2;
                        break;
                    case 270:
                        Logger.info("rotate camera to 270");
                        metaDataObj.orientation = 3;
                        break;
                    default:
                        metaDataObj.orientation = 0;
                        break;
			    }
			    sendMetaData(metaDataObj); } 
			}

			private function sendMetaData(data:Object):void{
			    if (publishStream != null) {
			        publishStream.send("@setDataFrame", "onMetaData", data);
			    }
			} }

Обратите внимание, что отправляется не угол, а соответствующее значение поля orientation.

Поворот изображения потока, опубликованного при помощи ffmpeg

RTMP кодировщик ffmpeg дает возможность отправить метаданные ориентации изображения серверу при помощи ключей командной строки:

Code Block
languagebash
themeRDark
ffmpeg -i input.mp4 -metadata:s:v rotate=90 -vcodec copy -acodec copy -strict -2 -f flv rtmp://test1.flashphoner.com:1935/live/stream_ffmpeg

Отметим, что настройка поворота для ffmpeg указывается в градусах, при этом на сервер передается соответствующее значение поля orientation.

Известные проблемы

Excerpt Include
С другого сервера по RTMP
С другого сервера по RTMP
nopaneltrue

...

Решение: установить в параметрах кодировщика GOP равный или кратный частоте кадров публикуемого файла. Например, если публикуется файл с fps 25, необходимо указать GOP 50.

       private function rotate(degree:Number):void {

           var metaDataObj:Object = new Object();

           switch(degree) {

               case 0:

                   Logger.info("rotate camera to 0");

                   metaDataObj.orientation = 0;

                   break;

               case 90:

                   Logger.info("rotate camera to 90");

                   metaDataObj.orientation = 1;

                   break;

               case 180:

                   Logger.info("rotate camera to 180");

                   metaDataObj.orientation = 2;

                   break;

               case 270:

                   Logger.info("rotate camera to 270");

                   metaDataObj.orientation = 3;

                   break;

               default:

                   metaDataObj.orientation = 0;

                   break;

           }

           sendMetaData(metaDataObj);

       }

       private function sendMetaData(data:Object):void{

           if (publishStream != null) {

               publishStream.send("@setDataFrame", "onMetaData", data);

           }

...