2017-10-21 34 views
1

J'utilise ffmpeg pour transcoder un flux en direct à partir d'un HDHomerun Prime. Tout fonctionne magnifiquement. Cependant, une possibilité que je voudrais, si possible, est la possibilité de changer le canal sur le HDHomerun sans avoir à arrêter et redémarrer le processus de transcodage ffmpeg.Ffmpeg se bloque lors du transcodage HDHomerun Prime lors du changement de chaîne

Je lance le processus ffmpeg pour commencer à lire le flux UDP à partir du HDHomerun. Il écrit le flux dans une série de fichiers * .ts avec une liste de lecture m3u8.

La deuxième que j'utilise hdhomerun_config pour changer le canal sur l'appareil, ffmpeg signale immédiatement les suivants et se bloque:

[mpegts @ 0000018b4e05be60] New video stream 0:3 at pos:295211888 and DTS:40884.7s=108 drop=0 speed=1.02x [mpegts @ 0000018b4e05be60] New audio stream 0:5 at pos:295279568 and DTS:40884.4s frame= 4488 fps= 29 q=23.0 q=27.0 q=23.0 size=N/A time=00:02:28.94 bitrate=N/A dup=108 drop=0 speed=0.959x

La commande J'utilise pour lancer ffmpeg est:

ffmpeg.exe -t 03:00:00 -i "udp://192.168.1.150:5000?fifo_size=1000000&overrun_nonfatal=1" -vf yadif=0:-1:1 -y -threads 4 -c:v libx264 -s 1280x720 -r 30 -b:v 4500k -force_key_frames expr:gte(t,n_forced*2) -profile:v high -preset fast -x264opts level=41 -c:a libfdk_aac -b:a 96k -ac 2 -hls_time 10 -hls_list_size 6 -hls_wrap 6 -hls_base_url /stream/ -hls_flags temp_file -hls_playlist_type event "C:\temp\streams\4500-stream.m3u8"

Existe-t-il une commande spécifique que je peux passer pour permettre à ffmpeg de "récupérer" de cela? Ou, y a-t-il un argument qui empêche ce blocage en premier lieu? J'utilise la dernière version v3.4 de ffmpeg compilée pour Windows depuis Ubuntu. Le problème s'est également produit en utilisant la version stable v3.4 de ffmpeg pour Windows à partir de ffmpeg.org.

Edit:

Une nouvelle découverte à la question, mais toujours pas résolu: Si je change le canal de retour à la chaîne d'origine, FFmpeg est en mesure de continuer à écrire le flux. Exemple: Je démarre sur le canal X. Ffmpeg enregistre dans un fichier. Je change de canal Y. Ffmpeg affiche un message similaire à celui affiché ci-dessus et "se bloque". Je reviens au canal X et ffmpeg reprend là où il s'était arrêté, pas de problème.

+0

Vous devrez probablement écrire un script pour extraire le nouveau flux. Je doute que FFmpeg soit suspendu, c'est juste que vous avez commencé avec un flux et maintenant il y a un nouveau flux non pertinent qui fonctionne avec d'autres données du flux d'origine. – Brad

+0

Voulez-vous dire démarrer un nouveau processus ffmpeg? – devo1929

Répondre

0

Pas de réponse à votre question et trop nouveau pour commenter, mais j'avais essayé de le faire pendant un certain temps basé sur un autre logiciel à https://github.com/bkirkman/hdhrtv

Fondamentalement, ce que cette mise en œuvre est en train de faire est l'ouverture d'un nouveau flux pour chaque canal. Je soupçonne que vous aurez besoin de faire la même chose et cela explique aussi pourquoi quand vous revenez, le canal se reprend. Malheureusement, à moins de créer une liste de lecture et de mettre en mémoire tampon tous les canaux, il se peut que vous ne puissiez pas obtenir de solution car le flux d'entrée change.

Je serais intéressé à jeter un oeil et tester si vous êtes prêt à partager votre code.