一、概述 mediaosup-worker 目前提供了包括 Windows、Linux、macOS 的预编译可执行程序。如果在 .Net 下使用,可以制作成 NuGet 包。
二、基本步骤 1、下载并解压 从 mediasoup-worker 预编译 下载 Windows、Linux、macOS 三个平台的压缩包。
比如 mediaosup-worker 3.15.7 的 macOS arm64 版的下载链接为:https://github.com/versatica/mediasoup/releases/download/3.15.7/mediasoup-worker-3.15.7-darwin-arm64.tgz
2、制作 NuGet 包 制作 NuGet 包有三种方式:dotnet CLI, NuGet CLI, MSBuild。因为要制作的 NuGet 包本身并不依赖于 .Net,使用 NuGet CLI 更方便。
3、发布 NuGet 包 发布使用 dotnet CLI, NuGet CLI 都可以。
三、脚本 1、制作(build_nuget.sh) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 #!/usr/bin/env bash set -eVERSION=${1:-"3.15.7"} PACKAGE_NAME="Tubumu.Mediasoup.Runtimes" OUT_DIR="output" WORK_DIR="build" BASE_URL="https://github.com/versatica/mediasoup/releases/download/${VERSION} " PLATFORMS=( "darwin-arm64|osx-arm64" "darwin-x64|osx-x64" "linux-arm64-kernel6|linux-arm64" "linux-x64-kernel6|linux-x64" "win32-x64|win-x64" ) echo "➡️ 清理旧构建目录..." rm -rf "$WORK_DIR /runtimes" mkdir -p "$WORK_DIR " "$OUT_DIR " echo "📦 下载并解压文件..." for entry in "${PLATFORMS[@]} " ; do key="${entry%%|*} " rid="${entry##*|} " url="${BASE_URL} /mediasoup-worker-${VERSION} -${key} .tgz" tgz_file="$WORK_DIR /$key .tgz" if [[ -f "$tgz_file " ]]; then echo "✅ 已存在: $tgz_file ,跳过下载" else echo "🔽 下载 $url " curl -L "$url " -o "$tgz_file " fi echo "📂 解压到 runtimes/$rid /native/" mkdir -p "$WORK_DIR /runtimes/$rid /native" tar -xzf "$tgz_file " -C "$WORK_DIR /runtimes/$rid /native" done echo "📝 生成 .nuspec 文件..." cat > "$WORK_DIR /$PACKAGE_NAME .nuspec" <<EOF <?xml version="1.0"?> <package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"> <metadata> <id>$PACKAGE_NAME</id> <version>$VERSION</version> <authors>Alby</authors> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Cross-platform mediasoup-worker executables for multiple runtimes.</description> <tags>mediasoup native runtimes</tags> </metadata> <files> EOF for entry in "${PLATFORMS[@]} " ; do key="${entry%%|*} " rid="${entry##*|} " native_path="runtimes/$rid /native" if [[ "$rid " == "win-x64" ]]; then echo " <file src=\"$native_path /mediasoup-worker.exe\" target=\"$native_path /mediasoup-worker.exe\" />" >> "$WORK_DIR /$PACKAGE_NAME .nuspec" else echo " <file src=\"$native_path /mediasoup-worker\" target=\"$native_path /mediasoup-worker\" />" >> "$WORK_DIR /$PACKAGE_NAME .nuspec" fi done echo " </files> </package>" >> "$WORK_DIR /$PACKAGE_NAME .nuspec" echo "📦 构建 NuGet 包..." pushd "$WORK_DIR " > /dev/nullnuget pack "$PACKAGE_NAME .nuspec" -OutputDirectory "../$OUT_DIR " popd > /dev/nullecho "✅ 打包完成: $OUT_DIR /${PACKAGE_NAME} .${VERSION} .nupkg"
2、发布(publish_nuget.sh) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #!/usr/bin/env bash set -ePACKAGE_NAME="Tubumu.Mediasoup.Runtimes" VERSION=${1:-"3.15.7"} API_KEY=${2} if [[ -z "$API_KEY " ]]; then echo "❌ 错误: 你需要提供 NuGet API Key。" echo "用法: ./publish_nuget.sh <mediasoup-worker-version> <your-NuGet-api-key>" exit 1 fi NUPKG_FILE="output/${PACKAGE_NAME} .${VERSION} .nupkg" if [[ ! -f "$NUPKG_FILE " ]]; then echo "❌ 找不到 NuGet 包: $NUPKG_FILE " exit 1 fi echo "🚀 正在发布 $NUPKG_FILE 到 NuGet.org..." dotnet nuget push "$NUPKG_FILE " \ --api-key "$API_KEY " \ --source "https://api.NuGet.org/v3/index.json" \ --skip-duplicate echo "✅ 发布完成!"
发布命令:./publish_nuget.sh <mediasoup-worker-version> <your_API_key>
参考资料 mediasoup-worker 预编译 .NET RID 目录 使用 NuGet.exe CLI 创建包 发布 NuGet 包