【问题标题】:WebRTC on a standalone mobile app独立移动应用程序上的 WebRTC
【发布时间】:2013-05-13 08:41:56
【问题描述】:

我知道WebRTC 是为浏览器设计的,但是否可以直接在移动应用程序上使用 WebRTC 库?

谢谢!

【问题讨论】:

  • Tokbox 有一些与 webRTC 集成的 iOS 库。可能值得一看...tokbox.com/learn-about-webrtc
  • 谢谢,我会考虑这个解决方案!
  • OpenTok 实际上并不是开源的,只能使用他们的 API。
  • 虽然现在很多库都解决了这个问题,但我的团队在 1 年前使用 SIP 到 WebRTC 信令和媒体网关制作了一个原生 webrtc 兼容的 android 客户端。参考文章-altanaitelecom.wordpress.com/2014/08/14/…

标签: webrtc


【解决方案1】:

截至今天,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

Objective C 封装 API: https://code.google.com/p/webrtc/source/browse/trunk/talk/#talk%2Fapp%2Fwebrtc%2Fobjc%2Fpublic%253Fstate%253Dclosed

【讨论】:

  • Here 是一个基于 WebRTC 代码和预建库的示例项目。
【解决方案2】:

截至 5 月 14 日,here 是一个使用 WebRTC 运行良好的 android 项目。

我将整个 android 项目翻译成 iOS 的 Objective-C 并让 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]];

请注意,这会发送一个非常小的视频,但它可以工作!

【讨论】:

  • 奥尔梅多,我也在将 AndroidRTC 移植到 iOS。我似乎已经成功设置了init,offer,answer,ice flow。但是,我似乎无法将视频轨道连接到视频视图。有什么我可能会丢失的吗?寻求帮助..谢谢!
  • 那在我的私人仓库中。您可以通过 m.azfar.siddiqui@gmail.com 给我发一封握手电子邮件,以便我与您进一步协调吗?谢谢
  • @MoisésOlmedo 有没有办法让我们查看您的源代码?
  • @MoisésOlmedo 干得好...我可以从浏览器调用 Android 客户端。能否请您分享从 Android 调用 Android 客户端的示例...
【解决方案3】:

我们(免责声明:我在那里工作)已经在@Frozen Mountain,IceLink 中建立了一组用于执行此操作的库。适用于 iOS、Android、.NET 等的完整 WebRTC 实现。

【讨论】:

  • 是否有适用于 iOS 和 Android 的 cordova 版本?
【解决方案4】:

您可以将 WebRTC 与本机应用程序一起使用,但这需要一些工作。

如果您查看图像,您会在底部看到一个红色矩形。这就是 WebRTC 的原生 C++ 库。音频和视频的 WebRTC 类和 WebRTC 对象也可以作为 WebRTC 项目的一部分找到。您需要添加一个 API,以便您的应用能够设置调用(VOIP 接口)、信令堆栈和 NAT遍历实用程序(核心协议 - 对于 SIP,这可能是 PJSIP 和 PJNATH 之类的东西)和从信令堆栈到 webrtc 的适配器,告诉它何时打开视频和音频通道以及何时停止它们等。

另请参阅:http://bloggeek.me/porting-webrtc-mobile/

【讨论】:

    【解决方案5】:

    让我总结一下答案,我相信 Android Firefox 实际上支持 WebRTC,另一方面,有很多公司提供构建 WebRTC 产品的完整堆栈。如果你是 在 WebRTC 和自己构建其他东西(寻址等)之后,您可能必须自己构建几个包装器。 (免责声明我为 sinch 工作)

    [http://sinch.com]
    [http://twilio.com]
    [http://tokbox.com]
    [http://nexmo.com]
    [http://plivo.com] (I think)
    

    还有一些,但这些是主要的

    我们都有不同的优点和缺点。如果您有兴趣发送电子邮件,我可以谈谈 sinch。

    【讨论】:

    • 嗨@cjensen 我尝试使用相同用户名在两个不同设备上使用用户名注册用户进行视频通话。不知何故,它正在调用第一台设备如何使其仅适用于最新注册的用户。我知道我们可以使用 stopClient 方法,但在我的情况下我不能使用它。请帮我解决这个问题
    【解决方案6】:

    可以在移动应用程序中使用 WebRTC,使用 OpenTok 等第三方 API(仅限 iOS,截至 2014 年 1 月,Android 处于测试阶段)http://tokbox.com/opentok/webrtc/downloads/index.html 和 Addlive(iOS 和 Android)http://www.addlive.com/platform-overview/

    【讨论】:

      【解决方案7】:

      SightCall 具有适用于 Android 的 WebRTC 兼容 SDK,可让 Android 原生应用在浏览器中连接到 WebRTC。 可以获取SDKhere

      【讨论】:

        【解决方案8】:

        截至 2014 年 3 月,here 确实可以做到这一点:

        如果您有兴趣拥有一个本地客户端,那就是这样。如果您不介意使用移动浏览器,目前支持以下浏览器:

        • Google Chrome 28(自 29 起默认启用)
        • Mozilla Firefox 24
        • Opera Mobile 12

        Source:

        【讨论】:

          【解决方案9】:

          我不知道“直接在移动应用程序上使用 WebRTC 库”是什么意思。 但有些事情我已经完成了。 使用 JNI + NDK 构建 WebRTC NS/AEC/AECM/AGC/VAD 模块,并在 android 上使用共享库。 或者您可以为 Android 和 iOS 构建整个 WebRTC VoE 和 ViE。

          【讨论】:

          • @bikkhoo :你的意思是,你能在 Android 上通过 Native App 使用 webrtc
          • @Amitg2k12 是的,NS/VAD 模块在我的应用程序中运行良好,但 AECM 在尖叫方面有点问题。
          • 非常感谢,如果您能对我的问题发表评论,那就太好了stackoverflow.com/questions/16933532/using-webrtc-in-native-app
          【解决方案10】:

          您可能想要查看的一个资源是这篇文章: how to get started with webrtc and ios without wasting 10 hours of your life

          我遇到的一个问题是理解所有WebRTC/Libjingle 库文件。目前,我可以运行示例应用程序,但我希望那里有一个“Hello World”示例。

          【讨论】:

          • 有一个ApprtcDemo项目
          【解决方案11】:

          还没有,它仅在 Firefox 的 nightly 和 Chrome 中支持,这两个桌面版本。见http://www.webrtc.org

          编辑:抱歉,我以为您要的是移动浏览器。对于本机应用程序,它看起来像是一个明确的否 :(

          但似乎有一些移动浏览器支持http://www.morbo.org/2013/04/webrtc-support-on-android.html

          【讨论】:

          • 感谢您的回答。但是 WebRTC 项目包含很多用 C 编写的库,所以我想,需要为它们编写一个 API。我仍然不能 100% 确定。
          • WebRTC理论上可以用在原生移动应用中,但能做到不代表现在就可以用。所有这些库都应该移植到移动操作系统上,例如对于 Android,Java 接口 (api) 应该由 Android 开发人员编写。因此,作为移动 SDK 的普通用户,我想我们必须等到这些发生。
          • 是的,非常感谢。我想这就是我需要听到的全部内容:)
          • 实际上 WebRTC 用于移动应用程序。考虑一下非常流行的 Viber 应用程序 - 它基于 WebRTC。
          【解决方案12】:

          现在你有两个选择:

          • 您将为您的设备构建 libWebRTC。您需要知道如何在 iOS 上使用 Android NDK 和原生 C 代码。这不是微不足道的,但它是完全可行的
          • 使用为您完成此任务的其他人的工作。例如。已经提到过 AddLive(是的,我在那里工作)甚至 OpenTok。

          【讨论】:

            【解决方案13】:

            对于 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
            

            检查this 有哪些可用的修订版。修订版 6802.X 从实际的 WebRTC 代码库反映到 this

            Android 很快就会被添加到 maven Central 中,我会在发生时对此进行编辑。

            如果您想手动构建 WebRTC,请查看 github.com/pristineio/webrtc-build-scripts,其中还包含两个平台的分步指南

            【讨论】:

              【解决方案14】:

              我的团队在这方面做了很多工作。如果您正在寻找一个 Cordova 插件,我们一直在使用一个名为 PhoneRTC 的开源项目。我们让它在 iOS 上运行,但它有点不可靠,而且视频窗口的纵横比是固定的,在大多数设备上看起来不自然,但它确实有效。

              我们还使用 libjingle 创建了一个 Android 演示。 Libjingle 现在是 WebRTC 项目和代码库的一部分。 This 链接现在可能已过时,但指向当时对我们有用的说明。

              【讨论】:

                【解决方案15】:

                很晚才回答.. 但我只是制作了一个框架,可以在 iOS 项目中轻松添加 WebRTC。 您不需要从库中构建 WebRTC 框架。 该框架将为您提供内置框架以及包装器,以便轻松将 webRTC 添加到您的应用程序中。 https://github.com/Ankit-Aggarwal/SwiftyWebRTC

                【讨论】:

                  【解决方案16】:

                  如果您的目标是 android >= L,您可以通过将支持 WebRTC 的 (chrome) webview 嵌入到您的应用中来非常轻松地构建原生 webRTC 应用。

                  chrome webview

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2012-09-02
                    • 1970-01-01
                    • 2015-08-19
                    • 1970-01-01
                    • 2012-06-05
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-10-14
                    相关资源
                    最近更新 更多