使用 libjingle 在 android WebRTC 中自定义音频设备

Posted

技术标签:

【中文标题】使用 libjingle 在 android WebRTC 中自定义音频设备【英文标题】:Custom audio device in android WebRTC using libjingle 【发布时间】:2019-02-20 14:37:39 【问题描述】:

我正在开发本机 android WebRTC 客户端,该客户端支持从自定义设备流式传输音频(我通过蓝牙从该设备获取音频流)。我正在使用 libjingle 库来实现 WebRTC,我想知道是否以及如何将自定义音频流连接到音轨?

目前我正在添加这样的默认音轨:

localMS = factory.createLocalMediaStream("ARDAMS");

Audiosource audioSource = factory.createAudioSource(new MediaConstraints());
localMS.addTrack(factory.createAudioTrack("ARDAMSa0", audioSource));

我看到有 WebRtcAuidioRecord (https://github.com/pristineio/webrtc-android/blob/master/libjingle_peerconnection/src/main/java/org/webrtc/voiceengine/WebRtcAudioRecord.java) - 是否可以覆盖它?

有人尝试过这样做吗?

【问题讨论】:

【参考方案1】:

您的帖子将我带到以下代码,我将尝试它并让您知道我是否可以正常工作。我正在尝试向 Watson API 发送一个音频流,向 WebRTC 发送一个音频流,但 Android 只允许一个 InputStream 读取麦克风。如果我让它工作,我会更新你。

private org.webrtc.MediaStream createMediaStream() 
    org.webrtc.MediaStream mediaStream = mFactory.createLocalMediaStream(ARDAMS);

    if (mEnableVideo) 
        mVideoCapturer = createVideoCapturer();
        if (mVideoCapturer != null) 
            mediaStream.addTrack(createVideoTrack(mVideoCapturer));
         else 
            mEnableVideo = false;
        
    

    if (mEnableAudio) 
        createAudioCapturer();
        mediaStream.addTrack(mFactory.createAudioTrack(
                AUDIO_TRACK_ID,
                mFactory.createAudioSource(mAudioConstraints)));
    

    return mediaStream;


/**
 * Creates a instance of WebRtcAudioRecord.
 */
private void createAudioCapturer() 
    if (mOption.getAudioType() == PeerOption.AudioType.EXTERNAL_RESOURCE) 
        WebRtcAudioRecord.setAudioRecordModuleFactory(new WebRtcAudioRecordModuleFactory() 
            @Override
            public WebRtcAudioRecordModule create() 
                AudioCapturerExternalResource module = new AudioCapturerExternalResource();
                module.setUri(mOption.getAudioUri());
                module.setSampleRate(mOption.getAudioSampleRate());
                module.setBitDepth(mOption.getAudioBitDepth());
                module.setChannel(mOption.getAudioChannel());
                return module;
            
        );
     else 
        WebRtcAudioRecord.setAudioRecordModuleFactory(null);
    

来源: https://www.programcreek.com/java-api-examples/?code=DeviceConnect/DeviceConnect-Android/DeviceConnect-Android-master/dConnectDevicePlugin/dConnectDeviceWebRTC/app/src/main/java/org/deviceconnect/android/deviceplugin/webrtc/core/MediaStream.java

【讨论】:

@wyatt 运气好吗?

以上是关于使用 libjingle 在 android WebRTC 中自定义音频设备的主要内容,如果未能解决你的问题,请参考以下文章

Build Android Webrtc Libjingle Library On Ubuntu

libjingle googletalk 客户端

WebRTC 如何使用 libjingle?

我在哪里可以获得最新的 libjingle?

WebRTC之Android客户端

libjingle的XmppPump编译问题