Több ffmpeg stream és capture ugyanarról az eszközről

Fórumok

Sziasztok!

Egy helyi TV-ben az internetes adást, a videójel fejállomásra küldését és a 24 órás NMHH adásrögzítést 3 különböző gép csinálja. Egy átalakítás során lehetőségem lesz 1 géppel kiváltani ezt a hármat. Ezzel a cég helyet és áramot is spórol. Egy gép esetében mindössze 1 db decklink kártya lesz abban a gépben és a fenti feladatokat kellene megoldanom úgy, hogy mind a három folyamat videót ugyanarról a kártyáról vegye le.
Ez egy db ffmpeg paranccsal megoldható e leírás szerint: https://trac.ffmpeg.org/wiki/Creating%20multiple%20outputs
Viszont ezzel az a problémám, hogy ha az internetes stream megszakad akkor megáll az NMHH rögzítés is. Tehát nekem egy olyan megoldás kellene amivel több egymástól független ffmpeggel tudom ezeket megoldani.
Jelenleg ha egy már futó ffmpeg mellett indítok egy újat akkor ez a hibaüzenet fogad, meg foglalt az eszköz:


[decklink @ 0x55d73f2a7f00] Cannot enable video input
DeckLink HD Extreme 3D+: Input/output error

Help pls!

Hozzászólások

Piped processes - az egyik outputot csövezd ki egy másik ffmpeg processnek ami a live streamet fogja csinálni, vagy socket vagy esetleg local stream amire csatlakozik a többi. Kb egy 5-8 éve kellett valami hasonlóval kísérletezni, ha jól emlékszem vlc-t is bevettük a buliba mert volt benne hasznos fícsör (pont a leszakadás miatt ha nem tévedek).

Többféleképp is megoldható:
- több decklink kártya a gépbe
- ffmpeg fifo muxerét használva az rtmp kimenethez
- a stream szerverre (ha tudja) is mpegts-t streamelni

Több decklink kártya nem fér be a gépbe.
Most az elképzelés az, hogy az első ffmpeggel leveszem a jelet a decklink kártyáról és a videó konvertálása nélkül egy másik konténerbe rakva ráküldöm egy Icecast2 vagy más hasonló szerverre. Ekkor még nincs minőségromlás, de máris további akármennyi ffmpeggel hozzá lehetne férni ehhez a streamhez, ami különböző formátumokban mehet tovább. Internetre hls, nmhh-nak meg wmv-be kell, fejállomásnak pedig megint másban kell majd.

-------------------
https://onlinestream.live/ - A legtöbb magyar rádió és TV egy helyen!

Ezzel már félsiker van.
UDP outra már megy jól ezzel:

ffmpeg -hide_banner -re -f decklink -video_input $input -audio_input embedded -format_code $format_code -raw_format $raw_format -draw_bars false -i "$dev" -acodec copy -vcodec copy -f mpegts udp://127.0.0.1:23000

Az ffprobe viszont már nem ismeri fel a codeceket:

root@videostream:~/stream# ffprobe -hide_banner "udp://@:23000?overrun_nonfatal=1&fifo_size=50000000"
Input #0, mpegts, from 'udp://@:23000?overrun_nonfatal=1&fifo_size=50000000':
  Duration: N/A, start: 27.119978, bitrate: N/A
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0[0x100]: Data: bin_data ([6][0][0][0] / 0x0006)
    Stream #0:1[0x101]: Data: bin_data ([6][0][0][0] / 0x0006)
Unsupported codec with id 100359 for input stream 0
Unsupported codec with id 100359 for input stream 1
root@videostream:~/stream#

UDP-re még nem szeretném tömöríteni sem a videót sem az audiót, mert minél jobb kiinduló minőség kell.
-------------------
https://onlinestream.live/ - A legtöbb magyar rádió és TV egy helyen!

Egyelőre meg fogom próbálni valamilyen veszteségmentesre átkonvertálni és azt betenni mkv-ba. De az meg UDP-n nem fog kimenni, ezért lesz majd egy próba Icecast2-vel.
A Lényeg, hogy adott kimenet felé csak egyszer kelljen veszteségesen konvertálni.

-------------------
https://onlinestream.live/ - A legtöbb magyar rádió és TV egy helyen!