You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP下C#如何从googlevideos videoplayback链接下载音频

UWP中高效下载YouTube音频直链的解决方案

问题背景

已获取YouTube音频的临时直链(示例链接如下),需要在UWP项目的public async Task Download(string url)方法中实现高效下载:

https://rr6---sn-n8v7znsr.googlevideo.com/videoplayback?expire=1691861737&ei=iW7XZM3hHciwv_IP3oe_oAk&ip=kekw&id=o-AH6t-rpPJjbEN9qDVOJlCEU2FTLNrvRtMslTqQ0T4as4&itag=251&source=youtube&requiressl=yes&mh=QC&mm=31%2C26&mn=sn-n8v7znsr%2Csn-c0q7lnse&ms=au%2Conr&mv=m&mvi=6&pl=21&gcr=ru&initcwndbps=1281250&vprv=1&mime=audio%2Fwebm&gir=yes&clen=1641566&dur=108.561&lmt=1689370605701687&mt=1691839772&fvip=5&keepalive=yes&fexp=24007246&c=ANDROID_TESTSUITE&txp=5432434&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cgcr%2Cvprv%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRQIgV1LPFsKrQ558nwhqkatBGRWchRXYBWo1fSrc0fSujtkCIQDfpHxCk8hwwyTezP6e6yIGXR7yGNxLfv9qEkP99C_eiw%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIgFvFgT1ALo6OrKY_QRvD6-XilXezUdxdObEtQ3Xo9DaQCIQCD-LWIv8v0y04x0ZExDjfZ_kFZbbxBYHaDejTILMmHug%3D%3D

此前尝试的YoutubeExplode方案因UWP无法使用File类导致权限报错,VideoLibrary+MediaToolKit需先下载视频再转码,效率低下。以下是适配UWP的原生高效下载方案:

解决方案代码

利用UWP原生的HttpClient和StorageFileAPI实现直接音频流下载,无需转码:

using Windows.Storage;
using Windows.Storage.Pickers;
using System.Net.Http;
using System.IO;

public async Task Download(string url)
{
    // 初始化HttpClient,设置浏览器UA避免请求被拦截
    using var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
    );

    // 获取音频流
    using var audioStream = await httpClient.GetStreamAsync(url);

    // 让用户选择保存位置和文件名
    var savePicker = new FileSavePicker();
    savePicker.SuggestedStartLocation = PickerLocationId.Downloads;
    savePicker.FileTypeChoices.Add("WebM 音频文件", new List<string> { ".webm" });
    savePicker.SuggestedFileName = "YouTube_Audio";

    var targetFile = await savePicker.PickSaveFileAsync();
    if (targetFile == null)
        return; // 用户取消操作

    // 将音频流写入目标文件
    using var fileStream = await targetFile.OpenStreamForWriteAsync();
    await audioStream.CopyToAsync(fileStream);
    await fileStream.FlushAsync();
}

关键注意事项

  • 权限配置:在项目的Package.appxmanifest中开启Internet (Client)权限,确保应用能发起网络请求;使用FileSavePicker无需额外文件访问权限(用户主动选择路径)。
  • 请求头设置:必须添加浏览器UA,否则Google视频服务器可能拒绝请求(返回403错误)。
  • 链接有效期:YouTube的直链带有expire参数,需确保调用下载时链接未过期。
  • 高效性:直接下载音频流,跳过视频下载和转码步骤,与浏览器下载效率一致。

内容的提问来源于stack exchange,提问作者aexra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 10:43:12