Ermitteln eines Timeouts in ffmpeg

8

Ich schreibe eine Software, die ffmpeg ausgiebig verwendet, und es ist multi-threaded mit mehreren Klasseninstanzen.

Wenn die Netzwerkverbindung ausfällt, bleibt ffmpeg beim Lesen hängen. Ich habe eine Methode gefunden, um einen Rückruf zuzuweisen, den ffmpeg regelmäßig auslöst, um zu prüfen, ob er abbrechen soll oder nicht:

%Vor%

...

%Vor%

Das ist alles in Ordnung, aber nirgends im Web kann ich finden, was * ctx enthält und wie man bestimmt, ob der Callback 1 oder 0 zurückgeben soll. Ich kann kein statisches "abbrechen" Flag zuweisen, da die Klasse viele Instanzen hat. Ich kann den Code auch nicht debuggen, da aus irgendeinem Grund Visual Studio sich weigert, einen Breakpoint auf die Rückgabe 0 zu setzen; Zeile, die behauptet, dass kein ausführbarer Code dem Ort zugeordnet ist. Irgendwelche Ideen?

    
Sean 19.05.2012, 14:56
quelle

2 Antworten

7

In der Dokumentation zu ffmpeg gefunden:

  

Während Callback-Operationen wird Callback mit opaque als aufgerufen   Parameter. Wenn der Rückruf 1 zurückgibt , wird der Blockiervorgang ausgeführt   abgebrochen werden.

Hier ist Deklaration int_cb Variable vom Typ AVIOInterruptCB struct aus Ihrem Code:

%Vor%

Sie haben den undurchsichtigen Parameter als NULL deklariert.

Ich würde empfehlen, den Initialisierungscode wie folgt neu zu schreiben:

%Vor%

Sie können auf die formatContext-Instanz in interrupt_cb :

zugreifen %Vor%     
alexander 19.05.2012, 15:14
quelle
2

Sie können nicht nur AVFormatContext * formatContext übergeben, sondern auch irgendeinen anderen nützlichen Zeiger auf eine Instanz, der nützliche Daten enthält, um festzustellen, welcher Thread abgelaufen ist

    
Demo_S 19.05.2015 09:06
quelle

Tags und Links