gpt4 book ai didi

c# - 从在线视频流捕获屏幕截图

转载 作者:行者123 更新时间:2023-12-01 21:35:26 24 4
gpt4 key购买 nike

我需要从 rtmp 或 http 视频流中捕获屏幕截图。我想每 10 秒截取一次屏幕截图并将其保存为 png 或 jpg 文件。

我无法找到任何为我执行此操作的程序,因此我正在考虑使用以下库在 C# 中编写应用程序: http://www.broccoliproducts.com/softnotebook/rtmpclient/rtmpclient.php

不幸的是,rtmpClient lib 似乎只捕获 rtmp 流并将其保存到 flv 文件中,这不是我想要的。有人知道更好的库可以帮助我解决这个问题吗?

最佳答案

我现在找到了解决问题的方法。如果有人想知道,我写了一个小程序,使用 rtmpdump 和 ffmpeg 来捕获图像。

    static void Main(string[] args)
{
const string rtmpDump = "rtmpdump.exe";
const string rtmpDumpArguments = "-v -r rtmp://{stream} -o 1.flv -B 1";
sRunExternalExe(rtmpDump, rtmpDumpArguments);

const string ffmpeg = "ffmpeg.exe";
const string ffmpegArguments = "-i 1.flv -ss 00:00:01 -an -r 1 -vframes 1 -s 400x300 -y 1.jpg";
RunExternalExe(ffmpeg, ffmpegArguments);

var theFile = new FileInfo("1.flv");
if (theFile.Exists)
{
File.Delete("1.flv");
}
}


public static string RunExternalExe(string filename, string arguments = null)
{
var process = new Process();

process.StartInfo.FileName = filename;
if (!string.IsNullOrEmpty(arguments))
{
process.StartInfo.Arguments = arguments;
}

process.StartInfo.CreateNoWindow = true;
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.UseShellExecute = false;

process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardOutput = true;
var stdOutput = new StringBuilder();
process.OutputDataReceived += (sender, args) => stdOutput.Append(args.Data);

string stdError = null;
try
{
process.Start();
process.BeginOutputReadLine();
stdError = process.StandardError.ReadToEnd();
process.WaitForExit();
}
catch (Exception e)
{
throw new Exception("OS error while executing " + Format(filename, arguments) + ": " + e.Message, e);
}

if (process.ExitCode == 0 || process.ExitCode == 2)
{
return stdOutput.ToString();
}
else
{
var message = new StringBuilder();

if (!string.IsNullOrEmpty(stdError))
{
message.AppendLine(stdError);
}

if (stdOutput.Length != 0)
{
message.AppendLine("Std output:");
message.AppendLine(stdOutput.ToString());
}

throw new Exception(Format(filename, arguments) + " finished with exit code = " + process.ExitCode + ": " + message);
}
}

private static string Format(string filename, string arguments)
{
return "'" + filename +
((string.IsNullOrEmpty(arguments)) ? string.Empty : " " + arguments) +
"'";
}

关于c# - 从在线视频流捕获屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12940268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com