【发布时间】:2021-06-08 11:52:27
【问题描述】:
我正在执行一项任务,我需要从 IP 摄像机捕获流,然后我需要将捕获帧发送到 RTMP 服务器。
为了从相机捕获图像帧,我使用 Emgu CV 的 OpenCV C# 包装器。
为了将帧发送到 RTMP 服务器,我使用的是 ffmpeg,但它工作正常。 任何人都可以帮助我如何完成这项任务。
private void ProcessFrame(object sender, EventArgs e)
{
try
{
if (_capture != null && _capture.Ptr != IntPtr.Zero)
{
_capture.Retrieve(_frame, 0);
if (_capture.IsOpened)
{
string imagename = "image" + count + ".png";
_frame.Save(@"C:\\Staging\\Jacob\\CameraImage\\"+ imagename);
var myBinary = ImageToByteArray(_frame.ToBitmap());
if (ffMpegTask != null)
{
ffMpegTask.Write(myBinary, 0, myBinary.Length);
if ((DateTime.UtcNow - starttime).TotalSeconds > 5)
{
ffMpegTask.Write(myBinary, 0, myBinary.Length);
starttime = DateTime.UtcNow;
}
}
else
{
ffMpegg = new NReco.VideoConverter.FFMpegConverter();
ffMpegTask = ffMpegg.ConvertLiveMedia(
null,
"rawvideo",
"rtmp://localhost/live/abcd",
Format.flv,
new ConvertSettings()
{
//CustomInputArgs = String.Format(" -pix_fmt bgr24 -video_size 640x360 -framerate 5 "),
//CustomInputArgs = String.Format(" -pix_fmt bgr24 -video_size 640x480 -framerate 5 ",frameBmp.Width, frameBmp.Height)
CustomInputArgs = String.Format("-y -an -f rawvideo -vcodec rawvideo -pix_fmt bgr24 -video_size 640x480 -framerate 5 -r 5", _frame.Width, _frame.Height),
//CustomOutputArgs = "-c:v libx264 -pix_fmt yuv420p -preset ultrafast -f flv",
CustomOutputArgs = "-c:v libx264 -pix_fmt yuv420p -preset ultrafast -f flv",
}
);
ffMpegTask.Start();
}
}
else
{
process.Close();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
在上面的代码中我不断的获取图像帧,现在我需要把这个帧连续发送到rtmp服务器进行直播。
【问题讨论】:
标签: c# ffmpeg rtmp live-streaming red5