...
В этом случае звук будет кодироваться в PCMA (alaw) с частотой дискретизации 8 кГц.
Собственный
...
lossless видеопроцессор для входящих потоков
Для обработки входящих потоков микшера, например, если необходима дополнительная буферизация или синхронизация аудио и видео дорожек, может быть использован собственный losless lossless видеопроцессор. Этот видеопроцессор включается настройкой в файле flashphoner.properties
...
Необходимо отметить, что использование losless lossless видеопроцессора может вносить задержку в трансляции в реальном времени.
При использовании losless lossless видеопроцессора, чтобы освободить ресурсы, занятые микшером, нужно принудительно остановить микшер при помощи REST запроса /mixer/terminate, либо остановить все входящие в микшер потоки, в этом случае микшер остановится по истечении времени, заданного в миллисекундах настройкой
Code Block | ||
---|---|---|
| ||
mixer_activity_timeridle_timeout=60000 |
По умолчанию, при отсутствии входящих потоков, микшер останавливается через 60 секунд.
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
package com.flashphoner.mixerlayout; import com.flashphoner.sdk.media.mixer.video.presentation.BoxIVideoMixerLayout; import com.flashphoner.sdk.media.mixer.video.presentation.BoxPositionYUVFrame; import comjava.flashphoner.media.mixer.video.presentation.VideoLayoutawt.*; import comjava.flashphoner.sdk.media.IVideoMixerLayout; import com.flashphoner.sdk.media.YUVFrame; import java.util.ArrayList; public class TestLayout extends VideoLayoututil.ArrayList; public class TestLayout implements IVideoMixerLayout { private static final int PADDING = 5; @Override public Layout[] computecomputeLayout(YUVFrame[] frames yuvFrames, String[] strings, int canvasWidth, int canvasHeight) { ArrayList<IVideoMixerLayout.Layout> return computeGrid(frames, canvasWidth, canvasHeightlayout = new ArrayList<>(); } private IVideoMixerLayout.Layout[] computeGrid(YUVFrame[] frames, int canvasWidth, int canvasHeightfor (int c = 0; c < yuvFrames.length; c++) { Box mainBox Point prevPoint = new Box(null, canvasWidth, canvasHeightPoint(); for (int i = 0; i < frames.length; i++) { Dimension prevDimension = new Dimension(canvasWidth, canvasHeight); if (layout.size() > 0) { prevPoint.setLocation(layout.get(c-1).getPoint()); prevDimension.setSize(layout.get(c-1).getDimension()); } BoxPoint frameBoxcurrentPoint = new Box(mainBox, canvasWidth/frames.length, canvasHeight/frames.length); Point((int) (prevPoint.getX()+prevDimension.getWidth()+PADDING), frameBox.setPosition(BoxPosition.INLINE_HORIZONTAL_CENTER); frameBox.setPaddingLeft(PADDING); frameBox.setPaddingRight(PADDING(int)(prevPoint.getY()+prevDimension.getHeight())); Box frame = new Box(frameBox, frames[i]); layout.add(new IVideoMixerLayout.Layout(currentPoint, new Dimension(canvasWidth/yuvFrames.length, frame.setPosition(BoxPosition.INLINE_HORIZONTAL); frame.fillParent(); } ArrayList<IVideoMixerLayout.Layout> layout = new ArrayList<>( canvasHeight/yuvFrames.length), yuvFrames[c])); mainBox.computeLayout(layout);} return layout.toArray(new IVideoMixerLayout.Layout[layout.size()]); } } |
Затем следует скомпилировать класс в байт-код. Для этого создаем дерево каталогов, соответствующее названию пакета написанного класса (com/flashphoner/mixerlayout)
Code Block | ||||
---|---|---|---|---|
| ||||
mkdir -p com/flashphoner/mixerlayout |
...