我知道那WebRTC
是为浏览器设计的,但是否可以直接在移动应用程序上使用 WebRTC 库?
谢谢!
截至 5 月 14 日,这是一个使用它的 android 项目WebRTC
,效果很好。
我将整个 android 项目翻译Objective-C
为 iOS 并让 WebRTC 在 iOS 上也能工作,但我在 iPhone 4 和 4s 上遇到了麻烦。仅适用于 iPhone 5 和 5s。
我认为问题在于性能。当我使用 webrtc 库进行视频通话时,它会占用 iPhone 5 上大约 140% 的 CPU,我想这是很多资源,而 iPhone 4s 无法处理它。
已编辑
在与视频连接(总是在 10 秒后断开连接)苦苦挣扎之后,我终于让 WebRTC 在 iPhone 4s 上运行,您所要做的就是在创建本地 videoSource 捕获对象时设置正确的约束:
NSString *_width = @"320";
NSString *_height = @"180";
NSString *_maxFrameRate = @"10";
RTCMediaConstraints *videoConstraints = [[RTCMediaConstraints alloc]
initWithMandatoryConstraints:@[[[RTCPair alloc] initWithKey:@"maxHeight" value:_height],
[[RTCPair alloc] initWithKey:@"maxWidth" value:_width],
[[RTCPair alloc] initWithKey:@"maxFrameRate" value:_maxFrameRate]] optionalConstraints:@[[[RTCPair alloc]
initWithKey:@"googCpuOveruseDetection" value:@"true"],
[[RTCPair alloc] initWithKey:@"googCpuLimitedResolution" value:@"true"]]];
RTCVideoSource *videoSource = [factory videoSourceWithCapturer:capturer constraints:videoConstraints];
RTCMediaStream *lms = [factory mediaStreamWithLabel:@"ARDAMS"];
[lms addVideoTrack:[factory videoTrackWithID:@"ARDAMSv0" source:videoSource]];
请注意,这会发送一个非常小的视频,但它可以工作!
您可以将 WebRTC 与本机应用程序一起使用,但这需要一些工作。
如果您查看图像,您可以在底部看到一个红色矩形。这就是 WebRTC 的原生 C++ 库。音频和视频的 WebRTC 类和 WebRTC 对象也可以作为 WebRTC 项目的一部分找到。您需要添加一个 API,以便您的应用能够设置调用(VOIP 接口)、信令堆栈和 NAT遍历实用程序(核心协议 - 对于 SIP,这可能类似于 PJSIP 和 PJNATH)和从信令堆栈到 webrtc 的适配器,告诉它何时打开视频和音频通道以及何时停止它们等。
截至今天,WebRTC 正式在 Android/iOS 上原生可用。
https://webrtc.github.io/webrtc-org/native-code/android/
https://webrtc.github.io/webrtc-org/native-code/ios/
尽管在底层,它只是一个围绕 C++ API 的 Java/Objective C 包装器。
您仍然可以在不通过 JavaScript 的情况下使用它们。
Java 包装 API:https ://code.google.com/p/webrtc/source/browse/trunk/talk/#talk%2Fapp%2Fwebrtc%2Fjava%2Fsrc%2Forg%2Fwebrtc
目标 C 包装 API: https ://code.google.com/p/webrtc/source/browse/trunk/talk/#talk%2Fapp%2Fwebrtc%2Fobjc%2Fpublic%253Fstate%253Dclosed
我们(免责声明:我在那里工作)在IceLink中为 @Frozen Mountain 建立了一组库。适用于 iOS、Android、.NET 等的完整 WebRTC 实现。
让我总结一下答案,我相信 Android Firefox 实际上支持 WebRTC,另一方面,有很多公司提供构建 WebRTC 产品的完整堆栈。如果您只追求 WebRTC 并自己构建其他东西(寻址等),那么您可能必须自己构建几个包装器。(免责声明我为 sinch 工作)
[http://sinch.com]
[http://twilio.com]
[http://tokbox.com]
[http://nexmo.com]
[http://plivo.com] (I think)
还有一些,但这些是主要的
我们都有不同的优点和缺点。如果您有兴趣发送电子邮件,我可以谈谈 sinch。
SightCall 具有适用于 Android 的 WebRTC 兼容 SDK,可让 Android 原生应用程序在浏览器中连接到 WebRTC。您可以在此处获取 SDK
可以在移动应用程序中使用 WebRTC,使用 OpenTok 等 3rd 方 API(仅限 iOS,截至 2014 年 1 月 Android 处于测试阶段)http://tokbox.com/opentok/webrtc/downloads/index.html和Addlive(iOS 和 Android)http://www.addlive.com/platform-overview/
我不知道“直接在移动应用程序上使用 WebRTC 库”是什么意思。但有些事情我已经完成了。使用 JNI + NDK 构建 WebRTC NS/AEC/AECM/AGC/VAD 模块,并在 android 上使用共享库。或者您可以为 android 和 iOS 构建整个 WebRTC VoE 和 ViE。
您可能想要查看的一个资源是这篇文章: 如何在不浪费 10 个小时的情况下开始使用 webrtc 和 ios
我遇到的一个问题是理解所有WebRTC/Libjingle
库文件。目前,我可以运行示例应用程序,但我希望那里有一个“Hello World”示例。
目前还没有,它仅在 Firefox 的 nightly 和 Chrome 中受支持,这两个都是桌面版本。见http://www.webrtc.org
编辑:对不起,我以为您要的是移动浏览器。对于本机应用程序,它看起来像是一个明确的否 :(
但似乎有一些移动浏览器支持http://www.morbo.org/2013/04/webrtc-support-on-android.html
现在你有两个选择:
对于 iOS,只需将其添加到您的 CocoaPods Podfile
pod "libjingle_peerconnection"
# Add this to the bottom so it won't have issues with active architecture
post_install do |installer_representation|
installer_representation.project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
config.build_settings['VALID_ARCHS'] = ['armv7', 'i386']
end
end
end
检查这个有哪些修订可用。修订版 6802.X从实际代码库中反映了这一点。WebRTC
Android 将很快添加到 maven Central,我会在发生时对此进行编辑。
如果您想手动构建 WebRTC,请查看 github.com/pristineio/webrtc-build-scripts,其中还包括两个平台的分步指南
我的团队在这方面做了很多工作。如果您正在寻找一个 Cordova 插件,我们一直在使用一个名为PhoneRTC的开源项目。我们让它在 iOS 上运行,但它有点不可靠,而且视频窗口的纵横比是固定的,在大多数设备上看起来不自然,但它确实有效。
我们还使用 libjingle 创建了一个 Android 演示。Libjingle 现在是 WebRTC 项目和代码库的一部分。该链接现在可能已过时,但指向当时对我们有用的说明。
很晚才回答.. 但我刚刚制作了一个框架,可以在 iOS 项目中轻松添加 WebRTC。您不需要从库中构建 WebRTC 框架。该框架将为您提供内置框架以及包装器,以便轻松将 webRTC 添加到您的应用程序中。 https://github.com/Ankit-Aggarwal/SwiftyWebRTC
如果您的目标是 android >= L,您可以通过将支持 WebRTC 的 (chrome) webview 嵌入到您的应用程序中来非常轻松地构建本机 webRTC 应用程序。