Stream replace

Alex_b

New Member
Иногда возникает потребность при вещании, без обрыва коннекта, переключить разрешение камеры или сменить камеру.

Сейчас приходится останавливать текущее соединение (unpublishStream), ждать пока оно завершится и запускать новое (publishStream) , при этом по сути меняется только sdp, а название стрима и сессия остается прежняя.
Если возможность, на лету менять стрим без создания нового коннекта?
 

Max

Administrator
Staff member
В Web SDK сейчас не поддерживается смена камеры и разрешения на активном стриме.
В мобильных SDK для Android и iOS можно переключать камеру между фронтальной и задней.
 

Alex_b

New Member
А если без использования Web SDK?
Имеется ввиду используя на прямую api.
 

Max

Administrator
Staff member
Web SDK это и есть API (JavaScript) для работы с WCS сервером. И там функций смены камеры и разрешения на лету пока нет.

Web SDK (API) имеет открытый код:
https://github.com/flashphoner/flashphoner_client/tree/wcs_api-2.0

Здесь инструкция по сборке Web SDK из исходников:
https://forum.flashphoner.com/attachments/build_flashphoner_client-en-pdf.545/

Т.е. внутри кода webrtc-media-provider.js можно попробовать поменять например камеру на лету и посмотреть что из этого получится.
 

R2D2

Member
Как в Android сменить камеру и изменить ее параметры (не стрима)?
 

Max

Administrator
Staff member
Добрый день.
Пример переключения камеры приведен в коде приложения Media Devices. Непосредственно для переключения используется метод Stream.switchCamera(), используется он примерно так (код на GitHub):
Code:
        mSwitchCameraButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                if (publishStream != null) {
                    mSwitchCameraButton.setEnabled(false);
                    publishStream.switchCamera(new CameraSwitchHandler() {
                        @Override
                        public void onCameraSwitchDone(boolean var1) {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    mSwitchCameraButton.setEnabled(true);
                                }
                            });

                        }

                        @Override
                        public void onCameraSwitchError(String var1) {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    mSwitchCameraButton.setEnabled(true);
                                }
                            });
                        }
                    });
                }
            }

        });
 

R2D2

Member
Еще подскажите, у нас большая задержка между видеокамерой на мобильном устройстве и публикуемом видеопотоке, как уменьшить эту задержку???
 

Max

Administrator
Staff member
Для уменьшения задержки при воспроизведении публикуемого потока необходимо уменьшить интервал посылки ключевых кадров (GOP interval). Если Вы публикуете WebRTC поток (при использовании Android SDK это так), для управления этим интервалом необходимо выставить на сервере настройку
Code:
periodic_fir_request=true
periodic_fir_request_interval=1000
В данном случае сервер будет периодически запрашивать ключевой кадр один раз в секунду.
Отметим, что чем чаще посылаются ключевые кадры, тем больше должна быть полоса пропускания канала связи.
 

R2D2

Member
Спасибо - не помогло, все равно задержка достигает 2-3 сек. что eще может быть? Могу послать файл настроек
 

Max

Administrator
Staff member
Опишите как именно тестируете.
Воспроизводится ли это со стандартными приложениями?
Например так:
1. Публикуем поток из приложения Two Way Streaming
https://play.google.com/store/apps/details?id=com.flashphoner.wcsexample.two_way_streaming
2. Играем в браузере Chrome 70
https://demo.flashphoner.com/client...ming/two_way_streaming/two_way_streaming.html
В результате имеем задержку 2-3 секунды.
 

R2D2

Member
Добрый день. специально воспроизвел задержку на стандартном приложение для Android (Streaming-min)
Делал Publish с камеры телефона приложением, и воспроизведение видеопотока приложением. Если надо то могу послать на почту адрес сервера.
После публикации потока - сначала задержки нет, но со временем задержка начинает накапливаться.
через 15 секунд - задержка составляет около 1 сек.
через 30 сек - 2 - 2,5 секунды
причем, если прекратить отображение потока, не заканчивая его публикацию (нажать на кнопку play в приложение). То задержка исчезает, и накопление начинается с начала.
Видимо проблема не в публикации потока, а в кэширование данных потока устройством(Android) и видимо скорость воспроизведения устройством чуть не совпадает со скоростью потока - отсюда и накопления данных. Как то надо либо увеличить скорость воспроизведения, либо уменьшить размер буфера потока.....
Как это сделать в Android?
Сделаю еще опыт - опубликую поток мобильным устройством, а просмотрю его в браузере
 

R2D2

Member
Зашел в админку - вообще ерунда. Статистика перестала работать. Последний раз показывает публикацию 6.10.2018. В этот день мы сделали обновление WCS - и тогда у нас все перестало работать (слетела привязка к нашей app). Кроме того, не работает не только статистика в админке, но я не вижу данных(имя публикуемого потока) в реал-тайме админки(хотя поток опубликован).
 

Max

Administrator
Staff member
Добрый день.
В последних версиях по умолчанию отключено взаимодействие между ядром и административным модулем WCS настройкой
Code:
disable_manager_rmi=true
Это связано с тем, что проводится постепенный перенос функций административного модуля в ядро, на данный момент в менеджере остался веб-интерфейс, управление лицензиями и сертификатами и отображение статистики.
При следующем обновлении мажорной версии все, кроме статистики, будет перенесено в ядро. а сам менеджер будет полностью переработан.
Если Вы пользуетесь статистикой в настоящее время, Вам необходимо установить настройку
Code:
disable_manager_rmi=false
что Вы и сделали.
По этой же причине Вам, вероятно, пришлось добавлять заново REST hook приложение и его методы, поскольку изменилось место их хранения, скрипт обновления пытается переносить данные, но не может охватить все случаи. С другой стороны, в последних версиях Вы можете добавлять REST app методы как через командную строку ядра, так и непосредственно редактируя файл WCS_HOME/conf/database.yml и перезапуская сервер.
Сделаю еще опыт - опубликую поток мобильным устройством, а просмотрю его в браузере
Воспроизводится ли задержка в этом случае?
 

R2D2

Member
Воспроизводится ли задержка в этом случае?
У меня не получается воспроизвести на бараузере - т.к не получается скопировать название потока в буфер из реал-тайм статистики. Разработчики что то поправили и выделение сбрасывается....

Думаю что задержки на Браузере не будет, похоже что проблема с кэшированием стрима в Android. Как эту проблему решить я не знаю, в Ваших описаниях я тоже не нашел.... может что то подскажите?
 

Max

Administrator
Staff member
не получается скопировать название потока в буфер из реал-тайм статистики
Если Вы воспроизводите задержку в стандартном приложении Streaming-min, там имя потока задается руками, и ниоткуда его копировать не нужно, достаточно в приложении задать простое имя вроде "123".
 

R2D2

Member
Да спасибо.
Сделал эксперимент.
Поток опубликовал в стандартном приложение и и воспроизвел поток сразу двумя способами:
1. Воспроизводил стандартным приложением
2. На компьютере на VLC.
Результат странный, задержки есть везде - и на VLC(компьютер -2-3сек), в стандартом приложении(1,5-2,5сек). Все картинки двигаются не синхронно.....
 

Max

Administrator
Staff member
Мы попытались воспроизвести задержки, используя для публикации приложение Streaming-min (доступно на Google Play) на телефоне под управлением Android 7.1.2 и версию сервера 5.1.3624 с настройками кодеков по умолчанию. Результаты следующие:
1. Поток публикуется в приложении как H264/opus
2. При воспроизведении в приложении задержки не зафиксировано
3. При воспроизведении в браузере Chrome 70 в примере Player (играем как H264/opus без транскодинга) задержки не зафиксировано
4. При воспроизведении в VLC как RTSP (H264/PCMA, транскодинг) задержка составила порядка 1 с.
Итого: описанные Вами задержки при публикации потока не воспроизводятся. Возможно, дело в конкретном устройстве, на котором Вы проводите тест.
 
Top