OpenCV nicht Erfassung von Einzelbildern aus einer RTMP-source, während FFmpeg tut
mein Ziel ist es zu erfassen, ein Bild aus einem rtmp-stream, jede Sekunde, und verarbeiten es mithilfe von OpenCV. Ich bin mit FFmpeg version N-71899-g6ef3426 und OpenCV 2.4.9 mit der Java-Schnittstelle (aber ich bin als erstes Experimentieren mit Python).
Für den moment kann ich nur die einfache und schmutzige Lösung, die für die Aufnahme von Bildern mit FFmpeg, speichern Sie in der Festplatte, und Lesen Sie dann die Bilder von meinem OpenCV Programm. Dies ist der FFmpeg-Befehl, den ich verwende:
ffmpeg -i "rtmp://antena3fms35livefs.fplive.net:1935/antena3fms35live-live/stream-lasexta_1 live=1" -r 1 capImage%03d.jpg
Dies ist aktuell für mich, zumindest mit diesem konkreten rtmp-source. Dann würde ich Lesen müssen, diese Bilder aus meinem OpenCV Programm in der richtigen Weise. Ich habe nicht wirklich umgesetzt wird dieses Teil, weil ich versuche eine bessere Lösung zu finden.
Ich denke, der ideale Weg wäre, das zu erfassen rtmp-Bilder direkt von OpenCV, aber ich kann nicht finden die Art und Weise, es zu tun. Dies ist der code in Python, die ich verwende:
cv2.namedWindow("camCapture", cv2.CV_WINDOW_AUTOSIZE)
cap = cv2.VideoCapture()
cap.open('"rtmp://antena3fms35livefs.fplive.net:1935/antena3fms35live-live/stream-lasexta_1 live=1"')
if not cap.open:
print "Not open"
while (True):
err,img = cap.read()
if img and img.shape != (0,0):
cv2.imwrite("img1", img)
cv2.imshow("camCapture", img)
if err:
print err
break
cv2.waitKey(30)
Anstelle von read () - Funktion, ich versuche auch mit Greifer() und retrieve () - Funktionen, ohne gutes Ergebnis. Die read () - Funktion ausgeführt wird, jedes mal, aber keine "img" oder "err" empfangen wird.
Gibt es irgendeinen anderen Weg, es zu tun? oder vielleicht gibt es keine Möglichkeit, Bilder direkt von OpenCV 2.4.9 aus einem stream so?
Ich gelesen habe OpenCV verwendet FFmpeg zu tun, diese Art von Aufgaben, aber wie Sie sehen können, in meinem Fall FFmpeg ist in der Lage, frames aus dem stream, während OpenCV nicht.
In dem Fall ich könnte den Weg nicht finden um die Bilder direkt von OpenCV, meine nächste Idee ist die Leitung irgendwie, FFmpeg Ausgabe OpenCV, das scheint schwieriger zu implementieren.
Jeder Idee,
danke!
UPDATE 1:
Ich bin in Windows 8.1. Da ich mit der python-Skript in Eclipse PyDev, dieses mal habe ich es ausführen von cmd statt, und ich bin immer folgende Warnung:
warning: Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:545)
Diese Warnung bedeutet, soweit ich Lesen konnte, dass entweder der Datei-Pfad falsch ist, oder der codec wird nicht unterstützt. Nun, die Frage ist die gleiche. Ist OpenCV nicht in der Lage, die Bilder aus dieser Quelle?
- Ich erhalte die gleiche Fehlermeldung ,alle updates
- Konnte ich nicht lösen, das es so ist. Ich denke, OpenCV, zumindest 2.4.9-version, unterstützt nicht diese Art von codecs (bezogen auf meine UPDATE-1). Endlich habe ich die integrierte FFmpeg in meinem Programm durch die Fütterung von OpenCV Eingang mit FFmpeg Ausgabe. Wenn Sie finden eine saubere Lösung, lassen Sie es mich bitte wissen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich habe ich verbrachte mehr als einen Tag, um herauszufinden, wie dieses Problem zu lösen. Endlich habe ich dieses problem gelöst mit Hilfe von dieser link.
Hier ist client-side code.
Hinweis: In diesem Fall habe ich eine android-Anwendung zur Echtzeit-video-und senden Sie es an rtmp server wowza, die bereitgestellt wird in PC.So dass ist, wo ich diese erstellte c++ - Implementierung für Echtzeit-video-Verarbeitung.
überprüfen Sie die build-opencv mit ffmpeg。Wenn es richtig ist, Ihr code sollte in Ordnung sein。
Wenn nicht, umbauen, opencv mit ffmpeg。
Unter osx