如何解决如何解决JPEG实时流滞后的问题?
我已经使用AForge库在Windows窗体应用程序中编写了IP摄像机(JPEG)实时流的C#代码。它正在运行,但滞后太多。
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using AForge.Video;
namespace CCTV_software
{
public partial class Form1 : Form
{
JPEGStream stream;
JPEGStream stream1;
public Form1()
{
InitializeComponent();
stream = new JPEGStream("ip");
stream1 = new JPEGStream("ip1");
stream.Login = "username";
stream.Password = "password";
stream1.Login = "username1";
stream1.Password = "password1";
stream.NewFrame += stream_NewFrame;
stream1.NewFrame += stream1_NewFrame1;
stream.Start();
stream1.Start();
}
void stream_NewFrame(object sender,NewFrameEventArgs eventArgs)
{
Bitmap bmp = (Bitmap)eventArgs.Frame.Clone();
pictureBox1.Image = bmp;
}
void stream1_NewFrame1(object sender,NewFrameEventArgs eventArgs)
{
Bitmap bp = (Bitmap)eventArgs.Frame.Clone();
pictureBox2.Image = bp;
}
}
尝试添加:
stream.FrameInterval = 0;
但这没什么区别。 请帮我解决这个问题。
编辑:
修改2:
解决方法
@mjwills和我的建议合在一起:
void stream_NewFrame(object sender,NewFrameEventArgs eventArgs)
{
var oldImage = pictureBox1.Image
pictureBox1.Image = eventArgs.Frame; // set to new image without making a copy
oldImage?.Dispose(); // = Dispose previous image,if not null
}
这为您节省了昂贵的克隆费用,并使gc可以及时清理图像。
这些措施的结合应使其有可能提高吞吐量(即减少“滞后”)。进一步的对策可能是缩小图像尺寸或降低质量...
注意:以上措施至少应该改善 滞后,但不能保证使其完全消失,因为滞后也可能在其他地方引起。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。