独立移动应用上的WebRTC

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

2
Tokbox有一些与webRTC集成的iOS库。值得一看...http://www.tokbox.com/learn-about-webrtc - Michael Gorham
谢谢,我会考虑这个解决方案! - Taras
OpenTok并不是真正的开源,只能与他们的API一起使用。 - aredridel
虽然现在许多库都可以解决这个问题,但我们团队一年前使用SIP到WebRTC信令和媒体网关制作了一个本地的WebRTC兼容Android客户端。请参考文章-https://altanaitelecom.wordpress.com/2014/08/14/webrtc-compatible-android-client/。 - Altanai
16个回答

26

截至5月14日,这里有一个使用WebRTC的Android项目,并且运行得很好。我把整个Android项目翻译成了Objective-C,在iOS上也让WebRTC工作了,但在iPhone 4和4s上遇到了麻烦。只有在iPhone 5和5s上可以正常工作。

我认为问题出在性能上。当我使用webrtc库进行视频通话时,在iPhone 5上占用了大约140%的CPU,这是非常多的资源,而iPhone 4s无法处理它。


编辑过的内容:

在经历了视频连接问题(始终在10秒后断开)的折磨后,我终于让WebRTC在iPhone 4s上工作了。你所要做的就是在创建本地视频源捕获对象时设置正确的约束条件:

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]];

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


Olmedo,我也正在将AndroidRTC移植到iOS上。我似乎已经成功地设置了init、offer、answer和ice流程。然而,我似乎无法将视频轨道连接到视频视图。我可能漏掉了什么吗?寻求帮助..谢谢! - azfar
那在我的私人代码库里。你能给我发一封握手邮件到m.azfar.siddiqui@gmail.com,这样我就可以进一步与你协调了吗?谢谢。 - azfar
@MoisésOlmedo,我们有办法查看您的源代码吗? - E-Riddie
@MoisésOlmedo 做得好...我能够从浏览器呼叫到 Android 客户端。你能否分享一下如何从 Android 到 Android 客户端进行呼叫的示例? - Rahul Matte

12
您可以在原生应用程序中使用WebRTC,但需要做一些工作。如果您查看图像,您会看到底部有一个红色矩形,那就是WebRTC的本机C ++库。音频和视频的WebRTC类和WebRTC对象也可以作为WebRTC项目的一部分找到。您需要添加的是一个API,让您的应用程序能够设置通话(VOIP界面),一个信令堆栈和NAT穿越实用程序(核心协议 - 对于SIP,这可能是类似PJSIP和PJNATH的东西),以及从信令堆栈到webrtc的适配器,告诉它何时打开视频和音频通道以及何时停止等等。
另请参见:http://bloggeek.me/porting-webrtc-mobile/

8

这是一个基于WebRTC代码和预构建库的示例项目,链接在此:https://github.com/duttaime/webrtcandroid。 - user2230793

6

我们(免责声明:我在那里工作)在Frozen Mountain已经开发了一套库来实现这个功能,名为IceLink。该库完整实现了iOS、Android、.NET等平台的WebRTC。


是否有适用于iOS和Android的cordova版本? - Manuel Rauber

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方法,但在我的情况下,我无法使用它。请帮我解决这个问题。 - Rahul Khurana

3

3
截至2014年3月,确实有一种方法可以实现此目的,这里提供了相关信息,但前提是需要一个原生客户端。如果您不介意使用移动浏览器,则当前支持以下浏览器:
  • Google Chrome 28(默认情况下从29开始启用)
  • Mozilla Firefox 24
  • Opera Mobile 12
数据来源

3

2

我不知道你所说的“直接在移动应用程序中使用WebRTC库”的意思。但是我已经完成了一些工作。

通过JNI + NDK构建WebRTC NS / AEC / AECM / AGC / VAD模块,并在Android上使用共享库,或者可以为Android和iOS构建整个WebRTC VoE和ViE。


@bikkhoo:你的意思是,你能在原生应用上在Android上使用webrtc吗? - Amitg2k12
@Amitg2k12 是的,NS/VAD模块在我的应用中运作良好,但是AECM在处理尖叫声时有点问题。 - Bill Hoo
非常感谢,如果您能评论我的问题,那就太好了。https://dev59.com/CGQn5IYBdhLWcg3wTlsS - Amitg2k12

2
您也许希望查看这篇文章:WebRTC和iOS入门指南,避免浪费十个小时
我目前遇到的一个问题是理解所有WebRTC/Libjingle库文件。目前,我可以运行示例应用程序,但我希望有一个“Hello World”示例。

有一个名为ApprtcDemo的项目。 - Durai Amuthan.H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接