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

基于FFMpegCore .Net库的UDP无修改视频推流及解码技术咨询

使用FFMpegCore .Net库通过UDP无修改推流本地视频文件

前置准备

  • 安装FFMpegCore NuGet包:Install-Package FFMpegCore
  • 确保系统已安装FFmpeg可执行文件,若未加入环境变量,需在代码中指定FFmpeg路径。

核心实现逻辑

要实现无修改推流,关键是用FFmpeg的-c copy流复制模式,不对音视频流重新编码,仅复用原始数据。另外UDP传输更适配TS(MPEG-TS)这类分片式封装,若源视频是MP4等不适合UDP的格式,建议保留原始流的同时切换为TS封装——这不算修改流本身,只是调整封装以适配UDP传输特性。

代码示例

using FFMpegCore;
using FFMpegCore.Enums;

// 配置FFmpeg路径(若未在系统环境变量中)
GlobalFFOptions.Configure(new FFOptions { BinaryFolder = @"C:\your-ffmpeg-path\bin", });

// 定义输入输出参数
string localVideoPath = @"D:\source-video.mp4";
string udpPushUrl = @"udp://192.168.1.100:5000?pkt_size=1316"; // pkt_size适配MTU,避免分片丢包

// 构建并执行推流命令
FFMpegArguments
    .FromFileInput(localVideoPath)
    .OutputToUrl(udpPushUrl, options => options
        .CopyAllStreams() // 等价于-c copy,复制所有音视频流
        .WithVideoCodec(VideoCodec.Copy)
        .WithAudioCodec(AudioCodec.Copy)
        .WithFormat("mpegts") // 指定TS封装适配UDP
        .WithCustomArgument("-buffer_size 1024000") // 增大UDP缓冲区减少丢包
    )
    .ProcessSynchronously(); // 同步执行,也可改用ProcessAsynchronously()异步处理

接收端验证(FFmpeg命令)

在接收端机器执行以下命令,验证推流是否正常:

# 保存流到本地
ffmpeg -i udp://0.0.0.0:5000 -c copy received-stream.ts

# 直接播放流
ffplay udp://0.0.0.0:5000

关键注意事项

  • UDP地址端口:确保推流地址为接收端可访问的IP,端口未被占用;如需多播,可使用udp://224.0.0.1:5000这类多播地址,需配合-f mpegts参数。
  • 封装格式适配:MP4、MKV等依赖全局索引的封装不适合UDP传输,必须转为TS封装才能保证流的连续性,此操作仅修改封装,不改动原始音视频流。
  • 异常处理:实际代码需添加try-catch块,捕获文件不存在、端口冲突、FFmpeg执行失败等异常场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:27:39