WebRTC介绍和构建

1介绍

WebRTC是一个开放源代码项目,可实现Web和本机应用程序中音频,视频和数据的实时通信。

WebRTC具有多个JavaScript API-单击链接以查看演示。

  • getUserMedia():捕获音频和视频。
  • MediaRecorder:录制音频和视频。
  • RTCPeerConnection:在用户之间流式传输音频和视频。
  • RTCDataChannel:在用户之间传输数据。

在哪里可以使用WebRTC?

在Firefox,Opera以及台式机和Android上的Chrome中。WebRTC也可用于iOS和Android上的本机应用程序。

什么是信令?

WebRTC使用RTCPeerConnection在浏览器之间通信流数据,但还需要一种机制来协调通信并发送控制消息,该过程称为信令。WebRTC未指定信令方法和协议。在此代码实验室中,您将使用Socket.IO进行消息传递,但是有许多替代方法。

什么是STUN和TURN?

WebRTC设计为可以点对点工作,因此用户可以通过最直接的路由进行连接。但是,WebRTC旨在应付现实世界的网络:客户端应用程序需要遍历NAT网关和防火墙,而对等网络则需要回退,以防直接连接失败。在此过程中,WebRTC API使用STUN服务器获取计算机的IP地址,并在对等通信失败的情况下使用TURN服务器充当中继服务器。(真实世界中的WebRTC进行了详细说明。)

WebRTC安全吗?
所有WebRTC组件都必须进行加密,并且其JavaScript API仅可用于安全来源(HTTPS或本地主机)。信令机制不是WebRTC标准定义的,因此要确保使用安全协议。

开发

当前支持的平台是Windows,Mac OS X,Linux,Android和iOS。有关这些移动平台的构建说明和示例应用程序,请参见Android和iOS页面。

在你开始前 首先,一定要安装的必备软件。 获取代码

对于桌面开发:

创建一个工作目录,输入它,然后运行fetch webrtc:

mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync

注意:在首次同步时,你就必须接受谷歌Play服务SDK的许可协议。

由于使用Chromium构建工具链和许多依赖项,因此结帐的规模很大。估计大小:

Linux:6.4 GB。
Linux(使用Android):16 GB(其中约8 GB是Android SDK + NDK映像)。
Mac(支援iOS):5.6GB

您也可以选择指定如何新的分支机构应跟踪:

git config branch.autosetupmerge always
git config branch.autosetuprebase always

或者,您可以像这样创建新的本地分支(推荐):

cd src
git checkout master
git new-branch your-branch-name

有关单独的说明,请参见Android和iOS页面。

注意:如果可以Remote: Daily bandwidth rate limit exceeded for ,请确保已登录。对于已登录的用户,配额要大得多。

更新代码

使用以下命令更新当前分支:

git checkout master
git pull origin master
gclient sync
git checkout my-branch
git merge master

构建

ninja 是所有平台的默认构建系统。

见的Android和iOS版的构建指令具体到这些平台。

生成ninja 项目文件

  • ninja 项目文件正在使用中产生GN。他们把你所选择的目录,如out/Debug或out/Release,但你可以使用任何目录保持多种配置得心应手。

  • 要使用默认值(调试版本)生成项目文件,请运行(位于签出的src /目录中):

gn gen out/Default
  • 要为Release版本生成ninja 项目文件,请执行以下操作:
gn gen out/Default --args='is_debug=false'
  • 要清除目录中的所有构建工件,但不影响当前GN配置(存储在args.gn文件中),请执行以下操作:
gn clean out/Default
  • 有关所有可用选项,请参见GN文档。在Android和iOS页面上,还有更多针对平台的提示。

编译中

  • Ninja项目文件时(请参见上一节),请src/使用以下命令进行编译(位于中):
  • 对于在中生成的Ninja项目文件out/Default:
ninja -C out/Default
  • 使用其他构建系统
    不支持其他构建系统(并且可能会失败),例如Windows上的Visual Studio或OSX上的Xcode。GN支持使用Ninja进行构建,而使用Visual Studio / Xcode进行编辑和驱动编译的混合方法 。

要生成IDE项目文件,请将–ide标志传递给GN命令。有关受支持的IDE的更多详细信息,请参见GN参考。

与发布分支工作

  • 要查看可用的发行分支,请运行:
git branch -r
  • 要创建跟踪远程发行分支的本地分支(在此示例中为43分支):
git checkout -b my_branch refs/remotes/branch-heads/43
gclient sync
  • 注意:结帐时未跟踪depot_tools,因此gclient同步可能会在足够旧的分支上中断。在这种情况下,您可以尝试使用旧的depot_tools:
which gclient
# cd to depot_tools dir
# edit update_depot_tools; add an exit command at the top of the file
git log  # find a hash close to the date when the branch happened
git checkout <hash>
cd ~/dev/webrtc/src
gclient sync
# When done, go back to depot_tools, git reset --hard, run gclient again and
# verify the current branch becomes REMOTE:origin/master

上面的内容未经测试且不受支持,但可能会有所帮助。

提交分支的日志:https : //webrtc.googlesource.com/src/+log/branch-heads/43

要浏览它:https : //webrtc.googlesource.com/src/+/branch-heads/43

有关更多详细信息,请阅读Chromium的“使用分支”和 “使用发行分支”页面。

贡献补丁

请参阅贡献修复程序,以获取有关如何运行git cl upload,审核补丁并提交补丁的信息 。

如果您是提交者,还包括有关如何运行tryjobs的信息。

提交者

许多WebRTC提交者也是Chromium提交者。要确保使用正确的帐户将提交推送到WebRTC,请使用user.emailGit配置设置。推荐的方法是按照仓库工具设置页面中的说明全局设置chromium.org帐户,然后user.email 使用(更改为您的webrtc.org地址)在本地为WebRTC存储库设置:

cd /path/to/webrtc/src
git config user.email [email protected]

范例

  • WebRTC包含几个示例应用程序,可以在src/webrtc/examples和下找到它们 src/talk/examples。较高级别的应用程序将首先列出。

对等连接

  • 对等连接由使用WebRTC本机API的两个应用程序组成:
  • 具有目标名称的服务器应用程序 peerconnection_server
  • 具有目标名称的客户端应用程序peerconnection_client(Mac / Android当前不支持)
  • 客户端应用程序具有简单的语音和视频功能。服务器通过管理客户端生成的信令消息,使客户端应用程序可以启动客户端之间的呼叫。

- 建立P2P peerconnection_clients之间的调用

开始peerconnection_server。您应该看到以下消息,表明它正在运行:

Server listening on port 8888
  • 启动任意数量的peerconnection_clients并将它们连接到服务器。客户端用户界面由以下几部分组成:
    – 连接到服务器:启动应用程序后,您必须指定服务器应用程序在哪台计算机上运行(通过IP地址)。完成后,您可以按“ 连接”或返回按钮。
    – 选择一个对等方:成功连接到服务器后,您可以通过双击或选择并按对等方名称的return键来连接到对等方。
    – 视频聊天:成功连接对等方后,视频聊天将在全窗口中显示。
    – 结束聊天会话:按Esc。您现在将回到选择对等方。
    – 终止连接:按Esc键,您现在可以选择要连接的服务器。

  • 测试peerconnection_server
    启动peerconnection_server应用程序实例。

src/webrtc/examples/peerconnection/server/server_test.html在浏览器中打开。单击连接。观察到peerconnection_server宣布您的连接。使用同一页面再打开一个标签。也连接它(使用其他名称)。现在可以在连接的对等方之间交换消息。

呼叫应用

目标名称call(当前禁用)。使用libjingle建立呼叫的应用程序。呼叫使用xmpp(而不是WebRTC使用的SDP)允许您使用gmail帐户登录并与gmail朋友进行音频/视频呼叫。它建立在libjingle之上以提供此功能。

此外,您可以为语音和视频指定输入和输出RTP转储。它提供了两个输入RTP转储样本:voice.rtpdump它包含一个单通道流,使用G722编码的16Khz语音,以及video.rtpdump 一个包含以30帧每秒的H264 AVC编码的320x240视频。提供的样本将与Google Talk视频互操作。如果使用其他输入RTP转储,则可能需要更改call_main.cc (第215-222行)中的编解码器。

中继服务器

目标名称relayserver。无法建立直接对等连接时中继流量。可以与上面的呼叫应用程序一起使用。

STUN服务器

目标名称stunserver。如RFC 5389中所述,为NAT的会话遍历实用程序实现STUN协议。

TURN服务器

目标名称turnserver。用于单元测试。

发布了664 篇原创文章 · 获赞 55 · 访问量 217万+

猜你喜欢

转载自blog.csdn.net/commshare/article/details/103595671
今日推荐