面向 Delphi 和 C++ Builder 的 WebRTC 媒体引擎 | sgcWebRTC

sgcWebRTC — 面向 Delphi 和 C++ Builder 的 WebRTC 媒体引擎

为您的 Delphi 和 C++ Builder 应用添加实时音频、视频、屏幕共享和数据通道,无需接触浏览器。

无需浏览器 / WebView
Windows、Linux、macOS、iOS 和 Android
音视频通话
屏幕共享
SCTP 数据通道
DTLS-SRTP 加密
内置 STUN / TURN / ICE
自适应码率
硬件 H.264 编码
与浏览器互通
完整源代码
Delphi 和 C++ Builder

一个组件,完整的对等连接

sgcWebRTC 不会在 sgcWebSockets 之上添加新的调色板组件 — 它在同一个 TsgcRTCPeerConnection 类上解锁了其余符合 W3C 规范的接口:信令、连接、加密、数据通道和媒体全部存在于同一个对象上。

手动的、与浏览器兼容的信令

CreateOfferCreateAnswerSetLocalDescriptionSetRemoteDescriptionAddIceCandidate 构建和消费真实的 SDP,因此对端可以是浏览器。您可以通过自己已有的任何信令通道来传递 SDP。

ICE、STUN 和 TURN 连接

针对 RTCOptions.ICEServers 进行涓流式或非涓流式 ICE 候选收集,当直连路径受阻时,通过 STUN 获取服务器反射候选地址,通过 TURN 获取中继候选地址。OnICECandidateOnConnectionStateChange 跟踪传输状态。

DTLS-SRTP 加密传输

每个会话都按照 WebRTC 的强制要求进行加密:在已提名的 ICE 候选对上进行 DTLS 握手以推导出 SRTP 密钥,连接上的每个 RTP、RTCP 和 SCTP 数据包从第一个数据包开始就已加密。

SCTP 数据通道

CreateDataChannel 在 SCTP-over-DTLS 之上打开一个有序或无序、可靠或部分可靠的通道(RFC 8831/8832)。SendSendBytes 以及 OnMessage / OnMessageBinary 事件负责传输文本和二进制负载。

音频、视频和屏幕轨道

AddTrack 附加一个 Opus 或 G.711 音频轨道,或一个 VP8、H.264 或 Motion JPEG 视频轨道;SendPCMSendVideoFrame 推送采集到的媒体数据,OnAudioOnVideoFrame 提供解码后的远端轨道数据。

带宽评估与抗弱网能力

一个类似 Google Congestion Control 风格的基于延迟的估算器持续跟踪链路状况,并驱动视频编码器的目标码率,辅以 RTCP NACK/PLI 重传、RFC 4588 RTX 以及 RED/ULPFEC,这与浏览器在弱网环境中使用的是同一套工具箱。

TsgcRTCPeerConnection

sgcWebRTC 不会在调色板中添加新的类。它就是 sgcWebSockets Enterprise 中自带的同一个 TsgcRTCPeerConnection 组件,在 Enterprise 已经提供的 ICE/TURN 连接基础之上,解锁了 SDP、SCTP、RTP 和 SRTP 接口。

TsgcRTCPeerConnection

手动 SDP 信令、ICE/TURN 连接、DTLS-SRTP 加密、SCTP 数据通道和 RTP 音视频轨道全部集成于一个组件之中。内置重新协商、ICE 重启以及 W3C 完美协商(perfect-negotiation)冲突处理规则。

查看组件 →

查看完整功能矩阵 →

一个 Offer,与一个数据通道

设置一个 ICE 服务器,挂接 SDP 和 ICE 事件,打开一个数据通道,然后创建 offer。Delphi 和 C++ Builder 中使用同一套 API。

uses
  sgcP2P;

var
  oRTC: TsgcRTCPeerConnection;
begin
  oRTC := TsgcRTCPeerConnection.Create(nil);
  oRTC.RTCOptions.ICEServers.AddURL('stun:stun.l.google.com:19302');
  oRTC.OnLocalDescription      := OnLocalDescriptionHandler;
  oRTC.OnICECandidate          := OnICECandidateHandler;
  oRTC.OnConnectionStateChange := OnConnectionStateChangeHandler;
  oRTC.OnDataChannel           := OnDataChannelHandler;

  oRTC.CreateDataChannel('chat');   // forces RTCOptions.DTLS on
  oRTC.CreateOffer;                    // gathers ICE candidates, builds the SDP offer
end;

procedure TForm1.OnLocalDescriptionHandler(Sender: TObject;
  const aType, aSDP: string);
begin
  // send aType + aSDP to the remote peer over your own signaling channel
end;

procedure TForm1.OnDataChannelHandler(Sender: TObject;
  aChannel: TsgcRTCDataChannel);
begin
  aChannel.OnMessage := OnChannelMessageHandler;
  aChannel.Send('hello');
end;
// includes: sgcP2P.hpp

TsgcRTCPeerConnection *oRTC = new TsgcRTCPeerConnection(NULL);
oRTC->RTCOptions->ICEServers->AddURL("stun:stun.l.google.com:19302");
oRTC->OnLocalDescription      = OnLocalDescriptionHandler;
oRTC->OnICECandidate          = OnICECandidateHandler;
oRTC->OnConnectionStateChange = OnConnectionStateChangeHandler;
oRTC->OnDataChannel           = OnDataChannelHandler;

oRTC->CreateDataChannel("chat");    // forces RTCOptions->DTLS on
oRTC->CreateOffer();                  // gathers ICE candidates, builds the SDP offer

void __fastcall TForm1::OnLocalDescriptionHandler(TObject *Sender,
  const String aType, const String aSDP)
{
  // send aType + aSDP to the remote peer over your own signaling channel
}

void __fastcall TForm1::OnDataChannelHandler(TObject *Sender,
  TsgcRTCDataChannel *aChannel)
{
  aChannel->OnMessage = OnChannelMessageHandler;
  aChannel->Send("hello");
}

sgcWebRTC 实现的 RFC 标准

基于标准构建的媒体引擎,而非私有传输协议。

RFC 8445 & 8489 — ICE / STUN

交互式连接建立(ICE)的候选地址收集与提名,以及背后的 STUN 绑定请求。通过 TsgcICEClient 暴露,并由 TsgcRTCPeerConnection 自动使用。

RFC 8656 — TURN

当直连或服务器反射路径不可达时,通过 TsgcTURNClient 借助 TURN 服务器获取中继候选地址。

RFC 8827 & 5764 — DTLS / DTLS-SRTP

用于验证对等连接并为加密媒体推导 SRTP 密钥材料的 DTLS 握手。

RFC 8831 & 8832 — SCTP Data Channels

基于 DTLS 之上的 SCTP,使用 DCEP 开放握手,流 ID 奇偶性由 DTLS 角色决定,支持有序 / 部分可靠传递。

RFC 3550 & 3711 — RTP / SRTP

音视频的实时传输协议及其加密版本,支持 RTCP 发送方/接收方报告、NACK、PLI 和 REMB 反馈。

RFC 8829 — JSEP

CreateOffer / CreateAnswer / SetLocalDescription / SetRemoteDescription 背后的 offer/answer 状态机,包括重新协商和冲突(glare)处理。

sgcWebSockets Enterprise 的附加组件

sgcWebRTC 以附加组件的形式授权。所有许可证均包含完整源代码、1 年更新,以及 70% 的续订折扣。

sgcWebRTC

€299

提供 Single、Team 和 Site 授权,均含完整源代码。

  • TsgcRTCPeerConnection 媒体引擎
  • SDP 信令、SCTP 数据通道、RTP 媒体
  • Delphi 和 C++ Builder
  • 完整源代码
  • 1 年更新

★ 需要 sgcWebSockets Enterprise

不适用于 Standard 或 Professional 版本。同时也包含在 All-Access 套装中。

查看价格并订购

Delphi 中 WebRTC 的常见问题

开发者在为 Delphi 或 C++ Builder 应用程序添加实时音频、视频或数据通道之前最常问到的问题。

开箱即用是不支持的,而且大多数第三方库也只停留在信令层面。sgcWebSockets Enterprise 自带基础的 TsgcRTCPeerConnection 组件,提供 ICE/TURN 连接;sgcWebRTC 在此基础上添加了媒体引擎 — 手动 SDP offer/answer、DTLS-SRTP 加密传输、SCTP 数据通道,以及 Opus/G.711 音频和 VP8/H.264 视频 — 因此该组件真正能够与浏览器建立对等连接并交换媒体,而不仅仅是转发信令消息。
可以。CreateOffer / CreateAnswer 会构建标准 SDP,而 SetLocalDescription / SetRemoteDescription / AddIceCandidate 负责消费它,遵循浏览器所期望的 JSEP 状态机(RFC 8829)。您通过自己的信令通道传递 SDP 和候选地址,就像浏览器应用程序通过其信令服务器所做的那样。
支持。CreateDataChannel 会在 SCTP-over-DTLS(RFC 8831/8832)之上打开一个 RTCDataChannel,可以是有序或无序、完全可靠或带有重传次数/生存期限制。当远端对等方打开一个通道时会触发 OnDataChannel,通道打开后 Send / SendBytes 用于传输文本或二进制负载。
音频:Opus 和 G.711(PCMU/PCMA)。视频:通过 libvpx 绑定支持 VP8,通过操作系统自身的硬件编码器支持 H.264 — Windows 上为 Media Foundation,iOS/macOS 上为 VideoToolbox,Android 上为 MediaCodec — 此外 Windows 上还提供 Motion JPEG 路径。平台矩阵请参见功能矩阵
是的,而且媒体加密无法关闭:DTLS-SRTP 握手在已提名的 ICE 候选对上运行,连接上的每个 RTP、RTCP 和 SCTP 数据包都会被加密,这与浏览器强制执行的强制加密模型完全相同。
不需要。其他一些在 Delphi 中实现 WebRTC 的方案,是通过嵌入完整的浏览器引擎(Chromium Embedded Framework 封装,或 TWebBrowser/TEdgeBrowser 控件),再从 Pascal 驱动其 JavaScript WebRTC 技术栈来实现的。sgcWebRTC 并非如此:TsgcRTCPeerConnection 是编译后的 Object Pascal 代码,直接调用操作系统自身的媒体 API(Windows 上的 Media Foundation、iOS/macOS 上的 VideoToolbox、Android 上的 MediaCodec),进程中没有浏览器运行时、没有内嵌的 Chromium 二进制文件,也没有 JavaScript 桥接层。这使得二进制文件体积小巧,并让同一个组件能够运行在 Android 和 iOS 上,也能运行在完全没有安装浏览器的无头服务或自助终端设备中。
sgcWebRTC 遵循 sgcWebSockets 的支持矩阵:Delphi 7 至 Delphi 13 Florence,以及对应的 C++ Builder 版本。试用版安装程序按 IDE 版本提供,其中已经包含 WebRTC 组件,因此无需单独下载。
媒体引擎本身没有。sgcWebSockets 的 .NET 移植版本包含一个 WebRTC 信令中继组件(TsgcWSProtocol_WebRTC_Server),用于实现经典的 AppRTC 风格浏览器对浏览器演示,但没有与 TsgcRTCPeerConnection 对应的 .NET 版本。sgcWebRTC 本身仅支持 Delphi 和 C++ Builder。
sgcWebRTC 是 sgcWebSockets Enterprise 的附加组件 — 不适用于 Standard 或 Professional 版本 — 同时也包含在 All-Access 套装中。提供 Single、Team 和 Site 授权,每种均含完整源代码和一年更新。购买前请下载试用版,在您自己的项目中进行评估。
3,000+Developers
20+Years
761+Components
30+API Integrations
5Platforms
30 天退款保证不满意?可在购买后 30 天内申请全额退款。 查看退款政策

为您的 Delphi 应用背后接上真正的对等连接

音频、视频和数据通道,端到端加密,使用您已经在用的语言实现。

eSeGeCe 的其他产品

将 sgcWebRTC 与我们的其他 Delphi、C++ Builder 和 .NET 组件库搭配使用。

sgcWebSockets

企业级 WebSocket、HTTP/2、MQTT、AMQP 和 AI/LLM 组件。sgcWebRTC 是 sgcWebSockets Enterprise 的附加组件。

了解更多 →

sgcQUIC

基于原生 OpenSSL 3.5 QUIC 引擎的 QUIC(RFC 9000)与 HTTP/3(RFC 9114)客户端和服务器组件。

了解更多 →

sgcHTML

89 个面向 Delphi、C++ Builder 和 .NET 的数据感知服务器端 HTML/UI 组件,基于 Bootstrap 5 和 htmx。

了解更多 →

sgcSign

企业级数字签名 — XAdES、PAdES、CAdES 和 ASiC,支持 10 个密钥提供商和 21 个欧盟国家配置文件。

了解更多 →

sgcOpenAPI

OpenAPI 3.0 解析器和 SDK 生成器。几秒钟内将任何 OpenAPI 规范转换为强类型的 Delphi 客户端。

了解更多 →

sgcBiometrics

面向 Delphi 和 C++ Builder 的原生 Windows Hello、指纹和 Windows 生物识别框架组件。

了解更多 →

sgcIndy

更新版 Indy TCP/IP 组件,为 Delphi 7 至 13 提供现代 TLS、IPv6 和 HTTP/2 支持。

了解更多 →

sgcAI

15 个面向 Delphi 和 C++ Builder 的 AI、LLM 和 MCP 组件。一个聊天组件即可连接 OpenAI、Anthropic、Gemini、DeepSeek、Ollama、Grok 和 Mistral。

了解更多 →

sgcMQ

面向 Delphi 和 C++ Builder 的 MQTT 3.1.1 与 5.0、AMQP 0.9.1、AMQP 1.0、Apache Kafka 和 STOMP 客户端组件。

了解更多 →