2012-05-31 2 views

ответ

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); 
} 
+0

Спасибо за ваш ответ, но Я не знаю, почему мой фотоаппарат не обновил изображение, посмотрите это http://goo.gl/UuqnV –

+0

Посмотрите, добавляет ли pbStream.Refresh() после установки изображения 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 
Смежные вопросы