跳過到頁腳內容
.NET幫助

C# WebRTC(對於開發者的運行原理)

WebRTC代表 Web 即時通信,它是一種無需中間伺服器即可在 Web 瀏覽器和其他平台之間進行直接即時通訊的技術(初始連接建立除外)。它支援在對等節點之間共享視訊、音訊和通用數據,使其成為開發即時通訊應用程式的強大工具。

本教學介紹如何使用 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# 應用程式可以透過任何訊息傳輸機制(例如 WebSocket 或 REST API)實現訊號傳輸。

在.NET Core中實作訊號伺服器

訊號伺服器充當中間人,在建立直接的點對點連線之前,在對等節點之間交換訊息。 你可以使用.NET Core建立一個處理 WebSocket 連線的簡單 Web 應用程式來實作訊號伺服器。

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");
        });
    }
}
$vbLabelText   $csharpLabel

這段程式碼片段使用 SignalR 設定了一個基本的.NET Core應用程式。 SignalR 是一個用於為應用程式添加即時 Web 功能的程式庫。它簡化了向應用程式添加即時 Web 功能的過程,因此是我們的信令伺服器的理想選擇。

使用 WebRTC 連線對等節點

設定好訊號伺服器後,下一步是使用 WebRTC 在客戶端之間建立點對點連線。 這涉及在每個客戶端上建立 RTCPeerConnection 對象,交換 offer 和 answer 訊息,並協商連接細節。

建立對等連接

在你的 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");
    }
}
$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.");
    }
}
$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# 開發環境的強大功能。這種組合支持直接對等數據傳輸,並且可以與像 IronPDF 這樣的 .NET 庫整合以增加功能。

我如何設置 C# 的 WebRTC 開發環境?

要設置 WebRTC 的 C# 開發環境,您需要從 Microsoft 官方網站安裝 .NET Core SDK。使用如 Visual Studio 之類的整合開發環境高效地管理和編寫代碼。這樣的設置將允許您創建控制台應用程式並整合 WebRTC 功能。

訊號伺服器在 WebRTC 應用程式中扮演什麼角色?

訊號伺服器在 WebRTC 應用程式中非常重要,因為它促進了控制訊息和元數據在對等方之間的交換,以建立連接。它有助於在建立直接對等連接之前,協商會話描述和候選資訊。

如何使用 .NET Core 創建訊號伺服器?

您可以透過開發管理 WebSocket 連接的簡單網頁應用以使用 .NET Core 創建訊號伺服器。利用 SignalR(一個增加實時網頁功能的庫)能夠簡化實施訊號伺服器的過程。

如何在 WebRTC 應用程式中使用 IronPDF 生成 PDF?

IronPDF 能夠整合進入 WebRTC 應用程式,從 HTML 內容生成 PDF。這尤其有助於創建會議紀要或會話摘要等文件,提高實時通訊應用程式的功能。

建立 WebRTC 中的點對點連接涉及哪些步驟?

在 WebRTC 中建立點對點連接涉及創建 RTCPeerConnection 對象,交換 offer 和 answer 訊息,並使用 ICE 候選協商連接詳情。這個過程對於啟用對等方之間的直接通訊至關重要。

TURN 伺服器如何促進 WebRTC 連接?

當直接連接不可行時,TURN 伺服器通過在對等方之間中繼媒體來協助啟用 WebRTC 連接,特別是在限制性網路環境中。這確保了在需要 NAT 穿越的情況下仍然能夠建立連接。

HTML 可以在 .NET 應用程式中轉換為 PDF 嗎?

是的,HTML 可以在 .NET 應用程式中使用像 IronPDF 這樣的庫轉換為 PDF。像 RenderHtmlAsPdf 這樣的方法可以用來將 HTML 內容轉換為 PDF 文件,同時保留原有的樣式和佈局。

Jacob Mellor, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me