Jitsi - 在通话过程中播放WAV文件 - 如果可能,请混合音频

Par*_*esh 8 java audio file device jitsi

我正在调整Jitsi以在呼叫进行时播放Wav文件.

我在做这件事时遇到了麻烦,如果你能帮助我,我将不胜感激.

我可以在调用开始之前切换数据源,方法是使用自定义AudioFileMediaDevice并在CallPeerMediaHandler中打开它.

但是在调用正在进行时,我在更换数据源方面遇到了问题.

================================================== ===========

我尝试过以下但无法使其正常工作.

1)我尝试获取设备的输出数据源,并使用addInDataSource方法添加了wav文件的URLDatasource.没工作.

DataSource dataSource = device.createOutputDataSource();

DataSource fileDataSource = Manager.createDataSource(new URL("file://resources/sounds/Sample.wav"));
((AudioMixingPushBufferDataSource)dataSource).addInDataSource(fileDataSource);
Run Code Online (Sandbox Code Playgroud)

2)我尝试添加自定义Capture设备并切换它,但它也不起作用:

CaptureDeviceInfo2 fileDevice =
                new CaptureDeviceInfo2("Recorded Audio 1",
                    fileDataSource.getLocator(), null, null, null, null);

            ((MediaServiceImpl) LibJitsi.getMediaService())
                .getDeviceConfiguration().getAudioSystem().setDevice(AudioSystem.DataFlow.CAPTURE, fileDevice, false);
Run Code Online (Sandbox Code Playgroud)

这虽然适用于播放,而不是捕获设备.

3)我甚至尝试添加一个新的音频系统,将播放设备作为文件数据源,但这也不起作用.

================================================== ===========

我是libjitsi的新手,所以我很难尝试解码正在发生的事情.关于如何解决这个问题的任何指示都会很棒.

sto*_*ito 0

我用以下代码在通话中播放声音:

public void startPlaying(CallPeer callPeer, DataSource soundDataSource) throws OperationFailedException {
    assert callPeer instanceof CallPeerSipImpl;
    CallPeerSipImpl cp = (CallPeerSipImpl) callPeer;
    AudioMediaStreamImpl audioMediaStream = (AudioMediaStreamImpl) cp.getMediaHandler().getStream(MediaType.AUDIO);
    AudioMediaDeviceSession deviceSession = audioMediaStream.getDeviceSession();
    assert deviceSession != null;
    assert deviceSession.getDevice() instanceof AudioMixerMediaDevice;
    AudioMixerMediaDevice dev = (AudioMixerMediaDevice) deviceSession.getDevice();
    dev.getAudioMixer().addInDataSource(soundDataSource);
}
Run Code Online (Sandbox Code Playgroud)

请注意,AudioMixerMediaDevice.getAudioMixer() 在 libjitsi 中具有私有访问权限,因此我将其公开并重新编译。