Je lance une commande ffmpeg comme ceci :
ffmpeg -loglevel quiet -report -timelimit 15 -timeout 10 -protocol_whitelist file,http,https,tcp,tls,crypto -i ${inputFile} -vframes 1 ${outputFile} -y
Cette opération s'exécute dans une fonction AWS Lambda. Mon délai d'attente Lambda est de 30 secondes. Pour une raison quelconque, je reçois toujours des messages "Task timed out". Je dois noter que j'enregistre avant et après la commande, donc je sais que le délai d'attente est dépassé pendant cette tâche.
Mise à jour
En ce qui concerne l'exécution complète de la lambda, je procède comme suit :
-
Invoquer une lambda pour obtenir un jeton d'accès. Cette lambda effectue une demande d'API. Le délai d'attente est de 5 secondes. Le temps maximum était de 660MS pour une requête.
-
Effectuez une autre demande d'API pour vérifier les données. Le temps maximum était de 1,6 secondes.
-
Exécuter FFMPEG
timelimit
est censé Exit after ffmpeg has been running for duration seconds in CPU user time.
. Théoriquement, cette opération ne devrait pas durer plus de 15 secondes, plus peut-être 2 ou 3 secondes avant les autres demandes.
timeout
est probablement superflu ici. Il y avait beaucoup de définitions dans le manuel, mais je pense que c'était surtout en attente de données ? Quoi qu'il en soit, je pense que timelimit
couvrirait mes arrières.
Mise à jour 2
J'ai vérifié mon journal de débogage et j'ai vu ceci :
Reading option '-timelimit' ... matched as option 'timelimit' (set max runtime in seconds) with argument '15'.
Reading option '-timeout' ... matched as AVOption 'timeout' with argument '10'.
Il semble que les deux options soient supportées par ma version
Mise à jour 2
J'ai mis à jour mon code avec beaucoup de logs. Je vois définitivement la commande FFMPEG comme la dernière chose qui s'exécute, avant de s'arrêter pour le délai de 30 secondes.
Mise à jour 3 Je peux reproduire le comportement en pointant une piste au lieu du manifeste complet. J'ai défini la commande comme suit :
ffmpeg -loglevel debug -timelimit 5 -timeout 5 -i 'https://streamprod-eastus-streamprodeastus-usea.streaming.media.azure.net/0c495135-95fa-48ec-a258-4ba40262e1be/23ab167b-9fec-439e-b447-d355ff5705df.ism/QualityLevels(200000)/Manifest(video,format=m3u8-aapl)' -vframes 1 temp.jpg -y
Quelques éléments à ce sujet :
- Je pointe généralement le manifeste (et non la piste), et les choses se déroulent généralement beaucoup plus rapidement.
- J'ai abaissé le
timelimit
ytimeout
à 5. Malgré cela, lorsque je lance un timer, la commande s'exécute pendant ~15 secondes à chaque fois. Elle génère un tas d'erreurs, probablement dues au fait qu'il s'agit d'une piste plutôt que d'un manifeste complet, puis recrache l'image désirée.
La pleine puissance est à https://gist.github.com/DaveStein/b3803f925d64dd96cd45ae9db5e5a4d0