如何在 android 上播放 webrtc.AudioTrack(无视频)

Posted

技术标签:

【中文标题】如何在 android 上播放 webrtc.AudioTrack(无视频)【英文标题】:How to play a webrtc.AudioTrack on android (No Video) 【发布时间】:2016-11-28 19:32:09 【问题描述】:

我正在尝试将原生 webrtc SDK (libjingle) 用于 android。到目前为止,我可以将流从 android 发送到 web(或其他平台)就好了。我还可以从对等方接收 MediaStream。 (到 onAddStream 回调)

我正在进行的项目只需要音频流。没有创建任何视频轨道,也没有发送给任何人。

我的问题是,我如何播放从远程对等点获得的 MediaStream 对象?

@Override
public void onAddStream(MediaStream mediaStream) 
    Log.d(TAG, "onAddStream: got remote stream");
    // Need to play the audio ///

同样,问题是关于音频的。我不使用视频。 显然所有本地 webrtc 示例都使用视频轨道,所以我没有运气在网上找到任何文档或示例。

提前致谢!

【问题讨论】:

【参考方案1】:

我们可以使用以下代码获取远程音轨

import org.webrtc.AudioTrack;

@Override
public void onAddStream(final MediaStream stream)
    if(stream.audioTracks.size() > 0) 
        remoteAudioTrack = stream.audioTracks.get(0);
    

显然所有原生 webrtc 示例都使用视频轨道,所以我没有运气在网络上找到任何文档或示例。

是的,作为应用开发者,我们只需要注意视频渲染。 如果我们收到远程音轨,默认情况下它将在基于默认扬声器(耳机/扬声器/有线耳机)的接近设置中播放。

在 AppRTCAudioManager.java 中检查以下代码 启用/禁用扬声器

/** Sets the speaker phone mode. */
private void setSpeakerphoneOn(boolean on) 
    boolean wasOn = audioManager.isSpeakerphoneOn();
    if (wasOn == on) 
      return;
    
    audioManager.setSpeakerphoneOn(on);

参考来源:AppRTCAudioManager.java

【讨论】:

感谢您的回答!! - 如何获得 audioManager 的实例?在使用纯 libjingle。 AudioManager 是 Android 内部库 如此简单 - 谢谢! @SagiDayan 我无法对收到的音轨做任何事情,并且它不会自动发布到我的 Android 设备扬声器 public void onAddRemoteStream(final MediaStream remoteStream, final PnPeer peer) CallActivity.this.runOnUiThread( new Runnable() public void run() Toast.makeText(CallActivity.this, "连接到 " + peer.getId(), Toast.LENGTH_SHORT).show(); ); super.onAddRemoteStream(remoteStream, peer); // 将记录值 @Ajay 我有点卡在上面的同一个问题中 我应该在哪里使用remoteAudioTrack 填写后?

以上是关于如何在 android 上播放 webrtc.AudioTrack(无视频)的主要内容,如果未能解决你的问题,请参考以下文章

活动在前台时如何在 Android 上播放音乐

如何在 Android 上异步和同时(复音)播放声音?

如何在 Android 上播放非正弦音符?迷笛?

如何在 android 上播放 webrtc.AudioTrack(无视频)

你如何在 MediaPlayer 上播放 Android InputStream?

如何检测音频当前是不是正在 Android 手机扬声器上播放?