Altbilgi içeriğine atla
.NET YARDıM

C# WebRTC (Geliştiriciler İçin Nasıl Çalışır)

WebRTC, veri transferi için ara sunuculara ihtiyaç duyulmadan, web tarayıcıları ve diğer platformlar arasında doğrudan, gerçek zamanlı iletişimi destekleyen bir teknolojidir. Video, ses ve genel veri paylaşımını mümkün kılar, bu da gerçek zamanlı iletişim uygulamaları geliştirmek için güçlü bir araç haline getirir.

Bu eğitim, .NET Core çerçevesine odaklanarak C# kullanarak bir WebRTC çözümü oluşturmayı tanıtır ve sinyal sunucusu ayarlama, TURN sunucularını anlama ve WebRTC'yi IronPDF C# uygulamalarınıza entegre etme konusunda ipuçları sunar.

Ortamınızı Ayarlama

C#'ta bir WebRTC uygulaması geliştirmeye başlamadan önce, geliştirme ortamınızı kurmanız gerekir. Bu, web siteleri, hizmetler ve konsol uygulamaları oluşturmak için çok platformlu bir .NET sürümü olan .NET Core'u yüklemeyi içerir. .NET Core'u Microsoft'un resmi web sitesinden indirip yükleyebilirsiniz. Yüklendikten sonra, C# geliştirme için popüler entegre geliştirme ortamı (IDE) olan Visual Studio veya tercih ettiğiniz herhangi bir düzenleyiciyi kullanarak kodunuzu yazabilirsiniz.

Yeni Bir Konsol Uygulaması Oluşturma

Yeni bir konsol uygulaması projesi oluşturarak başlayın. Terminallerinizi veya komut satırı arayüzünüzü açın ve projenizi kurmak istediğiniz dizine gidin. Ardından aşağıdaki komutu çalıştırın:

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

Bu komut, basit bir "Hello World" konsol uygulaması içeren WebRTCSample adlı yeni bir dizin oluşturur. Proje dizininize gidin, ve WebRTC uygulamanızı kodlamaya başlayabilirsiniz.

WebRTC ve Sinyallemeyi Anlamak

WebRTC gerçek zamanlı iletişimi sağlar, ancak iletişimi koordine etmek ve kontrol mesajlarını göndermek için sinyal adı verilen bir mekanizmaya ihtiyaç vardır. Sinyal, oturum açıklamaları ve bağlantı kurulması için aday bilgileri gibi iletişim oturumu hakkında meta verileri değiş tokuş etmek için kullanılır. C# uygulamaları, WebSockets veya REST API'ler gibi herhangi bir mesaj taşıma mekanizması üzerinde sinyal uygulayabilir.

.NET Core'da Bir Sinyal Sunucusu Uygulama

Bir sinyal sunucusu, doğrudan eşler arası bağlantı kurulmadan önce, eşler arasında mesajları değiş tokuş etmek için aracı olarak görev yapar. .NET Core kullanarak, WebSocket bağlantılarını yöneten basit bir web uygulaması oluşturarak bir sinyal sunucusu uygulayabilirsiniz.

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

Bu kod parçacığı, uygulamalara gerçek zamanlı web işlevsellikleri eklemek için bir kütüphane olan SignalR ile basit bir .NET Core uygulaması kurar. SignalR, uygulamalara gerçek zamanlı web işlevselliği ekleme sürecini basitleştirir, bu da sinyal sunucumuz için iyi bir seçenek haline getirir.

Eşleri WebRTC ile Bağlama

Sinyal sunucusunu kurduktan sonra, sonraki adım müşteriler arasında eşler arası bir bağlantı kurmaktır. Bu, her müşteri üzerinde RTCPeerConnection nesneleri oluşturmayı, teklif ve yanıt mesajları değiş tokuş etmeyi ve bağlantı ayrıntılarını müzakere etmeyi içerir.

Eş Bağlantıyı Oluşturma

C# uygulamanızda çoğunlukla sinyal kısmını yönetecek ve mümkünse WebRTC API'leriyle, bir tarayıcı veya mobil uygulamalar için React Native gibi platformlar aracılığıyla etkileşime geçeceksiniz. Aşağıda bir web istemcisinden nasıl eş bağlantı başlatılacağına dair bir örnek verilmiştir:

// 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

Bu JavaScript kodu, yeni bir eş bağlantı oluşturmayı, ICE adayları ile ilgilenmeyi ve gelen medya akışlarını görüntülemek için bir geri arama kurmayı göstermektedir.

Teklif ve Yanıt Değişimi

Bir bağlantı kurmak için bir eş teklif oluşturur ve diğer eş bir yanıt verir. Bu teklifler ve yanıtlar, daha önce uygulanan sinyal sunucusu aracılığıyla değiş tokuş edilir.

// 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'yi .NET Uygulamalarına Entegre Etme

Temel WebRTC uygulaması genellikle tarayıcı veya diğer istemci tarafı ortamlarında gerçekleştirilse de, .NET uygulamaları sinyal sürecini kolaylaştırabilir, oturum kontrolünü yönetebilir ve NAT geçişi için TURN sunucuları gibi diğer hizmetlerle etkileşimde bulunabilir. Masaüstü veya sunucu tarafı uygulamalar için, Go için açık kaynaklı bir kütüphane olan Pion WebRTC gibi kütüphaneler, WebRTC trafiğini yönetmek için C# ile kullanılabilir veya birlikte kullanılabilir.

Uygulamanızı Çalıştırma

Geliştirilen sinyal sunucusunu çalıştırmak için terminaldeki proje dizinine gidin ve şu komutu çalıştırın:

dotnet run
dotnet run
SHELL

Bu komut, uygulamanızı derler ve çalıştırır, uyguladığınız sinyal sunucusunu başlatır. Web istemcileriniz artık bu sunucuya bağlanarak sinyal mesajları değiştirebilirler.

IronPDF'ye Giriş

C# WebRTC (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - IronPDF web sayfası

IronPDF, PDF oluşturma ve düzenleme yeteneklerini .NET uygulamalarına getiren çok yönlü bir kütüphanedir, geliştiricilere programatik olarak PDF belgeleri oluşturma, okuma ve düzenleme imkanı tanır. IronPDF, HTML'den PDF'ye PDF oluşturma, formları doldurma, metin çıkarma ve belgeleri güvenceye alma gibi çeşitli görevleri destekler. Bu, kullanıcı verileri veya uygulama çıktısına dayanan raporlar, faturalar ve dinamik belgeler oluştururken son derece kullanışlı hale getirir.

IronPDF'nin temel özelliklerinden biri HTML'den PDF'ye dönüştürme yeteneğidir, bu da düzenlerinizi ve stillerinizi korur. Web içeriğinden PDF üretir, bu da raporlar, faturalar ve belgeler için mükemmeldir. HTML dosyalarını, URL'leri ve HTML dizgelerini kolayca PDF'lere dönüştürebilirsiniz.

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 Kurulumu

Projenizde IronPDF'yi kullanmadan önce, onu .NET uygulamanıza eklemelisiniz. NuGet Package Manager kullanılarak yapılabilir, bu da projelerinizdeki harici kitaplıkları yönetme sürecini basitleştirir. IronPDF'yi yüklemek için, NuGet Package Manager Konsolunda aşağıdaki komutu kullanabilirsiniz:

Install-Package IronPdf

Kullanım Durumu: WebRTC Uygulamasında IronPDF ile Toplantı Tutanaklarını PDF Olarak Üretme

WebRTC'yi kullanarak, çevrimiçi toplantılar veya sanal sınıflar için tasarlanmış bir gerçek zamanlı iletişim uygulaması geliştirdiğinizi hayal edin. Bu uygulama, kullanıcıların sesli ve görüntülü aramalara katılmasına, ekranlarını paylaşmasına ve belgeler üzerinde gerçek zamanlı işbirliği yapmasına olanak tanır. Bu uygulamanın değerli bir özelliği, görüşülen önemli noktalar, alınan kararlar ve eylem maddeleri içeren oturumun toplantı tutanakları veya özetini otomatik olarak PDF formatında oluşturarak dağıtma yeteneği olacaktır. İşte burada IronPDF devreye girer.

Uygulama Adımları

  1. Toplantı İçeriğini Yakalama: WebRTC oturumu boyunca, sohbet mesajları, paylaşılan notlar veya vurgulanan eylem öğeleri gibi metin tabanlı içerikler yakalanır. Bu içerik HTML olarak biçimlendirilebilir, kolay stil verme ve düzenleme için olanak sağlar (örneğin, eylem öğeleri için listeler ve önemli konular için başlıklar kullanılarak).
  2. HTML Şablonunu Oluşturma: Oturumun sonunda, yakalanan içerikler HTML şablonuna biçimlendirilir. Bu şablon, toplantının başlığı, tarihi, katılımcıları ve farklı türde içerikler için yapılandırılmış bölümler (tartışma noktaları, kararlar, eylem öğeleri) içerir.
  3. HTML'yi PDF'ye Dönüştürme: Toplantı sona erdiğinde ve HTML şablonu hazırlandığında, IronPDF bu HTML içeriğini PDF belgesine dönüştürmek için kullanılır. Bu dönüşüm, HTML'de tanımlanan stil ve düzenin PDF'ye korunmasını sağlar, böylece belge okunması kolay ve profesyonel bir görünüme sahip olur.

İşte örnek bir PDF kodu:

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

Sonuç

C# WebRTC (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - IronPDF lisans sayfası

Bu makalede, C# ve .NET Core kullanarak temel bir WebRTC uygulaması nasıl oluşturulur konusunu inceledik. Geliştirme ortamınızı kurmayı, yeni bir konsol uygulaması oluşturmayı, sinyal sunucusu uygulamayı ve gerçek zamanlı iletişim için eş bağlantıları başlatmayı ele aldık. WebRTC, gerçek zamanlı iletişim uygulamaları için sayısız imkanlar açar ve C# ve .NET Core ile farklı platformlar ve cihazlar üzerinde çalışan sağlam, ölçeklenebilir çözümler oluşturabilirsiniz. Lisans ve satın alma bilgileri için IronPDF Lisans Sayfasını ziyaret edin. Satın almaya karar verdiğinizde, lisans $799 itibariyle başlar.

Sıkça Sorulan Sorular

WebRTC'yi C# ve .NET Core ile kullanmanın faydaları nelerdir?

WebRTC, C# ve .NET Core ile birleştirildiğinde, geliştiriciler güçlü WebRTC ve C# programlama ortamının özelliklerinden yararlanan gerçek zamanlı iletişim uygulamaları oluşturabilirler. Bu kombinasyon doğrudan eşler arası veri transferi destekler ve ek işlevler için IronPDF gibi .NET kütüphaneleri ile entegre edilebilir.

C# içinde WebRTC için bir geliştirme ortamı nasıl kurarım?

C# içinde WebRTC için bir geliştirme ortamı kurmak için Microsoft'un resmi web sitesinden .NET Core SDK'sını indirmeniz gerekir. Kodunuzu yönetmek ve yazmak için Visual Studio gibi bir IDE kullanın. Bu kurulum, WebRTC işlevlerini entegre etmenizi ve konsol uygulamaları oluşturmanızı sağlar.

Bir WebRTC uygulamasında sinyalizasyon sunucusu ne rol oynar?

Bir WebRTC uygulamasında sinyalizasyon sunucusu, eşler arasında kontrol mesajları ve meta verilerin değişimini kolaylaştırarak bir bağlantı kurulmasına olanak tanır. Bu, doğrudan eşler arası bir bağlantı sağlanmadan önce oturum tanımlarının ve aday bilgilerinin müzakeresinde yardımcı olur.

NET Core kullanarak bir sinyal sunucusu nasıl oluşturabilirim?

Sinyal sunucusunu NET Core kullanarak, WebSocket bağlantılarını yöneten basit bir web uygulaması geliştirmek suretiyle oluşturabilirsiniz. Gerçek zamanlı web işlevsellikleri ekleyen SignalR kütüphanesini kullanmak, sinyal sunucusunu uygulama sürecini daha da kolaylaştırabilir.

WebRTC uygulamalarında PDF oluşturmak için IronPDF nasıl kullanılır?

IronPDF, WebRTC uygulamalarına entegre edilerek HTML içeriğinden PDF oluşturulmasını sağlar. Bu, özellikle toplantı tutanakları veya oturum özetleri gibi belgeler oluşturmak için faydalıdır ve gerçek zamanlı iletişim uygulamalarının işlevselliğini artırır.

WebRTC'de eşler arası bağlantı kurmak için hangi adımlar gereklidir?

RTCPeerConnection nesneleri oluşturmak, teklif ve yanıt mesajlarıyla değişim yapmak ve ICE adaylarını kullanarak bağlantı ayrıntılarını müzakere etmek WebRTC'de eşler arası bir bağlantı kurmak için gereklidir. Bu süreç, paylaşım doğrudan iletişimi etkinleştirmek için önemlidir.

TURN sunucuları WebRTC bağlantılarını nasıl kolaylaştırır?

TURN sunucuları, doğrudan bağlantının mümkün olmadığı durumlarda, özellikle kısıtlayıcı ağ ortamlarında, eşler arasında medya ileterek WebRTC bağlantılarını kolaylaştırır. Bu, NAT geçişinin gerektiği durumlarda bile bağlantı sağlamayı garanti eder.

NET uygulamalarında HTML PDF'ye dönüştürülebilir mi?

Evet, NET uygulamalarında IronPDF gibi kütüphaneler kullanılarak HTML PDF'ye dönüştürülebilir. RenderHtmlAsPdf gibi yöntemler, HTML içeriğini, orijinal stil ve düzeni koruyarak PDF belgesine dönüştürmek için kullanılabilir.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Chief Technology Officer

Jacob Mellor, Iron Software'in Teknoloji Müdürü ve C# PDF teknolojisinin öncüsü olan vizyoner bir mühendis. Iron Software’in temel kod tabanının ilk geliştiricisi olarak, şirketin ürün mimarisini kuruluşundan bu yana şekillendirdi ve CEO Cameron Rimington ile birlikte NASA, Tesla ve ...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara