Fórumok
# ln -s video.mp4 lejatszando.mp4
# ffplay lejatszando.mp4
...majd videolejatszas kozben....
# ln -sf video2.mp4 lejatszando.mp4
-----
...de nem tortenik semmi olyan amit akarnek, azaz nem kezdi lejatszani a masodik videot.
Szoval mint lathato a cel az lenne, hogy (barmilyen) videolejatszo alatt menet kozben akarom kicsirelni a videofile-t. Nem ujrainditva es nem a kovetkezore leptetve! Lehetseges ez? Filerendszer tema? (a lejatszo nem cache-l ennyit, itt nagymereteu fleokrol van szo) hardlinkkel sem megy.
Hozzászólások
A file mar meg van nyitva. Amikor kitorlod, torli a hivatkozast, de meg tovabbra is elerheto marad. Tenylegesen csak akkor fog torlodni, amikor az utolso hivatkozas is torlodik. Hard linknel is hasonloan mukodik, amikor letrehozod a linket, a hivatkozasos counter felmegy 2-re. Amikor torlod, tovabbra is nyitva marad, csak a counter csokken. Akkor torlodne tenylegesen, ha a lemezrol az utolso hivatkozas is torlodne, es a program is bezarna.
Egyebkent nem jo elvben sem, amit akarsz. A file nem csak adatbol all, hanem van az elejen header, az elarulja a lejatszonak a felbontasat, FPS-t, es hasonlokat (gondolom Arpi tudja pontosan, mplayerhez kellett neki). Ha minden ugyanaz, akkor talan menne - kis akadas utan.
A parancssoros lejatszokat jellemzoen lehet vezerelni, igy irnak hozzajuk mindenfele frontendeket. Miert nem arra indulsz el? Amikor at akarsz ugrani a kovetkezore, kiadod a megfelelo parancsot, hogy ugorjon. Egyebkent mi a cel?
A strange game. The only winning move is not to play. How about a nice game of chess?
Probald ki az `mplayer -slave -really-quiet` opciokat. Akkor az stdin-rol tudsz parancsot kuldeni az mplayer-nek, pl hogy kezdjen el lejatszanni egy masik videot (lasd: `mplayer -input cmdlist`, es akkor ott onnan pl a `loadfile`). Kiprobaltam, mukodik, sztem azt csinalja amit szeretnel.
Filerendszer szinten ez nem fog menni, azalapjan amit fentebb is mond Nyosigomboc, meg ugye amit mondasz (caching) meg amiatt sem hogy egy video stream azert relative osszetett dolog.
A playerctl is tud ilyet, és a MPRIS D-Bus Interface-t támogató lejátszókat kezeli, ilyen az mpv is. Meg lehet vele nyitni új fájlt a már futó lejátszóban, és lejátszani. A te módszered viszont elegánsabb, nem igényel extra függőséget.
Az csúnya is lenne, ha a kolléga symlinkes hekkes módszere működne, és programok alól a megnyitott adatokkal ki lehetne húzogatni a szőnyeget. Csúnyán alátenne a programok stabil futtatásának.
“The world runs on Excel spreadsheets.” (Dylan Beattie)
A symlik megváltozásakor mit szeretnél?
1. Befejezi az előző lejátszását, és az elejétől elkezdi lejátszani az újat.
2. Ha az előző pl a 25. másodpercben tartott, akkor az újat a 25. másodperctől kezdi lejátszani.
Elso pont
A https://sign-el-soft.hu oldalon található programnak van egy videóbemutató módja:
Ha egy könyvtárban csak a lejátszandó videók vannak,és úgy indítjuk parancssorból pl., hogy
ng-xim videó1.mpg
Akkor a könyvtárban lévő összes videón végigmegy, majd az utolsó után kezdi elölről.
Ha két szimlinket használsz, amit felváltva írsz át, akkor megcsinálja azt, amit akarsz.
(Ha csak egy videó van a könyvtárban, akkor azt nem zárja le, és nyitja meg újból, hanem ciklikusan vetíti. Vagyis ekkor nem veszi észre a szimlink megváltozását.)
Ha a "befejezi az előzőt" helyett "félbeszakítja az előzőt" kéne, vagy az egy szimlinkes megoldás kell, akkor azt is meg tudom csinálni.
playlist?
Tehat a symlinket egy file-ra mutat, amit megnyit a lejatszod (nem, nem a symlinket nyitja meg, hiszen a symlink mogott mint tudjuk nincs fizikai block, csak egy nev, amire mutat). Szoval a lejatszo fogja kiveszi az inode tablabol, hogy mire is mutat a symlinked, majd megkeresi a rendes file-hoz tartozo blokkot es elkezdi olvasni (most ne menjunk bele, hogy egy FD-n keresztul olvassa azt). Tehat a lejatszod mar felolvasta mi van a symlink mogott es meg is nyitotta a block-ot.
Ezek utan te azt mondod, hogy lecci ird at az inode tablaban a hivatkozast egy masik file-ra, amit meg is tesz a rendszered.
Honnan kellene tudnia a lejatszonak, hogy az inode tablaban te valtoztattal (ok inotify)? Es hogy utana fogja es lezarja a mar megnyitott FD-t, es nyisson egy ujat az uj file-ra (blokkra) amire a symlink most mutat????
Ha nincs belefejlesztve akkor sehonnan.
Ami neked kell, hogy az adott allomanyok virtualisan egyetlen allomanynak latszanak. Azt ugy tudod megcsinalni hogy loopback deviceokat csinalsz rajuk, majd abbol egy uj device-t es azt olvasod. Vagy atkuldod az osszeset egy fifo-n. Nem tudom melyik mukododkepes probald ki.
In nincs fifo, ugyanis NFS-en vannak a file-ok. Ez uj info.
En kerdest tettem fel, hatha valaki tud egy jo megoldast. Ez a loopback dolog erdekes lehet, van itt otleted?
sztem ezt az iranyt felejtsetek el, nem sok fileformatum van ami kibirja hogy menet kozben cserebereled a tartalmat, leginkabb a transport stream birja (ezt hasznaljak iptv-re is), es az mpeg 1/2 es/ps formatum is kibirja (lasd dvd .vob) de csunya lesz nagyon a valtas.
mp4-el (ami belul mov) nem fog mukodni az tuti.
+1. Igen, mpeg2-n belul ha detektalod az i frame-ket es ott szakitod meg es/vagy inditasz el egy masik streamet ugy hogy i frame-n kezdodjon akkor akarmeg jo is lehet. Ott ezt relative konnyu implementalni, de messze komplexebb mint kirugni egy file-t filerendszer szinten es betenni a helyere egy masikat (noplane valami random poziciobol).
sudo losetup /dev/loop0 file1
sudo losetup /dev/loop1 file2
s0=$(sudo blockdev --getsize /dev/loop0)
s1=$(sudo blockdev --getsize /dev/loop1)
printf '%s\n' "0 $s0 linear /dev/loop0 0" "$s0 $s1 linear /dev/loop1 0" |
sudo dmsetup create mybundle
De van meg szamos mas pelda is a neten. Ez csak az elso volt amit talatam. A masik talan hogy lehet van FUSE mar ra. :D