2016-07-29 19 views
0

Ich benutze Qt und libvlc, um eine GUI für einen IP-Kamera-Stream zu erstellen. Nachdem ich es beendet habe, fing ich an, es gegen falsche Werte NULLs ... usw. zu prüfen. Mein Problem ist, dass, wenn ich eine falsche Zeichenkette als Netzwerkverbindung gebe, ich nicht NULL als Rückkehrwerte bekomme. Ein Teil des Codes ist diesqt ip Kamera Stream libvlc Rückgabewerte

const char * const vlc_args[] = { 
    "--preferred-resolution=576", 
    "--network-caching=250", 
    "--no-audio" 
}; 
my_vlcInstance = libvlc_new(3, vlc_args); 
if (my_vlcInstance == NULL){ 
    emit sendDebugMessage("Couldn't create vlc instance", "Red"); 
    return; 
} 
my_LiveMedia = libvlc_media_new_location(my_vlcInstance, link.toStdString().c_str()); 
if (my_LiveMedia == NULL){ 
    emit sendDebugMessage("Error installing media", "Red"); 
    return; 
} 
my_LiveMediaPlayer = libvlc_media_player_new_from_media(my_LiveMedia); 
if (my_LiveMediaPlayer == NULL){ 
    emit sendDebugMessage("Error creating media player", "Red"); 
    return; 
} 

Jetzt ist Link ein QString enthält die Netzwerkverbindung. Ich weiß, dass schlimme Dinge passieren, da ich die Fehler im Debug-Fenster von Visual Studio sehen kann. "core input error: open von` dsfgdfgfg 'ist fehlgeschlagen "" Deine Eingabe kann nicht geöffnet werden "und so ähnlich. Warum kann ich diese Fehler nicht verstehen?

Weiterhin ... wenn ich meine Start-Aufnahme-Taste drücke, wird eine Datei erzeugt (offensichtlich beschädigt, da kein Stream vorhanden ist) und libvlc-Funktionsaufrufe geben die in der Dokumentation angegebenen Fehler nicht zurück. Zum Beispiel:

if (libvlc_media_player_play(my_LiveMediaPlayer) == 0){ 
    emit sendDebugMessage("Live mode started successfully", "Green"); 
    isLive = true; 
} 

Also, wie bekomme ich die schlechte Verbindung?

+0

Haben Sie vlc-qt ausprobiert? Das könnte Ihnen helfen – Zen

+0

Ich hatte ein Problem, es mit den DLLs und den Versionen zu arbeiten, und ich beschloss, den mittleren Mann zu überspringen ... –

Antwort

0

Ich habe mein Problem mit der Funktion libvlc_media_player_get_state gelöst. Ich ignoriere den libvlc_media_player_play Rückgabewert und ich frage nur den aktuellen Status des Media Players ab, bis ich einen anderen Status von IDLE/CLOSE und OPENING bekomme. Bei den schlechten Links bekomme ich einen ERROR Zustand und bei den richtigen Links bekomme ich den PLAYING Status.