4

我正在尝试用 C# 创建一个桌面直播应用程序。该程序必须在 Windows 下运行并将图像从用户桌面流式传输到 rtmp。还必须有帧率、视频大小、质量和编解码器(h263 和 h264)选项。我认为 FFmpeg 是最好的选择(如果不是这样,请写评论)。我已经设法使用控制台使用 ffmpeg.exe 完成了我上面提到的所有事情。所以我想知道,我是否可以将 FFmpeg 库包含到 C# 项目中(作为 .lib 或 .dll)来使用它而不是 .exe,从而为我的任务保存合适的功能?对于任何示例,我将不胜感激。

PS 以下是我使用的一些命令示例:

ffmpeg -f dshow -i video=UScreenCapture -vcodec h264 -pix_fmt yuv420p -s 320x240 -f flv rtmp://[my adr]/desc

ffmpeg -f dshow -i video=UScreenCapture -vcodec h264 -r 15 -t 0:1:00 -q 12 -pix_fmt yuv420p -s 320x240 -f flv rtmp://[my adr]/desc
4

2 回答 2

10

这是我的示例,希望对您有所帮助

您可以像这样使用 .exe 文件:

ffmpeg.StartInfo.UseShellExecute = false;
ffmpeg.StartInfo.RedirectStandardOutput = true;
ffmpeg.StartInfo.FileName = Server.MapPath("~/Video_Clips/ffmpeg.exe");

ffmpeg.StartInfo.Arguments = String.Format(@"-i ""{0}"" -threads 8 -f webm -aspect 16:9 -vcodec libvpx -deinterlace -g 120 -level 216 -profile 0 -qmax 42 -qmin 10 -rc_buf_aggressivity 0.95 -vb 2M -acodec libvorbis -aq 90 -ac 2 ""{1}""",
                                           Server.MapPath("~/Video_Clips/" + sNameWithoutExtension + ".wmv"),
                                           Server.MapPath("~/Video_Clips/" + sNameWithoutExtension + ".webm"));
ffmpeg.Start();

ffmpeg.WaitForExit();
于 2013-04-02T07:09:23.267 回答
4

我知道这是一个有点旧的线程,但如果我到这里其他人也会看到这个。您不应该使用它处理信息来启动 ffmpeg。这与它有很大关系。只需使用任何包装器。我犯了这个错误,浪费了我几乎一年的生命......在Xabe.FFmpeg你可以通过运行来做到这一点

await Conversion.New().Start(@"-i ""{0}"" -threads 8 -f webm -aspect 16:9 -vcodec libvpx -deinterlace -g 120 -level 216 -profile 0 -qmax 42 -qmin 10 -rc_buf_aggressivity 0.95 -vb 2M -acodec libvorbis -aq 90 -ac 2 ""{1}");

但这只是一个基本用法,因为它提供了流畅的 API 来使用 FFmpeg。

于 2018-08-17T19:16:08.177 回答