1

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

4

2 回答 2

4

这是一个使用 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);
}
于 2012-05-31T14:46:08.827 回答
0

另一个例子:

    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
于 2012-05-31T17:46:15.323 回答