Ahoj,
uz umi ffplay zobrazit grid vice streamu najednou?
Jednou jsem vyvíjel nejakou vizualizaci pro zabezpecovacku s 8 IP kamerami a prekvapilo me, ze to neslo (nebo jsem na to jen neprisel).
Pokud by nekdo vedel, jak na obrazovku v jednom okne dostat treba 5 kanalu rtsp pomoci ffplay a cele to vizualne zapouzdrit treba do .netu a C# tak bych se rad poucil. Myslim, ze jsem si tehdy vypomohl nejakym spec. rezimem VLC, ktere to umelo a jeste se dalo zadokovat do WinApi apky. Ale je to 10 let...
Diky
Ffplay tohle sám o sobě neumí, je omezen na jeden vstup. Je to míněno jako jednoduchý, doplňkový přehrávač například na testování, v kterém fungují dekodéry a jednoduché filtry z korespondující verze ffmpegu.
Pokud tohle chcete udělat, tak se musí použít ffmpeg a ffplay dohromady. Tzn. ffmpeg s více vstupy, filtr jako xstack a pak to přes pipe poslat do ffplay, co pak bude hrát ze standardního vstupu.
Ale obecně vzato to není dobrý nástroj pro podobné účely. Ffmpeg je pořád primárně konvertor, který nemá ambice řešit výpadky vstupních streamů nad rámec timeoutů u socketu a základního bufferování. Jakmile jakýkoliv ze vstupů vypadne, konverze končí. Je to podobná odpověď jako dotaz výše.
Pokud je potřeba řešit výpadky, restarty nějaké restarty session, automatické nebo manuální reconnecty, fallback (např. obrázek na výstupu, než se stream připojí znovu) atp., pak je to třeba implementovat ve vlastní speciální aplikaci, byť ta pak třeba může z ffmpegu pořád používat libav.* knihovny na demuxování, dekódování, filtry atp. Pravděpodobně na ně bude existovat i nějaký wrapper, binding do .NETu.
Existuje i hotový, opensource přehrávač, který se jmenuje vyloženě Grid player. Používá libvlc, je multiplaformní a možná by se s nějakou konfigurací nechal pro podobné účely rovnou použít.
I když dnes bych spíš řekl, že podobných multivieweru pro streamy z kamer bude jeden z častých požadavků, aby to bylo dostupné odkudkoliv, takže se to bude řešit tak, že se to bude z RTSP konvertovat na streamy vhodné pro přehrávání v aplikaci, co poběží ve web. prohlížeči, případně i nějakých mobilních appkách.
Ještě když nad tím trochu přemýšlím, tak by to možná šlo udělat nouzově obejít na demo jen s ffplay, pokud se mu dá na vstup lavfi filtergraph.
Něco v duchu:
ffplay -f lavfi "movie='rtsp\://server/stream', scale=500:-2 [v1]; \ movie='rtsp\://server/stream2, scale=500:-2[v2]; \ [v1][v2]hstack=inputs=2"
To lomítko v url je tam pro escapování dvojtečky, která by se jinak interpretovala jako oddělovač parametrů filtru movie.
Napadají mě 2 řešení: přes ffmpeg -i -i -i -i ( mnoha vstupy ),který to pak pokládá přes sério crop/scale/size/overlay do mřížky jak chce tazatel a nebo z toho nějak udělat stream o více video stremech, které pak by šly nějak přepínat (tuším tlačítkem p/v/s) přepínání pro _P_rogram nebo _V_ideostrem, ale nebylo by to v mřížce
Taky zajímavé téma na zpracování: situace kdy se musí provést pípa ffmpeg | ffplay. s tím vždy zápolím, je nutné pohlídat správnost jak před pípou i za pípou (zda se uvádí - nebo ne) do jakého formátu (rgb24, "nut", nekomprimovaný"... co je nejlepší pro výkon=nejmenší režii a jak to dělat elegantně