跳至页脚内容
.NET 帮助

C# WebRTC(开发人员如何使用)

WebRTC 是实时网络通信的缩写,这是一项技术,它使得网络浏览器和其他平台之间能够直接进行实时通信,而无需通过中间服务器传输数据,除了初始连接设置。它支持在对等方之间共享视频、音频和通用数据,使其成为开发实时通信应用的强大工具。

本教程介绍了如何使用 C# 创建 WebRTC 解决方案,重点是 .NET Core 框架,并提供了有关设置信令服务器、理解 TURN 服务器以及将 WebRTC 集成到您的 IronPDF C# 应用程序中的见解。

设置您的环境

要在 C# 中开始开发 WebRTC 应用程序,您需要设置开发环境。 这涉及安装 .NET Core,这是一个用于构建网站、服务和控制台应用的跨平台版本的 .NET。您可以从微软的官方网站下载和安装 .NET Core。安装后,您可以使用 Visual Studio,一个流行的 C# 开发集成开发环境 (IDE),或使用您选择的任何其他编辑器来编写代码。

创建新的控制台应用程序

首先设置一个新的控制台应用程序项目。 打开终端或命令行界面,移动到您计划建立项目的目录。 接下来,执行以下命令:

dotnet new console -n WebRTCSample
dotnet new console -n WebRTCSample
SHELL

该命令创建一个名为 WebRTCSample 的新目录,其中包含一个简单的 "Hello World" 控制台应用程序。 导航到您的项目目录,您已准备好开始编写 WebRTC 应用程序代码。

理解 WebRTC 和信令

WebRTC 实现了实时通信,但它需要一种机制来协调通信并发送控制消息,这个过程被称为信令。 信令用于交换关于通信会话的元数据,例如会话描述和候选信息以建立连接。 C# 应用程序可以通过任何消息传输机制实现信令,例如 WebSockets 或 REST APIs。

在 .NET Core 中实现信令服务器

信令服务器充当在建立直接点对点连接之前交换对等体之间消息的中介。 您可以通过创建一个处理 WebSocket 连接的简单 Web 应用程序来使用 .NET Core 实现信令服务器。

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

public class Startup
{
    // Configures services for the web application.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options => options.AddDefaultPolicy(
            builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()));
        services.AddSignalR();
    }

    // Configures the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseCors();
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<SignalingHub>("/signal");
        });
    }
}
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

public class Startup
{
    // Configures services for the web application.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options => options.AddDefaultPolicy(
            builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()));
        services.AddSignalR();
    }

    // Configures the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseCors();
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<SignalingHub>("/signal");
        });
    }
}
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Hosting
Imports Microsoft.Extensions.DependencyInjection
Imports Microsoft.Extensions.Hosting

Public Class Startup
	' Configures services for the web application.
	Public Sub ConfigureServices(ByVal services As IServiceCollection)
		services.AddCors(Function(options) options.AddDefaultPolicy(Function(builder) builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()))
		services.AddSignalR()
	End Sub

	' Configures the HTTP request pipeline.
	Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
		If env.IsDevelopment() Then
			app.UseDeveloperExceptionPage()
		End If
		app.UseCors()
		app.UseRouting()
		app.UseEndpoints(Sub(endpoints)
			endpoints.MapHub(Of SignalingHub)("/signal")
		End Sub)
	End Sub
End Class
$vbLabelText   $csharpLabel

此代码片段设置了一个基本的 .NET Core 应用程序,使用 SignalR 用于向应用程序添加实时 Web 功能的库。SignalR 简化了向应用程序添加实时 Web 功能的过程,使其成为我们信令服务器的良好选择。

使用 WebRTC 连接对等方

在设置信令服务器之后,下一步是使用 WebRTC 在客户端之间建立点对点连接。 这涉及在每个客户端上创建 RTCPeerConnection 对象,交换请求和应答消息,并协商连接详细信息。

创建点对点连接

在您的 C# 应用程序中,您将主要管理信令部分,并可能通过浏览器或像 React Native 这样的其他平台与 WebRTC API 进行交互以用于移动应用。下面是如何从 Web 客户端发起点对点连接的示例:

// Create a new RTCPeerConnection instance
const peerConnection = new RTCPeerConnection();

// Listen for ICE candidates and send them to the signaling server
peerConnection.onicecandidate = event => {
  if (event.candidate) {
    sendMessage('new-ice-candidate', event.candidate);
  }
};

// Handle incoming media streams
peerConnection.ontrack = event => {
  // Display the video or audio stream
};
// Create a new RTCPeerConnection instance
const peerConnection = new RTCPeerConnection();

// Listen for ICE candidates and send them to the signaling server
peerConnection.onicecandidate = event => {
  if (event.candidate) {
    sendMessage('new-ice-candidate', event.candidate);
  }
};

// Handle incoming media streams
peerConnection.ontrack = event => {
  // Display the video or audio stream
};
JAVASCRIPT

此 JavaScript 代码片段演示了如何创建一个新的点对点连接、处理 ICE 候选者并设置用于显示传入媒体流的回调。

交换请求和应答

要建立连接,一个对等方创建请求,另一个对等方则以应答响应。 这些通过之前实现的信令服务器进行交换。

// Create an offer for the peer connection
async function createOffer() {
  const offer = await peerConnection.createOffer();
  await peerConnection.setLocalDescription(offer);
  sendMessage('offer', offer);
}

// Create an answer after receiving an offer
async function createAnswer(offer) {
  await peerConnection.setRemoteDescription(new RTCSessionDescription(offer));
  const answer = await peerConnection.createAnswer();
  await peerConnection.setLocalDescription(answer);
  sendMessage('answer', answer);
}
// Create an offer for the peer connection
async function createOffer() {
  const offer = await peerConnection.createOffer();
  await peerConnection.setLocalDescription(offer);
  sendMessage('offer', offer);
}

// Create an answer after receiving an offer
async function createAnswer(offer) {
  await peerConnection.setRemoteDescription(new RTCSessionDescription(offer));
  const answer = await peerConnection.createAnswer();
  await peerConnection.setLocalDescription(answer);
  sendMessage('answer', answer);
}
JAVASCRIPT

将 WebRTC 集成到 .NET 应用程序中

虽然核心 WebRTC 实现通常在浏览器或其他客户端环境中处理,.NET 应用程序可以促进信令过程,管理会话控制,并与 TURN 服务器等其他服务进行交互以实现 NAT 穿透。 对于桌面或服务器端应用程序,可以使用 Pion WebRTC(一个开源的 Go 语言库)来包裹或与 C# 一起使用以处理 WebRTC 流量。

运行您的应用程序

要运行您的 .NET Core 应用程序,导航到项目目录中的终端并执行:

dotnet run
dotnet run
SHELL

该命令编译并运行您的应用程序,启动您已实现的信令服务器。 您的 Web 客户端现在可以连接到此服务器以开始交换信令消息。

IronPDF简介

C# WebRTC(如何为开发人员工作):图 1 - IronPDF 网页

IronPDF 是一个多功能库,可为 .NET 应用程序带来 PDF 生成和操作功能,使开发人员能够以编程方式创建、读取和编辑 PDF 文档。 IronPDF 支持多项任务,包括生成 从 HTML 到 PDF,填写表单,提取文本,以及为文档增加安全保护。 这使得它在根据用户数据或应用程序输出生成报告、发票和动态文档方面非常有用。

IronPDF 的一个关键功能是其 HTML 转 PDF 能力,保持布局和样式不变。 它从网页内容生成 PDF,因此非常适合报告、发票和文档。 您可以轻松地将 HTML 文件、URL 和 HTML 字符串转换为 PDF。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

安装 IronPDF。

在可以在项目中使用 IronPDF 之前,您需要将其添加到 .NET 应用程序中。 这可以通过 NuGet 包管理器来完成,这简化了项目中管理外部库的过程。 要安装 IronPDF,可以在 NuGet 包管理器控制台中使用以下命令:

Install-Package IronPdf

用例:在 WebRTC 应用程序中使用 IronPDF 生成会议记录 PDF

想象一下开发一个使用 WebRTC 的实时通信应用,专为在线会议或虚拟课堂设计。 此应用允许用户进行音频和视频通话,分享屏幕,并实时协作处理文档。此应用的一个有价值功能是能够自动生成并分发会议记录或会话摘要,包括讨论的关键点、做出的决定以及行动项目,以 PDF 格式。 这正是 IronPDF 发挥作用的地方。

实现步骤

  1. 捕获会议内容:在 WebRTC 会话期间,捕获基于文本的内容,例如聊天消息、共享笔记或突出显示的行动项目。 此内容可以格式化为 HTML,方便样式和组织(例如,使用列表来表示行动项目,用标题表示关键主题)。
  2. 生成 HTML 模板:在会议结束时,捕获的内容格式化成 HTML 模板。 此模板包括会议的标题、日期、参与者和为不同类型内容(讨论点、决定、行动项目)结构化的部分。
  3. 将 HTML 转换为 PDF:一旦会议结束并准备好 HTML 模板,IronPDF 即可用于将这些 HTML 内容转换为 PDF 文档。 这种转换确保了在 HTML 中定义的样式和布局在 PDF 中保留,使文档易于阅读且外观专业。

以下是示例 PDF 代码:

using IronPdf;

public class MeetingMinutesGenerator
{
    public static void GenerateMeetingMinutesPdf(string htmlContent, string outputPath)
    {
        // Initialize the HTML to PDF converter
        var renderer = new HtmlToPdf();
        renderer.PrintOptions.MarginTop = 40;
        renderer.PrintOptions.MarginBottom = 40;
        renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
        {
            CenterText = "{pdf-title}",
            DrawDividerLine = true,
            FontSize = 12
        };
        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
        {
            LeftText = "{date} {time}",
            RightText = "Page {page} of {total-pages}",
            DrawDividerLine = true,
            FontSize = 12
        };
        // Convert the HTML content to a PDF document
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
        // Save the PDF document
        pdfDocument.SaveAs(outputPath);
        Console.WriteLine("Meeting minutes PDF generated.");
    }
}
using IronPdf;

public class MeetingMinutesGenerator
{
    public static void GenerateMeetingMinutesPdf(string htmlContent, string outputPath)
    {
        // Initialize the HTML to PDF converter
        var renderer = new HtmlToPdf();
        renderer.PrintOptions.MarginTop = 40;
        renderer.PrintOptions.MarginBottom = 40;
        renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
        {
            CenterText = "{pdf-title}",
            DrawDividerLine = true,
            FontSize = 12
        };
        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
        {
            LeftText = "{date} {time}",
            RightText = "Page {page} of {total-pages}",
            DrawDividerLine = true,
            FontSize = 12
        };
        // Convert the HTML content to a PDF document
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
        // Save the PDF document
        pdfDocument.SaveAs(outputPath);
        Console.WriteLine("Meeting minutes PDF generated.");
    }
}
Imports IronPdf

Public Class MeetingMinutesGenerator
	Public Shared Sub GenerateMeetingMinutesPdf(ByVal htmlContent As String, ByVal outputPath As String)
		' Initialize the HTML to PDF converter
		Dim renderer = New HtmlToPdf()
		renderer.PrintOptions.MarginTop = 40
		renderer.PrintOptions.MarginBottom = 40
		renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
			.CenterText = "{pdf-title}",
			.DrawDividerLine = True,
			.FontSize = 12
		}
		renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {
			.LeftText = "{date} {time}",
			.RightText = "Page {page} of {total-pages}",
			.DrawDividerLine = True,
			.FontSize = 12
		}
		' Convert the HTML content to a PDF document
		Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
		' Save the PDF document
		pdfDocument.SaveAs(outputPath)
		Console.WriteLine("Meeting minutes PDF generated.")
	End Sub
End Class
$vbLabelText   $csharpLabel

结论

C# WebRTC(如何为开发人员工作):图 2 - IronPDF 许可证页

在本文中,我们探索了如何使用 C# 和 .NET Core 创建基本的 WebRTC 应用程序。 我们讨论了设置开发环境、创建新的控制台应用程序、实现信令服务器以及为实时通信发起对等连接。 WebRTC 为实时通信应用程序打开了无数可能性,而使用 C# 和 .NET Core,您可以构建跨不同平台和设备工作的强大可扩展解决方案。 有关许可证和购买信息,请访问 IronPDF 许可证页面。 一旦您决定购买,许可证起价 $799。

常见问题解答

使用 WebRTC 与 C# 和 .NET Core 的好处是什么?

WebRTC 与 C# 和 .NET Core 相结合,使开发人员能够创建利用 WebRTC 和 C# 编程环境强大功能的实时通信应用程序。这个组合支持直接的点对点数据传输,并可以与 .NET 库如 IronPDF 集成以提供额外的功能。

如何设置 C# 中的 WebRTC 开发环境?

要在 C# 中设置 WebRTC 开发环境,您需要从微软官方网站上安装 .NET Core SDK。使用像 Visual Studio 这样的 IDE 来高效管理和编写您的代码。这种设置将允许您创建控制台应用程序并集成 WebRTC 功能。

信令服务器在 WebRTC 应用程序中扮演什么角色?

信令服务器在 WebRTC 应用程序中至关重要,因为它方便了对等方之间控制消息和元数据的交换,以建立连接。它帮助协商会话描述和候选者信息,然后进行直接的点对点连接。

如何使用 .NET Core 创建信令服务器?

您可以通过开发一个管理 WebSocket 连接的简单 Web 应用程序来使用 .NET Core 创建信令服务器。利用 SignalR,一个添加实时 Web 功能的库,可以简化实现信令服务器的过程。

IronPDF 如何用于在 WebRTC 应用程序中生成 PDF?

IronPDF 可以集成到 WebRTC 应用程序中,以从 HTML 内容生成 PDF。这对于创建会议记录或会话摘要等文档特别有用,增强了实时通信应用程序的功能。

建立 WebRTC 中的点对点连接涉及哪些步骤?

建立 WebRTC 中的点对点连接涉及创建 RTCPeerConnection 对象、交换报价和应答消息,并使用 ICE 候选者协商连接细节。这一过程对于启用对等方之间的直接通信至关重要。

TURN 服务器如何促进 WebRTC 连接?

TURN 服务器通过在对等方之间中继媒体来协助启用 WebRTC 连接,特别是在无法直接连接的限制性网络环境中。这确保了即使在需要 NAT 穿透的情况下也能连接上。

HTML 可以在 .NET 应用程序中转换为 PDF 吗?

是的,HTML 可以使用像 IronPDF 这样的库在 .NET 应用程序中转换为 PDF。可以使用 RenderHtmlAsPdf 之类的方法将 HTML 内容转换为 PDF 文档,同时保留原始样式和布局。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,是 C# PDF 技术的先锋工程师。作为 Iron Software 核心代码库的原始开发者,自公司成立以来,他就塑造了公司的产品架构,并与首席执行官 Cameron Rimington 一起将其转变成一家公司,拥有50多人,服务于 NASA、特斯拉和全球政府机构。

Jacob 拥有曼彻斯特大学 (1998-2001) 的一级荣誉土木工程学士学位。1999 年在伦敦创办了自己的第一家软件公司,并于 2005 年创建了他的第一个 .NET 组件后,他专注于解决微软生态系统中的复杂问题。

他的旗舰 IronPDF 和 Iron Suite .NET 库在全球已获得超过 3000 万次的 NuGet 安装,其基础代码继续为全球使用的开发者工具提供支持。拥有 25 年商业经验和 41 年编程经验的 Jacob 仍专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。