ayufan/camera-streamer empfangen decodieren und in pyqt anzeigen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
sauterle
User
Beiträge: 81
Registriert: Mittwoch 27. Juli 2022, 21:33

wie helfen einem diese links weiter, der eine behandelt glaube ich dass Problem in c++ und der andere irgendein Projekt dass einen webrtc stream zwar anzeigt aber ich weiß leider auch nicht wie man dass in pyqt anzeigt abgesehen davon kriege ich das Projekt mit meinen bescheidenen Kenntnissen nicht zum laufen.gibt es denn keine Bibliothek mit der dass in pythoncode integrierbar ist? Danke im voraus und
LG sauterle
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bei Qt muss man *immer* mit C++-Beispielen rechnen, und sich an denen entlanghangeln. Was aber ueblicherweise ziemlich direkt und einfach geht.

Die "Ein Link, eine perfekte Loesung"-Welt ist leider noch nicht existent. Ich habe jedenfalls nichts gefunden, du hast nix gefunden - dann wird es wohl kompliziert sein, und muss mehr erarbeitet werden. Du darfst gerne selbst Dokumentation und Code hinterlassen fuer die naechste arme Seele.
sauterle
User
Beiträge: 81
Registriert: Mittwoch 27. Juli 2022, 21:33

Danke für deine Antwort __deets__
Ich glaube dieser c++ code tut genau dass was ich will nun kann ich aber kein c++ darum möchte ich euch fragen ob jemand grob zusammenfassen könnte was darin passiert.

Code: Alles auswählen


#include <QApplication>
#include <QUrl>
#include <QWebEngineView>

class WebEnginePage: public QWebEnginePage{
    Q_OBJECT
public:
    WebEnginePage(QObject *parent = Q_NULLPTR):QWebEnginePage(parent){
        connect(this, &WebEnginePage::featurePermissionRequested, this, &WebEnginePage::onFeaturePermissionRequested);
    }
private Q_SLOTS:
    void onFeaturePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature feature){

        if(feature  == QWebEnginePage::MediaAudioCapture
                || feature == QWebEnginePage::MediaVideoCapture
                || feature == QWebEnginePage::MediaAudioVideoCapture)
            setFeaturePermission(securityOrigin, feature, QWebEnginePage::PermissionGrantedByUser);
        else
            setFeaturePermission(securityOrigin, feature, QWebEnginePage::PermissionDeniedByUser);
    }
};


int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QApplication app(argc, argv);
    QWebEngineView view;
    view.setPage(new WebEnginePage);

    QUrl url = "https://appr.tc/r/386424467";

//    view.setUrl(commandLineUrlArgument());
    view.setUrl(url);
    view.resize(1024, 750);
    view.show();

    return app.exec();
}

#include "main.moc"

LG sauterle
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Klasse setzt die Berechtigungen, die du sonst ggf. per pop up freigibst. Ich würde erstmal einfach eine QWebEngine an den Start bringen. Das hier ist wahrscheinlich nur icing on the cake.
sauterle
User
Beiträge: 81
Registriert: Mittwoch 27. Juli 2022, 21:33

ich habe hier schon ein programm nur hier siht man leider nur schwarz:

Code: Alles auswählen

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtCore import QUrl

class WebRTCViewer(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("WebRTC Video Viewer")
        self.setGeometry(100, 100, 800, 600)

        central_widget = QWidget()
        self.setCentralWidget(central_widget)

        layout = QVBoxLayout()
        central_widget.setLayout(layout)

        self.web_view = QWebEngineView()
        layout.addWidget(self.web_view)

        self.web_view.setUrl(QUrl("http://192.168.0.143:8080/webrtc"))

app = QApplication(sys.argv)
window = WebRTCViewer()
window.show()
sys.exit(app.exec())
LG sauterle
Benutzeravatar
grubenfox
User
Beiträge: 432
Registriert: Freitag 2. Dezember 2022, 15:49

sauterle hat geschrieben: Freitag 6. Oktober 2023, 18:28 der webrtc-stream scheint mir der schnellste zu sein , auch wenn man diesen mit scheinbar mit vlc nicht empfangen kann.
wenn es auch mit VLC nicht geht, lässt sich denn der Stream mit irgendeinem anderem Programm (welches hoffnungsweise keine Programmfelher enthält) empfangen?
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Einem Browser. Darum ja auch die WebEngine, der Browser in Qt.
sauterle
User
Beiträge: 81
Registriert: Mittwoch 27. Juli 2022, 21:33

ja mit Firefox geht es
sauterle
User
Beiträge: 81
Registriert: Mittwoch 27. Juli 2022, 21:33

was sind den die Hoffnungslosen Programierfehler
sauterle
User
Beiträge: 81
Registriert: Mittwoch 27. Juli 2022, 21:33

Hallo das direkte empfangen mit qwebenginewiew scheint nicht zu funktionieren. Wie sollte man den stream dann am besten empfangen? Mein Ansatz wäre es mit dem modul aiortc die daten zu empfange und den h264 videostrwam mit opencv zu decodiren. und alle 1/30 sekunden ein neues bild in meiner pyqt anwendunge anzuzeigen. Ist in diesem Ansatz ein grundsätzlicher fehler oder geht es besser, bitte sagt es mir. Bei dem empfangen mit aiortc bräuchte ich hilfe wie würde zumindest der empfangscode aussehen: Danke im voraus :D
LG sauterle
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich würde ja eher auf RTSP wechseln. Du hast dir selbst die Auflage gemacht, das es so latenzfrei wie möglich sein soll. Und dabei die Dimension der Machbarkeit ausgelassen. Ich würde da also eher nochmal mit dem QMediaPlayer spielen.
Antworten