При подключении наушников к устройству, звук идет через динамики устройства

R2D2

Member
Если появляется событие onDisconnection(Connection connection),
то через 1 секунду создается новый session = Flashphoner.createSession(sessionOptions);
но если событие не приходит, то используем старый.

Еще вопрос, если создается новая сессия session = Flashphoner.createSession(sessionOptions); , а соединения нет, то чему будет равна session и будет событие onDisconnect????
Возможно, после пропадения связи приложение пытается соединится с сервером - и если не удачно(а мы не знаем удачно или не удачно),то сессия не открывается и соответственно событие onDisconnect не приходит...и обмен встает.

Как по session определить произошло соединение приложения с сервером wcs или нет? session=null или нет?
И как лучше при разрыве соединения - пересоздавать session ( как мы сейчас делаем ) или использовать созданную при запуске?
 
Last edited:

R2D2

Member
Еще вопрос: даже при закрытом приложение - мы видим в логах Androida
D/WebSocketChannelClient: WSS->C: {"message":"ping","data":[]}
Я так понимаю это WCS инициализирует ping? как можно увеличить время между ping или даже отказаться от этого прощупывания соединения?(в целях экономии аккумулятора)
 

Max

Administrator
Staff member
потому что там работает только WCS и нет дополнительной серверной обвязки работающей с WCS по REST (взаимодействующей с приложением через WCS )
Неверно: RoomApi - это надстройка как раз над такой обвязкой, сделанная для удобства использования в конкретном кейсе. Весь сигналинг в RoomApi сделан на OnDataEvent.
В любом случае, нам необходимо воспроизведение проблемы либо в примере из коробки, либо на кастомном коде. В примерах из коробки проблема в наших тестах не воспроизводится, поэтому просим предоставить кастомный код.
 

Max

Administrator
Staff member
Еще вопрос: даже при закрытом приложение - мы видим в логах Androida
D/WebSocketChannelClient: WSS->C: {"message":"ping","data":[]}
При закрытом приложении такого быть не должно - пинги ходят только, пока сессия активна. Значит, приложение не закрыто.
Если под закрыто подразумевается свернуто, и Вы не хотите держать сессию в это время, нужно ее завершать при сворачивании приложения.
Интервал между посылками можно регулировать настройкой на стороне сервера (по умолчанию 5 секунд)
Code:
keep_alive.server_interval=5000
Можно также отключить проверку соединений вовсе
Code:
keep_alive.algorithm=NONE
но это может привести к зависанию сессий, который были разорваны из-за пропадания связи на стороне клиента
 

R2D2

Member
Уважаемые разработчики, мы доработали приложение с Вашей новой библиотекой.
Наше приложение находится на тесте и обнаружились баги при работе новой, доработанное WCS библиотеки - причем жесткие:
В нашем приложении надо проигрывать медиафайлы и проигрывать входящие стримы,
проигрывание медиафалов производится стандартно, следующим образом:
MediaPlayer.create(getContext(), R.raw.sound1).start();

Никак не удается при подключенной bluetooth гарнитуре проигрывать через гарнитуру медиафайлы и входящий стрим. Хотя хорошо работает с проводной гарнитурой и просто спикером телефона. Как нам доработать программу чтобы проигрывались медиафайлы и входящие стримы через БТ гарнитуру??????(вопрос крайне срочный)

Все варианты настроек, и поведение телефона - ниже приводим

// комбинация 1.
// Flashphoner.getAudioManager().setUseBluetoothSco(true);
// Проигрывание стрима - bluetooth,
// проигрывание медиафайлов - не воспроизводится нигде
// синтезатор голоса tts - bluetooth


// комбинация 2.
// Flashphoner.getAudioManager().setUseBluetoothSco(true);
// Flashphoner.getAudioManager().setUseSpeakerPhone(false);
// Проигрывание стрима - bluetooth,
// проигрывание медиафайлов - не воспроизводится нигде
// синтезатор голоса tts - bluetooth

// комбинация 3.
// Flashphoner.getAudioManager().setUseBluetoothSco(true);
// Flashphoner.getAudioManager().setUseSpeakerPhone(true);
// Проигрывание стрима - через speaker телефона,
// проигрывание медиафайлов - не воспроизводится нигде,
// голос tts не проигрываает - невоспроизводится нигде


// комбинация 4.
// Flashphoner.getAudioManager().setUseBluetoothSco(false);
// Flashphoner.getAudioManager().setUseSpeakerPhone(true);
// Проигрывание стрима идет через speaker телефона,
// проигрывание медиафайлов - bluetooth,
// синтезатор голоса tts - bluetooth


// комбинация 5.
// Flashphoner.getAudioManager().setUseBluetoothSco(false);
// Flashphoner.getAudioManager().setUseSpeakerPhone(false);
// Проигрывание стрима идет через speaker телефона,
// проигрывание медиафайлов - bluetooth,
// синтезатор голоса tts - bluetooth
 

Max

Administrator
Staff member
Добрый день.
Никак не удается при подключенной bluetooth гарнитуре проигрывать через гарнитуру медиафайлы и входящий стрим. Хотя хорошо работает с проводной гарнитурой и просто спикером телефона. Как нам доработать программу чтобы проигрывались медиафайлы и входящие стримы через БТ гарнитуру??????(вопрос крайне срочный)
Мы создали тикет WCS-3095 и сообщим здесь о результатах
 

Max

Administrator
Staff member
Добрый день.
Изменения в SDK не понадобятся. Для того, чтобы одновременно проигрывать в гарнитуру и поток с сервера, и локальный медиафайл с устройства, необходимо запросить аудио фокус для медиаплеера, например
Code:
/**
 * Audio focus example
 */
MediaPlayer music = MediaPlayer.create(getBaseContext(), R.raw.sound1);
music.start();
AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
    @Override
    public void onAudioFocusChange(int focusChange) {
        Log.d("AudioFocus,", "onAudioFocusChange="+focusChange);
        music.setVolume(1, 1);
    }
};
// Request audio focus for playback
int requestResult = Flashphoner.getAudioManager().getAudioManager().requestAudioFocus(audioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
Log.d("AudioFocus,", "requestResult="+requestResult);
// Abandon audio focus when playback complete
music.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        Flashphoner.getAudioManager().getAudioManager().abandonAudioFocus(audioFocusChangeListener);
    }
});
 

R2D2

Member
Чем дальше - тем круче:
(Испытуемые образцы Samsung Note 10, - БТ наушники baseus w04)
В нашем приложении чтобы менять настройки в зависимости что подключено - мы сделали broadcast receiver и ловили событие системы на подключение/отключение наушников. Все работает хорошо пока наушники проводные, либо подключение БТ наушников производится вручную. Как только подключение БТ наушников начали производить в штатном режиме - автоматическом (с проводными все хорошо). Заметили что событие приходит, а далее приложение перегружается. Далее, полностью убрали из приложения broadcast receiver и всякую обработку наушников - перезагрузка приложения повторяется, начали смотреть логи.
Оказывается перезагрузку приложения вызывает нативный код который входит в вашу библиотеку. Перезагрузка приложения недопустима каждый раз как подключаются БТ наушники!!! Пожалуйста срочно устраните данный баг - т/к у нас приложение на тесте
Прилагаем кусок лога где видно как подключение БТ вызывает перезагрузку приложения:
2021-03-23 10:11:03.272 16493-17416/xxxxxxxxxxx I/Session: Invoker class method: ping
2021-03-23 10:11:04.268 16493-17422/xxxxxxxxxxx D/WebSocketChannelClient: WSS->C: {"message":"ping","data":[]}
2021-03-23 10:11:04.272 16493-17416/xxxxxxxxxxx I/Session: Invoker class method: ping
2021-03-23 10:11:05.270 16493-17422/xxxxxxxxxxx D/WebSocketChannelClient: WSS->C: {"message":"ping","data":[]}
2021-03-23 10:11:05.274 16493-17416/xxxxxxxxxxx I/Session: Invoker class method: ping
2021-03-23 10:11:05.794 16493-17430/xxxxxxxxxxx W/org.webrtc.Logging: WebRtcAudioManager: Invalid audio mode: MODE_NORMAL
2021-03-23 10:11:06.268 16493-17422/xxxxxxxxxxx D/WebSocketChannelClient: WSS->C: {"message":"ping","data":[]}
2021-03-23 10:11:06.272 16493-17416/xxxxxxxxxxx I/Session: Invoker class method: ping
2021-03-23 10:11:06.493 16493-16493/xxxxxxxxxxx I/ViewRootImpl@f0f7f45[MainActivity]: stopped(true) old=false
2021-03-23 10:11:06.494 16493-16493/xxxxxxxxxxx I/SurfaceControl: release : mNativeObject = -5476376666805880752 - Surface(name=xxxxxxxxxxx/xxxxxxxxxxx.MainActivity$_16493)/@0x4f9e005
2021-03-23 10:11:06.494 16493-16493/xxxxxxxxxxx I/SurfaceControl: nativeRelease nativeObject s[-5476376666805880752]
2021-03-23 10:11:06.494 16493-16493/xxxxxxxxxxx I/SurfaceControl: nativeRelease nativeObject e[-5476376666805880752]
2021-03-23 10:11:06.500 16493-16493/xxxxxxxxxxx I/log: MainActivity onDestroy...
2021-03-23 10:11:06.554 16493-16493/xxxxxxxxxxx I/ViewRootImpl@f0f7f45[MainActivity]: dispatchDetachedFromWindow
2021-03-23 10:11:06.563 16493-16493/xxxxxxxxxxx D/InputTransport: Input channel destroyed: 'd869ed7', fd=80
 
Last edited:

R2D2

Member
Библиотека
implementation 'com.flashphoner.fpwcsapi:wcs-android-sdk-1.0.1.74-release@aar'
 

Max

Administrator
Staff member
(Испытуемые образцы Samsung Note 10, - БТ наушники baseus w04)
Какая версия Android используется на тестируемом устройстве?
Если 8 и выше (для Note 10 последняя прошивка One UI 3.1 базируется на Android 11), для таких устройств необходимо использовать Android SDK 1.1.
Это известная проблема, отмеченная в документации.
При использовании Android SDK 1.0
implementation 'com.flashphoner.fpwcsapi:wcs-android-sdk-1.0.1.74-release@aar'
работает старый код библиотеки WebRTC, который и приводит к крашу приложения на более свежих версиях Android. На это мы повлиять никак не можем, т.к. саму библиотеку WebRTC не разрабатываем. Примеры на базе Android SDK 1.1 на Android 8 и выше не крашатся.
 

R2D2

Member
Спасибо за быстрый ответ: щас пересоберем проект проверим
 

R2D2

Member
С Версией implementation 'com.flashphoner.fpwcsapi:wcs-android-sdk-1.1.0.22-release@aar'
все точно так же? Так же перезагружает MainActivity
 

Max

Administrator
Staff member
Пожалуйста, проверьте. воспроизводится ли проблема в примере Media Devices. Если не воспроизводится, модифицируйте код примера так. чтобы проблема начала воспроизводиться, и вышлите, используя эту форму, либо предоставьте собственный минимальный пример кода без сторонних фреймворков, на котором проблема воспроизводится.
 

R2D2

Member
Да воспроизводится в примере Media Devices, в примере webview-example
в метод onCreate я просто добавил вывод надпись в консоль:
protected void onCreate(Bundle savedInstanceState) {
final Context context = this;

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Log.i("tester","onCreate");// активити запустилась

button = (Button) findViewById(R.id.btnUrl);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText et = (EditText) findViewById(R.id.textUrl);
String url = et.getText().toString();
if (url.isEmpty()) {
showDialog();
} else {
Intent intent = new Intent(context, WebViewActivity.class);
intent.putExtra("url", url);
startActivity(intent);
}
}
});
}
Далее просто при автоматическом коннекте БТ наушников к телефону Samsung Note 10(Android 11)
Я вижу что MainActivity перезапускается как при подключении наушников так и при отключении:
2021-03-23 16:37:07.507 1085-1734/? W/PackageSettings: Skipping PackageSetting{84974eb minuhome.DarkBlack.tester/10681} due to missing metadata
2021-03-23 16:37:08.165 22530-22530/com.flashphoner.wcsexample.webview_example I/tester: onCreate
2021-03-23 16:37:21.258 22530-22530/com.flashphoner.wcsexample.webview_example I/tester: onCreate
2021-03-23 16:37:31.475 22530-22530/com.flashphoner.wcsexample.webview_example I/tester: onCreate
2021-03-23 16:37:40.482 22530-22530/com.flashphoner.wcsexample.webview_example I/tester: onCreate
2021-03-23 16:37:44.904 22530-22530/com.flashphoner.wcsexample.webview_example I/tester: onCreate
 
Last edited:

Max

Administrator
Staff member
Эта проблема, похоже, относится к дизайну самого Android: при изменении конфигурации устройства активные приложения перезапускаются. Вероятно, для того, чтобы приложение точно подхватило это изменение.
Почитайте, пожалуйста, возможные способы обхода.
 

R2D2

Member
Спасибо за оперативный ответ.
Действительно перезагрузку Activity запускала OS.
Исправить удалось достаточно просто.
 

R2D2

Member
Добрый день.
Изменения в SDK не понадобятся. Для того, чтобы одновременно проигрывать в гарнитуру и поток с сервера, и локальный медиафайл с устройства, необходимо запросить аудио фокус для медиаплеера, например
Code:
/**
* Audio focus example
*/
MediaPlayer music = MediaPlayer.create(getBaseContext(), R.raw.sound1);
music.start();
AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
    @Override
    public void onAudioFocusChange(int focusChange) {
        Log.d("AudioFocus,", "onAudioFocusChange="+focusChange);
        music.setVolume(1, 1);
    }
};
// Request audio focus for playback
int requestResult = Flashphoner.getAudioManager().getAudioManager().requestAudioFocus(audioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
Log.d("AudioFocus,", "requestResult="+requestResult);
// Abandon audio focus when playback complete
music.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        Flashphoner.getAudioManager().getAudioManager().abandonAudioFocus(audioFocusChangeListener);
    }
});
bandonAudioFocus - устарела...предложите другое решение
 
Top