Skip to content

Commit e0f787b

Browse files
committed
Added TURN option to browser bridge demo.
1 parent 29a631c commit e0f787b

File tree

3 files changed

+48
-7
lines changed

3 files changed

+48
-7
lines changed

examples/BrowserBridge/BrowserBridge.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@
1313
<PackageReference Include="LanguageExt.Core" Version="4.4.9" />
1414
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.0" />
1515
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
16+
<PackageReference Include="SIPSorcery.OpenAI.WebRTC" Version="8.0.4" />
1617
</ItemGroup>
1718

18-
<ItemGroup>
19+
<!--<ItemGroup>
1920
<ProjectReference Include="..\..\src\SIPSorcery.OpenAI.WebRTC.csproj" />
20-
</ItemGroup>
21+
</ItemGroup>-->
2122

2223
</Project>

examples/BrowserBridge/Dockerfile

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,15 @@ ARG BUILD_CONFIGURATION=Release
3939
WORKDIR /src
4040

4141
# Add local NuGet source (replace with your actual package version)
42-
RUN mkdir -p /local-nuget
43-
COPY ./local-nuget/*.nupkg /local-nuget/
44-
RUN dotnet nuget add source /local-nuget --name local
42+
#RUN mkdir -p /local-nuget
43+
#COPY ./local-nuget/*.nupkg /local-nuget/
44+
#RUN dotnet nuget add source /local-nuget --name local
4545

4646
COPY [".", "."]
4747

4848
# Publish the application
4949
FROM build AS publish
50-
RUN dotnet publish "./WebRTCOpenAIBridge.csproj" -c $BUILD_CONFIGURATION -o /app/publish
50+
RUN dotnet publish "./BrowserBridge.csproj" -c $BUILD_CONFIGURATION -o /app/publish
5151

5252
# Stage 4: Final Image to Run the App
5353
FROM base AS final
@@ -76,4 +76,4 @@ RUN ldconfig
7676
ENV PATH="/usr/local/bin:${PATH}"
7777

7878
# Set entrypoint to run the .NET application
79-
ENTRYPOINT ["dotnet", "WebRTCOpenAIBridge.dll"]
79+
ENTRYPOINT ["dotnet", "BrowserBridge.dll"]

examples/BrowserBridge/Program.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,16 @@
3838
using SIPSorcery.OpenAIWebRTC.Models;
3939
using SIPSorceryMedia.Abstractions;
4040
using System;
41+
using System.Collections.Generic;
4142
using System.Threading.Tasks;
4243

4344
namespace demo;
4445

4546
class Program
4647
{
48+
private static string? _stunUrl = string.Empty;
49+
private static string? _turnUrl = string.Empty;
50+
4751
static async Task Main(string[] args)
4852
{
4953
Log.Logger = new LoggerConfiguration()
@@ -58,6 +62,9 @@ static async Task Main(string[] args)
5862
Log.Information("WebRTC OpenAI Browser Bridge Demo Program");
5963

6064
var openAiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY") ?? string.Empty;
65+
_stunUrl = Environment.GetEnvironmentVariable("STUN_URL");
66+
_turnUrl = Environment.GetEnvironmentVariable("TURN_URL");
67+
bool.TryParse(Environment.GetEnvironmentVariable("WAIT_FOR_ICE_GATHERING_TO_SEND_OFFER"), out var waitForIceGatheringToSendOffer);
6168

6269
if (string.IsNullOrWhiteSpace(openAiKey))
6370
{
@@ -107,6 +114,11 @@ static async Task Main(string[] args)
107114
config,
108115
RTCSdpType.offer);
109116

117+
webSocketPeer.OfferOptions = new RTCOfferOptions
118+
{
119+
X_WaitForIceGatheringToComplete = waitForIceGatheringToSendOffer
120+
};
121+
110122
var browserPeerTask = webSocketPeer.Run();
111123

112124
SetOpenAIPeerEventHandlers(openAiWebRTCEndPoint);
@@ -183,6 +195,18 @@ private static void ConnectPeers(RTCPeerConnection browserPc, IWebRTCEndPoint op
183195
/// </summary>
184196
private static Task<RTCPeerConnection> CreateBrowserPeerConnection(RTCConfiguration pcConfig)
185197
{
198+
pcConfig.iceServers = new List<RTCIceServer>();
199+
200+
if (!string.IsNullOrWhiteSpace(_stunUrl))
201+
{
202+
pcConfig.iceServers.Add(_stunUrl.ParseStunServer());
203+
}
204+
205+
if (!string.IsNullOrWhiteSpace(_turnUrl))
206+
{
207+
pcConfig.iceServers.Add(_turnUrl.ParseStunServer());
208+
}
209+
186210
var peerConnection = new RTCPeerConnection(pcConfig);
187211

188212
MediaStreamTrack audioTrack = new MediaStreamTrack(AudioCommonlyUsedFormats.OpusWebRTC, MediaStreamStatusEnum.SendRecv);
@@ -191,3 +215,19 @@ private static Task<RTCPeerConnection> CreateBrowserPeerConnection(RTCConfigurat
191215
return Task.FromResult(peerConnection);
192216
}
193217
}
218+
219+
public static class StunServerExtensions
220+
{
221+
public static RTCIceServer ParseStunServer(this string stunServer)
222+
{
223+
var fields = stunServer.Split(';');
224+
225+
return new RTCIceServer
226+
{
227+
urls = fields[0],
228+
username = fields.Length > 1 ? fields[1] : null,
229+
credential = fields.Length > 2 ? fields[2] : null,
230+
credentialType = RTCIceCredentialType.password
231+
};
232+
}
233+
}

0 commit comments

Comments
 (0)