Доступ к микрофону после запуска стрима Abdroid/iOS SDK

Anton1984

Member
Есть задача после запуска стрима получить доступ к микрофону и брать с него данные для другого сдк внутри приложения. Возможно ли это сделать с включенным микрофоном на стриме и если нет, то возможно ли если микрофон на стриме выключить?
 

Max

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

Anton1984

Member
Добрый день.

Поскольку приложение одно и то же, то, если разрешение на доступ к микрофону дано пользователем, можно получить с него данные.
Если в данном случае достаточно публиковать только видео, то можно отключить публикацию аудио в констрейнтах. В этом случае Вы можете отдельно получить доступ к микрофону и забирать с него данные, например, в MediaRecorder.
Не совсем, мы хотим начать стрим со звуком, но если пользователь хочет включить субтитры, то мы хотим брать данные с микрофона для сервиса субтитров и в идеале это делать продолжая передавать звук и на стримеры, но это не обязательно, можем и отключить звук (важно именно чтобы не нужно было заканчивать стрим и начинать новый с выключенным звуком)
 

Anton1984

Member
Возможно ли сделать так чтобы чтобы muteAudio освобождал микрофон для использования другими приложениями?
 

Max

Administrator
Staff member
Возможно ли сделать так чтобы чтобы muteAudio освобождал микрофон для использования другими приложениями?
К сожалению, так сделать нельзя. При освобождении камеры и микрофона (для чего есть метод Flashphoner.releaseLocalMediaAccess()) захват видео/аудио останавливается, для того, чтобы возобновить захват, требуется повторная публикация потока.
Метод Stream.muteAudio() предназначен именно для заглушения потока, но не для остановки публикации. В этом случае библиотека WebRTC libjingle_peerconnection, которая используется для публикации потока в Android SDK, отправляет тишину в аудиосоставляющей потока.
Пожалуйста, еще раз уточните кейс: Вам необходимо на стороне зрителя включать субтитры, для этого Вы собираетесь на стороне публикующего устройства временно отдавать микрофон другому приложению? При таком подходе придется приостанавливать публикацию аудио для всех зрителей, даже для тех, кому субтитры в данный момент не нужны.
В этом случае предпочтительнее брать аудио в формате PCM на стороне сервера, как рекомендовано выше, тогда аудио можно отдавать стороннему сервису генерации субтитров, не останавливая для этого публикацию.
 

Anton1984

Member
Пожалуйста, еще раз уточните кейс: Вам необходимо на стороне зрителя включать субтитры, для этого Вы собираетесь на стороне публикующего устройства временно отдавать микрофон другому приложению? При таком подходе придется приостанавливать публикацию аудио для всех зрителей, даже для тех, кому субтитры в данный момент не нужны.

Этот вариант нам вполне подходит. Т.е. есть ли возможность выключить аудио для всех зрителей (оставив при этом публикацию видео потока), чтобы в этот момент публикующее приложение могло запустить SpeechRecognition?
 

Max

Administrator
Staff member
Т.е. есть ли возможность выключить аудио для всех зрителей (оставив при этом публикацию видео потока), чтобы в этот момент публикующее приложение могло запустить SpeechRecognition?
Этого можно добиться следующим образом:
1. Остановить текущую публикацию
2. Вызвать Flashphoner.releaseLocalMediaAccess(), чтобы отпустить камеру и микрофон
3. Опубликовать поток без аудио
Code:
            StreamOptions streamOptions = new StreamOptions(streamName);
            Constraints constraints = new Constraints(null, videoConstraints);
            streamOptions.setConstraints(constraints);
            ...
            publishStream = session.createStream(streamOptions);
При этом зрители должны будут переподписаться на этот поток по имени.
 
Top