MJPEGStream 函数示例 Aforge.Video Library.



>有人可以给我一个完整的示例,使用这个用 VB.NET 或 C# 编写的库在图片框中显示流的图像

这是一个非常非常简单的形式,它使用 AForge.Video.MJPEGStream 类。

private MJPEGStream VideoStream = new MJPEGStream();
private void frmMain_Load(object sender, System.EventArgs e)
{
    VideoStream.Source = "URL_HERE";
    VideoStream.Login = "USERNAME_HERE";
    VideoStream.Password = "PASSWORD_HERE";
    VideoStream.Start();
}
private void frmMain_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
{
    VideoStream.Stop();
}
private void VideoStream_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{
    Bitmap FrameData = new Bitmap(eventArgs.Frame);
    pbStream.Image = FrameData;
}
private void VideoStream_VideoSourceError(object sender, AForge.Video.VideoSourceErrorEventArgs eventArgs)
{
    Debug.WriteLine(eventArgs.Description);
}
public frmMain()
{
    InitializeComponent();
    this.FormClosing += new EventHandler(frmMain_FormClosing);
    this.Load += new EventHandler(frmMain_Load);
    VideoStream.NewFrame += new EventHandler(VideoStream_NewFrame);
    VideoStream.VideoSourceError+= new EventHandler(VideoStream_VideoSourceError);
}

另一个例子:

    Imports AForge.Video
Public Class Form1
    Inherits Form
    Private stopWatch As Stopwatch = Nothing
    Private Sub MainForm_FormClosing(sender As Object, e As FormClosingEventArgs)
        CloseCurrentVideoSource()
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        ' create video source
        Dim mjpegSource As New MJPEGStream("http://190.6.206.170/video/mjpg.cgi")
        mjpegSource.Login = "admin"
        mjpegSource.Password = ""
        ' open it
        OpenVideoSource(mjpegSource)
    End Sub
    ' Open video source
    Private Sub OpenVideoSource(source As IVideoSource)
        ' set busy cursor
        Me.Cursor = Cursors.WaitCursor
        ' stop current video source
        CloseCurrentVideoSource()
        ' start new video source
        videoSourcePlayer.VideoSource = source
        videoSourcePlayer.Start()
        ' reset stop watch
        stopWatch = Nothing
        ' start timer
        timer.Start()
        Me.Cursor = Cursors.[Default]
    End Sub
    ' Close video source if it is running
    Private Sub CloseCurrentVideoSource()
        If videoSourcePlayer.VideoSource IsNot Nothing Then
            videoSourcePlayer.SignalToStop()
            ' wait ~ 3 seconds
            For i As Integer = 0 To 29
                If Not videoSourcePlayer.IsRunning Then
                    Exit For
                End If
                System.Threading.Thread.Sleep(100)
            Next
            If videoSourcePlayer.IsRunning Then
                videoSourcePlayer.[Stop]()
            End If
            videoSourcePlayer.VideoSource = Nothing
        End If
    End Sub
    ' New frame received by the player
    Private Sub videoSourcePlayer_NewFrame(sender As Object, ByRef image As Bitmap)
        Dim now As DateTime = DateTime.Now
        Dim g As Graphics = Graphics.FromImage(image)
        ' paint current time
        Dim brush As New SolidBrush(Color.Red)
        g.DrawString(now.ToString(), Me.Font, brush, New PointF(5, 5))
        brush.Dispose()
        g.Dispose()
    End Sub

    Private Sub timer_Tick(sender As System.Object, e As System.EventArgs) Handles timer.Tick
        Dim videoSource As IVideoSource = videoSourcePlayer.VideoSource
        If videoSource IsNot Nothing Then
            ' get number of frames since the last timer tick
            Dim framesReceived As Integer = videoSource.FramesReceived
            If stopWatch Is Nothing Then
                stopWatch = New Stopwatch()
                stopWatch.Start()
            Else
                stopWatch.[Stop]()
                Dim fps As Single = 1000.0F * framesReceived / stopWatch.ElapsedMilliseconds
                Me.Text = fps.ToString("F2") & " fps"
                stopWatch.Reset()
                stopWatch.Start()
            End If
        End If
    End Sub
End Class

所需控件:

System.Windows.Forms.Timer 'For display fps
Aforge.Controls.VideoSourcePlayer 'For Display the video Img

最新更新