【问题标题】:Android Webrtc change stream to STREAM_MUSICAndroid Webrtc 将流更改为 STREAM_MUSIC
【发布时间】:2021-05-12 17:03:10
【问题描述】:

我已经创建了一个从一个设备到另一个设备的 WebRTC 会话,该设备应该能够控制音乐流的音量,但 WebRTC 最初设计用于流式传输 voice_call,因此使用 voice_call 通道并且使用呼叫音量控制不是非通话应用的良好行为。

我尝试将 WebRTC 源 WebRtcAudioTrack 中的 STREAM_VOICE_CALL 更改为 STREAM_MUSIC 以使用流音乐音量,但唯一的变化是 android 将其检测为音乐,但音量随通话音量而变化。

【问题讨论】:

    标签: android webrtc audio-streaming webrtc-android


    【解决方案1】:

    我找到了解决方案。您必须更改 opensls 播放器才能发生这种情况

    更改此from here

      // corresponds to android.media.AudioManager.STREAM_VOICE_CALL.
      SLint32 stream_type = SL_ANDROID_STREAM_VOICE;
      RETURN_ON_ERROR(
          (*player_config)
              ->SetConfiguration(player_config, SL_ANDROID_KEY_STREAM_TYPE,
                                 &stream_type, sizeof(SLint32)),
          false);
    

    到这里

      // corresponds to android.media.AudioManager.STREAM_MUSIC.
      SLint32 stream_type = SL_ANDROID_STREAM_MEDIA;
      RETURN_ON_ERROR(
          (*player_config)
              ->SetConfiguration(player_config, SL_ANDROID_KEY_STREAM_TYPE,
                                 &stream_type, sizeof(SLint32)),
          false);
    

    这样做here too

    【讨论】:

    • 我也在寻找解决这个问题的方法,我按照你的建议实现了这个@nima-moradi,发现它没有任何区别。我注意到在这个 repo 中你做了进一步的改变 -> https://github.com/nimamoradi/webrtc-audio-fix。除了sdk/android/src/jni/audio_device/opensles_player.ccmodules/audio_device/android/opensles_player.cc 中的更改之外,是否可能需要其他代码更改?
    • @forty9er 正如我所说的那样,我确实更改了 webrtc 的 java 文件中的值,但这还不够,所以我也对 sles 播放器进行了一些更改。查看 webrtc 源并​​将 STREAM_VOICE_CALL 更改为 STREAM_MUSIC。看看其他类也有一些不需要任何更改的日志记录
    • 感谢@nima moradi。我发现 Java 文件也需要更新并且它可以工作 - 非常感谢。现在我唯一的问题是音频是单声道的,希望我能在代码的同一区域找到解决方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 2017-02-11
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多