Seite 1 von 1

OpenCV RTMP Steam anzeige

Verfasst: Donnerstag 26. November 2015, 21:30
von TommiB
Hallo,

ich versuche einen rtmp Stream mit Opencv auf einem Win 7 mit Python 2.7 anzuzeigen.

Code:

Code: Alles auswählen

import cv2
cv2.namedWindow("camCapture", cv2.CV_WINDOW_AUTOSIZE)
cap = cv2.VideoCapture()
cap.open("rtmp://83.169.58.36/live/Stream3")

if not cap.open:
    print "Not open"
while (True):
    err,img = cap.read()
    
    cv2.imshow("camCapture", img)
    if err:
        print err
        break
    cv2.waitKey(30)

cap.release()
cv2.destroyAllWindows()
Beim Ausführen des Codes kommt folgender Fehler:
error: C:\slave\WinInstallerMegaPack\src\opencv\modules\core\src\array.cpp:2482: error: (-206) Unrecognized or unsupported array type

Weiß jemand, wie ich das Array umwandeln muss, damit es angezeigt wird?
Oder hat jemand eine bessere Idee, wie man einen RTMP Stream mit Python anzeigen und den Ton abspielen kann?

Gruß Tommi

Re: OpenCV RTMP Steam anzeige

Verfasst: Donnerstag 26. November 2015, 21:52
von BlackJack
@TommiB: Also bei mir spielt das ein Video ab wenn ich die Bedingung beim ``if err:`` negiere, denn das Flag zeigt keine Fehler an sondern das *kein* Fehler aufgetreten ist. Sollte also auch nicht `err` heissen. Ton ist allerdings keiner dabei.

Ich würde ein Rahmenwerk wie GStreamer versuchen, allerdings weiss ich nicht wie leicht (oder schwierig) das unter Windows zu installieren ist.

Re: OpenCV RTMP Steam anzeige

Verfasst: Freitag 27. November 2015, 08:49
von TommiB
Danke BJack,

unter Windows wird bei mir nichts angezeigt... :( Wäre ja mal ein kl. Erfolg.....

Ich habe mir gstreamer angeschaut... Ist unter Windows verwirrend und wirklich schwer zu installieren..... :K

Ich suche mir aber auch immer Sachen aus, die nicht so einfach zu machen sind!!!

Sonst niemand eine Idee?

Gruß Tommi

Re: OpenCV RTMP Steam anzeige

Verfasst: Freitag 27. November 2015, 10:56
von Dav1d
Ich kann dir VLC und die Pythonbindings von VLC empfehlen, nicht auf Windows benutzt, aber ich nehme mal an, dass es wesentlich einfacher als Gstreamer ist.

Re: OpenCV RTMP Steam anzeige

Verfasst: Freitag 27. November 2015, 11:19
von BlackJack
Stimmt, Quick'n'Dirty:

Code: Alles auswählen

from __future__ import absolute_import, division, print_function 
from time import sleep
from vlc import MediaPlayer


def main():
    player = MediaPlayer('rtmp://83.169.58.36/live/Stream3')
    player.play()
    sleep(5)  # Neccessary to wait for network/start of playing state.
    print('Abbruch mit Strg+C')
    try:
        while True:
            if not player.is_playing():
                break
            sleep(0.5)
    except KeyboardInterrupt:
        player.stop()


if __name__ == '__main__':
    main()
Die Wartepause am Anfang sollte man vielleicht durch entsprechende Ereignisbehandlung ersetzen, aber dann würde das Beispiel komplizierter.

Re: OpenCV RTMP Steam anzeige

Verfasst: Freitag 27. November 2015, 11:54
von TommiB
Hallo BJack und Quick'n'Dirty,

damit werde ich am Wochenende mal experimentieren.
Werde erstmal das vlc installieren....
Unter Windows wieder eine Herausforderung :K

Danke für die Hilfestellung.

Gruß Tommi

Re: OpenCV RTMP Steam anzeige

Verfasst: Freitag 27. November 2015, 13:38
von TommiB
Habe jetzt eine Stunde gegoogelt.
Hat jemand eine funktionierende Anleitung wie man VLC unter Windows 7 installiert?

Gruß Tommi

Re: OpenCV RTMP Steam anzeige

Verfasst: Freitag 27. November 2015, 13:59
von pillmuncher
@TommiB:

- Nach "vlc" googeln
- Auf den ersten Link klicken
- Auf der angezeigten Seite ganz nach unten scrollen
- Auf den Link "VLC for Windows" klicken
- Auf der angezeigten Seite auf den Button mit der passenden Version klicken
- Die exe-Datei speichern (es erscheint ein Dialogfenster zum Speichern)
- Die gespeicherte exe-Datei ausführen

Re: OpenCV RTMP Steam anzeige

Verfasst: Freitag 27. November 2015, 14:15
von TommiB
Hallo pillmuncher,

erstmal danke für die Antwort.

Damit ist dann die Bindung zu Python hergestellt?

Gruß Tommi

Re: OpenCV RTMP Steam anzeige

Verfasst: Freitag 27. November 2015, 14:40
von pillmuncher
@TommiB: Nein, dazu musst du noch ein "pip install python-vlc" ausführen. Da es sich dabei anscheinend um eine Source Code Distribution handelt, muss vorher zudem noch setuptools installiert sein.

Re: OpenCV RTMP Steam anzeige

Verfasst: Sonntag 29. November 2015, 19:29
von TommiB
Hallo Pillmuncher,
erstmal danke für die Antworten.

Das habe ich so gemacht. pip ist mit Erfolg abgeschlossen worden. Im Python34-Verzeichnis liegt eine vlc.py Datei - ich glaube das sind die Bindigs.

Leider kommt beim importieren des vlc (Dein hier im Threat geposteter Code) folgender Fehler:

Traceback (most recent call last):
File "C:\Python34\vlc.py", line 4, in <module>
from vlc import MediaPlayer
File "C:\Python34\vlc.py", line 4, in <module>
from vlc import MediaPlayer
ImportError: cannot import name 'MediaPlayer'

Irgendwie findet Python den MediaPlayer nicht.
Hast Du da noch eine Idee zu?

Gruß Tommi

Re: OpenCV RTMP Steam anzeige

Verfasst: Sonntag 29. November 2015, 19:36
von BlackJack
@TommiB: Du hast *Dein* Modul jetzt aber nicht `vlc` genannt‽

Re: OpenCV RTMP Steam anzeige

Verfasst: Sonntag 29. November 2015, 19:52
von pillmuncher
@TommiB: Der Name der Datei, die den Namen Mediaplayer aus dem Modul vlc importieren möchte, ist augenscheinlich vlc.py. Modulnamen sind Dateinamen abzüglich des .py. Es wird in diesem Modul also versucht, einen Namen aus sich selbst zu importieren. Das kann nicht funktionieren.

Ich vermute, diese Datei hast du selber dort angelegt. Dort werden nämlich von pip idR. keine Module oder Packages installiert, sondern in <Python Installationsverzeichnis>\Lib\site-packages\.

Außerdem heißt das Python Verzeichnis plötzlich C:\Python34, obwohl du oben geschrieben hattest, du würdest Python 2.7 verwenden.

Mein Rat: alles deinstallieren, ggf. alle übriggebliebenen Verzeichnisse von Hand löschen und alles neu installieren. Dein Programm sollte auf keinen Fall im Python Verzeichnis oder in einem Verzeichnis darunter liegen, sondern irgendwo außerhalb, zB., in C:\Dokumente und Einstellungen\<Dein Name>\Eigene Dateien\Projekte\<Dein Programm>\. Oder wie immer das jetzt in Windows heißt. Außerdem darf deine Programmdatei natürlich nicht vlc.py heißen, oder wie sonst ein Modul oder Package, das du importieren möchtest oder das zur Standard Bibliothek gehört.

Re: OpenCV RTMP Steam anzeige

Verfasst: Sonntag 29. November 2015, 19:53
von TommiB
Hey BJack,
Boa, ist man manchmal doof... Stimmt... Natürlich habe ich es vlc genannt....
Jetzt läuft es!!

Gruß Tommi

Re: OpenCV RTMP Steam anzeige

Verfasst: Sonntag 29. November 2015, 20:51
von TommiB
Hallo Pillmuncher,
auf meinen alten Rechner funktionierte das einfach nicht.
ich hatte noch einen ganz frisch eingerichteten Mini ITX Rechner mit Win7.
Dort habe ich dann Python 3.4 neu aufgespielt.

Da läuft es drauf.

Gruß Tommi

Re: OpenCV RTMP Steam anzeige

Verfasst: Dienstag 1. Dezember 2015, 21:28
von TommiB
Hallo,

ich habe es geschafft, VLC in pygame einzubinden.
Ist natürlich nicht von mir. Habe ich im Netz gefunden und für meine Zwecke umgebaut.

Code: Alles auswählen

import os, sys, vlc, pygame

pygame.init()
screen = pygame.display.set_mode((800,600),pygame.NOFRAME)
pygame.display.get_wm_info()
vlcInstance = vlc.Instance()
media = vlcInstance.media_new('rtmp://83.169.58.36/live/Stream3')
player = vlcInstance.media_player_new()
win_id = pygame.display.get_wm_info()['window']
player.set_hwnd(win_id)
player.set_media(media)
pygame.mixer.quit()

player.play()

while player.get_state() != vlc.State.Ended:
        for event in pygame.event.get():
                if event.type == pygame.QUIT:
                        player.stop()
                        pygame.quit()
                        sys.exit(2)
                if event.type == pygame.KEYDOWN:
                        player.stop()
                        pygame.quit()
                        sys.exit(2)
Ich würde so ein Fenster gerne auf dem 2. Monitor haben. Ich hatte schon gelesen, daß Pygame keinen zweiten/dritten Monitor unterstützt.

Auf der Suche bin ich auf Pyglet gestoßen.
Könnte man den VLC Player auch in Pyglet einbinden?

Gruß Tommi

Re: OpenCV RTMP Steam anzeige

Verfasst: Dienstag 1. Dezember 2015, 23:11
von Dav1d
Was willst du genau machen?
Willst du nur einen Stream mit ein bisschen GUI anzeigen? Dann würde ich wx, qt empfehlen (wx ist es panel.GetHandel() iirc). Ob das PyGlet auch kann, keine Ahnung.

Wenn du mehr machen willst, Stream in GL Szene anzeigen, dann wirds komplizierter.

Re: OpenCV RTMP Steam anzeige

Verfasst: Dienstag 1. Dezember 2015, 23:37
von TommiB
Hallo Dav1d,
Ja, ich möchte einen Streamserver regelmäßig abfragen, ob ein Stream anliegt.
Wenn ein Stream anliegt, möchte ich den Stream auf dem 2. oder 3. Monitor in Vollbild ausgeben.

Gruß Tommi

Re: OpenCV RTMP Steam anzeige

Verfasst: Mittwoch 2. Dezember 2015, 01:28
von Dav1d
Das sollte mit wx recht einfach gehen. Fenster machen, Fullscreen machen (ShowFullscreen), ein Panel im Fenster. das Handle (panel.Handle) an VLC weiterreichen.