将AudioStream从WebRTC路由到应用层

时间:2017-03-23 16:20:36

标签: java android java-native-interface webrtc

  • 我有一个目标,即从WebRTC转换现有的AudioStream。所以我想添加(仅用于前)来自另一个应用程序的自定义噪声,已经工作的PeerConnection和本地Stream。我的目标是,为Android创建此更改,并构建java lib。那么,是否有可能做到,甚至抛出改变的Native WebRTC?
  • 另一个问题,关于使用WebRTC构建自定义本机更改。我想在WebRTC中添加自己的功能。为此,我还应该更改构建脚本或类型,以及我如何做到这一点?你可以就这个问题提出建议,也许还有一些文档,关于构建自己的更改(以及其他系统中的下一个用法,Android \ iOS)?

更新

关于1个问题,是否可以制作,抛出明确的WebRTC版本(没有库自定义)?例如,我们可以使用本地AudioStream对象进行操作吗?我们将它们放在PeerConnection中?

第二次更新。我们可以更改一些WebRTC本机C代码,并继续使用depot工具脚本构建吗?或者我们也应该创建自己的脚本,用于生成.so和.jar库? Android的变化怎么样?如果在本机C源中发生一些变化,我们如何为新的.jar库构建JNI更改?

1 个答案:

答案 0 :(得分:1)

1)Webrtc libjingle仅使用android框架来捕获音频/视频数据。在音频的情况下,它使用Android AudioRecord API来记录来自手机麦克风的音频并将其传递给以适当格式编码数据的本机,并将其传递到远程端。现在,将为您提供一些代码指针,例如您可以寻找引入自己的音频而不是使用手机麦克风。检查" WebRtcAudioRecord.java",我们使用AudioRecord框架捕获麦克风数据,如下所示:

  int bytesRead = audioRecord.read(byteBuffer, byteBuffer.capacity()); 

将相同的byteBuffer传递给本机进行音频编码并将其发送到远程端:

nativeCacheDirectBufferAddress(byteBuffer, nativeAudioRecord);

因此,您需要做的就是在循环中复制byteBuffer中的音频数据,而不是从麦克风中读取。

2)您可以按照here所述构建webrtc源代码。只是总结所有步骤,您可以使用beloow脚本:

#!/bin/sh
set -e
export GYP_DEFINES="OS=android"
if [ -f .gclient ];
then
  echo "gclient exists so go ahead"
  cd src
else
  fetch --nohooks webrtc_android
  cd src
  git fetch --tags
  git checkout branch-heads/55  
  gclient sync
  ./build/install-build-deps.sh 
  ./build/install-build-deps-android.sh
  gclient sync
  gn gen out/x86  --args='target_os="android" target_cpu="x86" is_debug=false dcheck_always_on=true symbol_level=1 is_component_build=false'
  gn gen out/x64  --args='target_os="android" target_cpu="x64" is_debug=false dcheck_always_on=true symbol_level=1 is_component_build=false'
  gn gen out/arm64 --args='target_os="android" target_cpu="arm64" is_debug=false dcheck_always_on=true symbol_level=1 is_component_build=false'
  gn gen out/armv7 --args='target_os="android" target_cpu="arm" is_debug=false dcheck_always_on=true symbol_level=1 is_component_build=false' 
fi
ninja -C out/arm64
ninja -C out/armv7
ninja -C out/x86
ninja -C out/x64

此脚本将为所有架构构建android libjingle v55,以便您可以在设备上以及在模拟器上使用二进制文件。