Versions Compared

Key

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

...

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

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

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

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

...

Обратите внимание, что отправляется не угол, а соответствующее значение поля 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);

           }

...