Skip to content

Commit 268e697

Browse files
authored
Openai bridge demo (sipsorcery-org#1390)
* wip: openai bridge demo. * Fixed audio timestamps for bridge. * Successfully deployed to k8s. * Added readme.
1 parent dbd99c3 commit 268e697

13 files changed

Lines changed: 820 additions & 17 deletions

File tree

examples/OpenAIExamples/OpenAI.Realtime/OpenAI.Realtime.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
<TargetFramework>net8.0</TargetFramework>
55
<LangVersion>12.0</LangVersion>
66
<Nullable>enable</Nullable>
7+
<Version>8.0.0</Version>
8+
<AssemblyVersion>8.0.0</AssemblyVersion>
9+
<FileVersion>8.0.0</FileVersion>
710
</PropertyGroup>
811

912
<ItemGroup>

examples/OpenAIExamples/OpenAIExamples.sln

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebRTCOpenAI", "WebRTCOpenA
1313
EndProject
1414
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenAI.Realtime", "OpenAI.Realtime\OpenAI.Realtime.csproj", "{91BEB869-8AF4-4F99-96A3-BAC667D5DE40}"
1515
EndProject
16+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebRTCOpenAIBridge", "WebRTCOpenAIBridge\WebRTCOpenAIBridge.csproj", "{B5E7A2B5-FF61-A038-5FDB-C45A49F1BA46}"
17+
EndProject
1618
Global
1719
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1820
Debug|Any CPU = Debug|Any CPU
@@ -39,8 +41,15 @@ Global
3941
{91BEB869-8AF4-4F99-96A3-BAC667D5DE40}.Debug|Any CPU.Build.0 = Debug|Any CPU
4042
{91BEB869-8AF4-4F99-96A3-BAC667D5DE40}.Release|Any CPU.ActiveCfg = Release|Any CPU
4143
{91BEB869-8AF4-4F99-96A3-BAC667D5DE40}.Release|Any CPU.Build.0 = Release|Any CPU
44+
{B5E7A2B5-FF61-A038-5FDB-C45A49F1BA46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
45+
{B5E7A2B5-FF61-A038-5FDB-C45A49F1BA46}.Debug|Any CPU.Build.0 = Debug|Any CPU
46+
{B5E7A2B5-FF61-A038-5FDB-C45A49F1BA46}.Release|Any CPU.ActiveCfg = Release|Any CPU
47+
{B5E7A2B5-FF61-A038-5FDB-C45A49F1BA46}.Release|Any CPU.Build.0 = Release|Any CPU
4248
EndGlobalSection
4349
GlobalSection(SolutionProperties) = preSolution
4450
HideSolutionNode = FALSE
4551
EndGlobalSection
52+
GlobalSection(ExtensibilityGlobals) = postSolution
53+
SolutionGuid = {DB232AA7-4715-4668-AD66-DFC0FDD5FBC2}
54+
EndGlobalSection
4655
EndGlobal
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Stage 1: Build FFmpeg Image
2+
FROM sipsorcery/ffmpegbuild:7.0 AS ffmpeg
3+
4+
# Stage 2: Base Image - Install FFmpeg dependencies (This will be cached)
5+
FROM ubuntu:24.04 AS base
6+
7+
ENV DEBIAN_FRONTEND=noninteractive
8+
9+
# Install the required libraries for FFmpeg in the final image (as root)
10+
RUN apt-get update && apt-get install -y \
11+
libdrm2 \
12+
libsdl2-2.0-0 \
13+
libsndio7.0 \
14+
libxvidcore4 \
15+
libxv1 \
16+
libass9 \
17+
libvpx-dev \
18+
libsdl2-dev \
19+
libx264-dev \
20+
libx265-dev \
21+
libopus-dev \
22+
libfreetype6-dev \
23+
libvorbis-dev \
24+
libxvidcore-dev \
25+
libavutil-dev \
26+
libssl-dev \
27+
libavdevice-dev \
28+
libfdk-aac-dev \
29+
aspnetcore-runtime-8.0 \
30+
&& rm -rf /var/lib/apt/lists/*
31+
32+
WORKDIR /app
33+
EXPOSE 8081
34+
35+
# Stage 3: Build .NET Application (Only rebuilds if source code changes)
36+
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
37+
38+
ARG BUILD_CONFIGURATION=Release
39+
WORKDIR /src
40+
41+
# 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
45+
46+
COPY [".", "."]
47+
48+
# Publish the application
49+
FROM build AS publish
50+
RUN dotnet publish "./WebRTCOpenAIBridge.csproj" -c $BUILD_CONFIGURATION -o /app/publish
51+
52+
# Stage 4: Final Image to Run the App
53+
FROM base AS final
54+
55+
WORKDIR /app
56+
57+
# Copy the published app from the build image
58+
COPY --from=publish /app/publish .
59+
60+
# Copy FFmpeg binaries and libraries from the FFmpeg build image
61+
COPY --from=ffmpeg /usr/local/bin/ffmpeg /usr/local/bin/
62+
COPY --from=ffmpeg /usr/local/bin/ffprobe /usr/local/bin/
63+
COPY --from=ffmpeg /usr/local/lib/libavcodec.so.61.3.100 /usr/local/lib/
64+
COPY --from=ffmpeg /usr/local/lib/libavdevice.so.61.1.100 /usr/local/lib/
65+
COPY --from=ffmpeg /usr/local/lib/libavfilter.so.10.1.100 /usr/local/lib/
66+
COPY --from=ffmpeg /usr/local/lib/libavformat.so.61.1.100 /usr/local/lib/
67+
COPY --from=ffmpeg /usr/local/lib/libavutil.so.59.8.100 /usr/local/lib/
68+
COPY --from=ffmpeg /usr/local/lib/libpostproc.so.58.1.100 /usr/local/lib/
69+
COPY --from=ffmpeg /usr/local/lib/libswresample.so.5.1.100 /usr/local/lib/
70+
COPY --from=ffmpeg /usr/local/lib/libswscale.so.8.1.100 /usr/local/lib/
71+
72+
# Update library links
73+
RUN ldconfig
74+
75+
# Ensure FFmpeg is available in the PATH for your app
76+
ENV PATH="/usr/local/bin:${PATH}"
77+
78+
# Set entrypoint to run the .NET application
79+
ENTRYPOINT ["dotnet", "WebRTCOpenAIBridge.dll"]

0 commit comments

Comments
 (0)