【问题标题】:Route AudioStream from WebRTC to Application layer将 AudioStream 从 WebRTC 路由到应用层
【发布时间】:2017-03-23 16:20:36
【问题描述】:
  • 我的目标是从 WebRTC 转换现有的 AudioStream。因此,我想将来自另一个应用程序的自定义噪声(仅用于示例)添加到已经工作的 PeerConnection 和本地 Stream。我的目标是为 Android 创建这些更改,并构建 java lib。那么,是否有可能做,甚至抛出改变 Native WebRTC?

  • 另一个问题,关于使用 WebRTC 构建自定义本机更改。我想在 WebRTC 中添加我自己的功能。为此,我还应该更改构建脚本或类型,以及如何做到这一点?您能否就这件事提出建议,也许有一些文档,关于构建您自己的更改(以及在其他系统中的下一次使用,Android\iOS)?

更新

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

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

【问题讨论】:

  • 我了解问题无法完全回答。但尽可能多。

标签: java android java-native-interface webrtc


【解决方案1】:

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

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

同样的 byteBuffer 被传递给 native 进行音频编码并将其发送到远程端:

nativeCacheDirectBufferAddress(byteBuffer, nativeAudioRecord);

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

2) 您可以按照here 的说明构建 webrtc 源代码。只是将所有步骤总结在一起,您可以使用以下脚本:

#!/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,以便您可以在设备上和模拟器上使用二进制文件。

【讨论】:

  • 好点,关于第一个。但第二种解释是有线的。我知道,如何构建 WebRTC。我的意思是我可以在 WebRTC 的范围内构建自己的更改,我需要如何更改 Android 的 JNI 包装器等等...
猜你喜欢
  • 2014-03-24
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多