9

我在安卓上使用APPRTCdemo 应用程序。我试图让它播放来自另一个对等方的声音,就像在 Android 设置中设置的音量一样响亮。因此,如果用户将设备静音,则不会听到音频。我几乎尝试了所有 Android API 调用,但似乎对音量没有任何影响。这些是我尝试过的东西: AudioManager audioManager = (AudioManager)_context.getSystemService(Context.AUDIO_SERVICE); int 音量 = audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);

    volume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
    volume =audioManager.getStreamVolume(AudioManager.STREAM_RING);
    volume =audioManager.getStreamVolume(AudioManager.STREAM_ALARM);
    volume =audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION);
    volume =audioManager.getStreamVolume(AudioManager.STREAM_SYSTEM);

    audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
    audioManager.setStreamVolume(AudioManager.MODE_IN_COMMUNICATION, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
    audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, 0,AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
    audioManager.setStreamMute(AudioManager.MODE_IN_COMMUNICATION, true);
    audioManager.setStreamMute(AudioManager.STREAM_SYSTEM, true);
    audioManager.setStreamMute(AudioManager.STREAM_RING, true);
    audioManager.setStreamMute(AudioManager.STREAM_MUSIC, true);
    audioManager.setStreamMute(AudioManager.STREAM_NOTIFICATION, true);
4

3 回答 3

2

如果要使流静音,可以执行以下操作:

RemoteStream.audioTracks.get(0).setEnabled(false); //in case you have only one audio track 

如果您在流中有多个音轨,您可以将其置于循环中。这是经过测试的代码,静音/取消静音工作得非常好。

于 2016-09-19T19:10:47.133 回答
2

我面临着同样的问题。我没有找到任何关于它的文档,但我发现你不能静音AudioManager.STREAM_VOICE_CALL流。即使您将音量设置为 0,您仍然可以听到它。

我不知道这部分是 Android 还是制造商所做的修改,但我测试了几款具有相同行为的手机和平板电脑。

如果您在通话过程中尝试将音频静音,这可以很容易地测试,您可以根据需要尽可能多地按下音量降低键,但它不允许您完全静音。

我想这一切背后的想法是防止用户在唯一的问题是音频静音时认为呼叫无法正常工作。

于 2016-02-22T14:31:36.333 回答
0

如果您只想使音频静音,则可以使用 smth ,如下所示:

inputMediaStream.audioTracks.getFirst().setEnabled(false);

在 webrtc 的源代码中,您可以找到 src/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java 使用

audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, volume, 0);

更改音量的代码(我认为它应该可以正常工作)。所以你的问题可能在其他地方。

于 2015-07-28T10:21:57.683 回答