4 votes

Reolink RTSP -> ffmpeg, RTP : PT=xx : mauvaise séquence CSeq si arrêté / redémarré rapidement

Ma BeeCam est un Raspberry Pi3/Raspbian Stretch avec une version fraîchement compilée de ffmpeg N-89882-g4dbae00bac s'exécutant en tant que service:

#!/bin/bash
cd /usr/local/bin/
while true
do
./ffmpeg -re -thread_queue_size 512 -rtsp_transport tcp -i \
"rtsp://anonymous:password@192.168.1.11:554" -i WilliamTellOverture.mp3 \
-vcodec copy -acodec copy -t 00:11:51 -f flv \
"rtmp://a.rtmp.youtube.com/live2/my-youtube-streaming-key"
sleep 10s
done

où 192.168.1.11 est mon nouveau et chic Reolink RLC-423S, et -t 00:11:51 est la durée de mon MP3 libre de droits. Cela fonctionne normalement assez bien:

https://www.youtube.com/user/IAmTheWaterbug/live

et cela boucle en continu. Le flux YT aura des problèmes lorsqu'il redémarre, mais le flux reprend avec seulement environ 15 secondes de vidéo perdues. Il a fonctionné en continu toute la nuit pendant au moins 8 heures (par exemple, de nombreux cycles) avant que je ne commence à bidouiller avec.

J'ai changé le délai à 5s, et cela ne semble pas le déranger.

Mais parfois, j'ai fait un sudo systemctl stop StreamToYouTube suivi de sudo systemctl start StreamToYouTube, dans un délai de 1 à 2 secondes (par exemple, aussi vite que je peux taper Up Up Up et Entrée), et parfois lorsque je le fais, le flux échoue, et ffmpeg commence à déverser:

[rtsp @ 0x302c2f0] RTP: PT=60: mauvais cseq e680 attendu=0b49
[rtsp @ 0x302c2f0] RTP: PT=60: mauvais cseq 93ab attendu=0b49
[rtsp @ 0x302c2f0] RTP: PT=60: mauvais cseq 93ac attendu=0b49
[rtsp @ 0x302c2f0] RTP: PT=60: mauvais cseq e682 attendu=0b49

sans fin.

Le redémarrage du Pi ne résout pas cela (par exemple, le flux YT échoue toujours, et sudo systemctl status StreamToYouTube renvoie la même série d'erreurs "bad cseq"), mais le redémarrage de la caméra le résout. Je me demande ce que signifie exactement cette erreur, et comment la signaler à Reolink.

Pendant l'état "échec", la caméra semble fonctionner correctement depuis d'autres clients, par exemple, je peux lancer l'application Reolink sur mon Mac ou visionner la page web de la caméra depuis n'importe quel navigateur, et la vidéo semble correcte.

Mais pour une raison quelconque, le flux RTSP devient bizarre d'une manière que ffmpeg ne peut pas résoudre.

C'est assez reproductible si j'arrête/démarre rapidement le service, mais redémarrer avec une pause de 5 secondes dans mon script ne semble pas le déranger.

Merci!

2voto

Venryx Points 196

J'ai eu un problème similaire sur mon Reolink C2, dans un programme NodeJS personnalisé qui utilisait ffmpeg comme un processus enfant (sur mon ordinateur Windows).

J'ai eu le même genre d'erreurs ("RTP: PT=60: mauvais cseq a5b6 attendu=4e9b", etc.), et des symptômes similaires au niveau supérieur (démarrer un deuxième flux rapidement après échouait, mais les flux fonctionnaient bien depuis d'autres appareils comme mon téléphone).

Une différence est que dans mon cas, le problème se résolvait tant que je laissais la caméra tranquille (sans essayer de démarrer des flux!) pendant environ 30 secondes à une minute. Donc peut-être qu'il s'agit d'une différence de firmware où mon modèle termine/ nettoie automatiquement les anciens flux après un certain laps de temps, tandis que le vôtre ne le fait pas.

Quoi qu'il en soit, j'ai finalement découvert la solution pour mon cas: https://github.com/agsh/rtsp-ffmpeg/issues/35

Résumé: La bibliothèque que j'utilisais pour démarrer le flux ffmpeg ne terminait pas "gracieusement" le processus ffmpeg lorsque elle voulait que le flux se termine. Elle se contentait d'appeler process.kill(), ce qui causait le problème.

Une fois que j'ai changé cette ligne process.kill() en process.stdin.write("q\r\n"), le problème s'est complètement résolu. (apparemment certaines versions de ffmpeg acceptent la commande q via leur entrée standard pour sortir gracieusement, tandis que d'autres ne le font pas -- donc la solution pourrait être différente pour Linux et Mac)

Je ne connais pas en détail votre approche pour démarrer et arrêter ffmpeg, mais je vous suggère de regarder de près le code pour terminer le processus, et de vous assurer qu'il permet à ffmpeg de "sortir gracieusement", car c'est ce qui a résolu le problème pour moi.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X