Zugriff auf Funkkamera
-
Hallo,
Ich würde gerne das Bild meiner Funkkamera von Pollin (http://www.pollin.de/shop/dt/NzM4OTE0OTk-/Haustechnik/Sicherheitstechnik/Kameras/USB_Funkkamera_2_4_GHz.html) in eine picturebox übertragen.
Habe das ganze davor mit meiner Webcam durchgeprobt und bin auf diesen Code gestoßen:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Emgu.CV; using Emgu.CV.Structure; using Emgu.CV.UI; using Emgu.CV.GPU; // für Webcam using AForge.Video; using AForge.Video.DirectShow; using System.Threading; using AForge.Imaging.Filters; using System.Diagnostics; #region Webcam //Unser Webcam Objekt VideoCaptureDevice videoSource; void InitWebCam(int nr) { //Auflistung aller Webcam/Videogeräte FilterInfoCollection videosources = new FilterInfoCollection(FilterCategory.VideoInputDevice); //Überprüfen, ob mindestens eine Webcam gefunden wurde if (videosources != null) { //Die Webcam "nr" an unser Webcam Objekt binden videoSource = new VideoCaptureDevice(videosources[nr].MonikerString); try { //Überprüfen ob die Webcam Technische-Eigenschaften mitliefert if (videoSource.VideoCapabilities.Length > 0) { string lowestSolution = "10000;0"; //Das Profil mit der niedrigsten Auflösung suchen for (int i = 0; i < videoSource.VideoCapabilities.Length; i++) { if (videoSource.VideoCapabilities[i].FrameSize.Width < Convert.ToInt32(lowestSolution.Split(';')[0])) lowestSolution = videoSource.VideoCapabilities[i].FrameSize.Width.ToString() + ";" + i.ToString(); } //Dem Webcam Objekt die niedrigstmögliche Auflösung übergeben videoSource.DesiredFrameSize = videoSource.VideoCapabilities[Convert.ToInt32(lowestSolution.Split(';')[1])].FrameSize; } } catch (Exception e) { MessageBox.Show(e.ToString()); } //Dem Webcam Objekt den NewFrame Eventhandler zuweisen. //Dieser schlägt bei jedem eingehenden Bild der Webcam an videoSource.NewFrame += new AForge.Video.NewFrameEventHandler(videoSource_NewFrame); //Die Webcam aktivieren videoSource.Start(); } } void videoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs) { //Jedes ankommende Bild von der Webcam der Picturebox zuweisen pictureBoxVideoSelf.BackgroundImage = (Image)eventArgs.Frame.Clone(); } #endregion
Das ganze funktioniert auch ganz gut mit der Webcam. Bei meiner Funkkamera bekomme ich nur das erste Bild und dann nichts mehr.
Ich habe schon ein paar Beispiele was mir bei der google Suche über den Weg gelaufen sind ausprobiert, welche aber nicht funktioniert haben bzw. sogar einen Bluescreen ausgelöst haben.Danke schonmal für eure Hilfe.
MfG Berghuhn
-
Ich habe die Funkkamera nun als TV-Karte "behandelt" und siehe da ich bekomme ein Bild mithilfe von DirectShow.
Jetzt habe ich ein weiteres Problem.// Render video (video -> mux) if ( VideoDevice != null ) { // Try interleaved first, because if the device supports it, // it's the only way to get audio as well as video cat = PinCategory.Preview; med = MediaType.Interleaved; hr = captureGraphBuilder.RenderStream( ref cat, ref med, videoDeviceFilter, videoCompressorFilter, muxFilter ); if( hr < 0 ) { med = MediaType.Video; hr = captureGraphBuilder.RenderStream( ref cat, ref med, videoDeviceFilter, videoCompressorFilter, muxFilter ); if ( hr == -2147220969 ) throw new DeviceInUseException( "Video device", hr ); if( hr < 0 ) Marshal.ThrowExceptionForHR( hr ); } }
Wie bekomme ich anstatt das Video im temporären Ordner das Bild bzw noch zusätzlich das gerade aktuelle Bild als Bitmap zum Beispiel?
Ich habe schon versucht auf das Video zuzugreifen und dann die Bilder rauszuholen was leider nicht geklappt hat, da das Video vom Porgramm weiter verwendet wird.
Das Video wird in einem Control angezeigt und ich habe auch schon verzweifelt versucht es von dort zu beziehen, was leicher auch nicht funktionierte.
-
Versuch mal Dein Glück mit der Library -> http://www.aforgenet.com/framework/samples/video.html ... schreib dann mal bitte wie komplex es war die Library zu verwenden
danke, mogel
-
Danke für deinen Tipp
Es war für mich dank der Beispiele ziemlich einfach diese Libary zu benutzen.
Ich habe etwa 20 mins daran gearbeitet und kam an mein Ziel das ich erreichen wollte.
Allerdings geht der RAM verbrauch ziemlich schnell von 20 MB auf 1,2 GB hoch bis er sich wieder zurücksetzt auf ca. 20 MB.
-
hmmm ... kann sein das Du die Bitmaps selber disposen musst
-
Hi leute,
Ich versuche seit 2 Tagen mit dem (fast) gleichen Code meine Webcam mit ner pictureBox zu verbinden.
Die Webcam wird gefunden, angesteuert und geht an (LED an).
Ich bekomme aber nichts in der pictureBox angezeigt:Ich schreibe allerdings in CLI, weshalb ich mir den Code angepasst habe.
Nur mit dem Umschreiben der Zuweisung des Eventhandlers
videoSource.NewFrame += new AForge.Video.NewFrameEventHandler(videoSource_NewFrame);
klappt das nicht so ganz
videoSource->NewFrame += gcnew AForge::Video::NewFrameEventHandler(videoSource_NewFrame());
Bei der "Schreibweise" werden eben 2 Argumente gefordert(Object^, NewFrameEventArgs^), die ich einfach nicht parat hab
mit...
private void videoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs) { //ankommende bilder aus dem event unserer picturebox zuweisen pictureBoxCam.Image = (Image)eventArgs.Frame.Clone(); }
bin ich mir auch nicht sicher...
Ich lasse diese Ereignisse immer vom Designer erstellen,
in dem Fall hab ich es selber geschrieben.
Und bei der Zuweisung
pictureBox1->Image = (Bitmap)eventArgs->Frame->Clone();
bekomm ich auch iwie keine Konvertierung zustande.
Ich wäre über jeden Tipp dankbar.
Grüße