2012-05-31 29 views

回答

4

在这里示出的PictureBox流的图像的完整的例子是一个非常,非常简单的形式,它使用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); 
} 
+0

谢谢您的回答,但我不知道为什么我的picturebox没有刷新图像,看这个http://goo.gl/UuqnV –

+0

看你是否添加一个pbStream.Refresh()后,你设置pictureBox im年龄修复它。 – QuantumPhysGuy

+0

另外它看起来不像我的例子,我向你展示了如何订阅该事件。我已经更新了这个例子。看看frmMain(),你应该注意到新的事件订阅。 – QuantumPhysGuy

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