Gå til innhold

Enket script til å hente ut lydklipp fra pågående innspilling


Anbefalte innlegg

Godt nyttår!

 

Her kommer en skikkelig nøtt...

 

 

Vi har en lydkilde som spilles inn kontinuerlig til et valgfritt lydformat på harddisken (det er en logg).

 

Jeg ønsker et webgrensesnitt hvor man kan gå inn og velge å laste ned en definert del av denne loggen.

Brukeren skal altså kunne skrive inn startklokkeslett og sluttklokkeslett, og trykke "Last ned", så kommer det en lydfil med logg fra angitt tidsrom.

 

Men hvordan?

 

Jeg tenkte på å lage et PHP-script som igjen kjører et bash-script på linuxboxen som inneholder loggfilen.

Noe sånt som at php sender info om start og stopptidspunkt til et script som play´er eller cat´er (elns) fra den kontinuerlige loggfilen til en ny fil (eks wav-fil), som deretter blir sendt til brukeren.

 

 

Er dette i det hele tatt mulig? Noen smarte hoder med noen ideer her?

 

Takker og bukker!

Endret av reminett
Lenke til kommentar
Videoannonse
Annonse

Det du trenger er en måte å få en tidsreferanse inn i lydstrømmen. I noen lydformater kan du nok timestampe hver frame i en meta-stream, men da er du nok et stykke utenfor hva PHP er optimalt for.

 

Dette er måten jeg hadde gjort det på:

-Lagret den aktive logfilen som PCM/WAV, det fordi da bør det ikke være noe særlig problem å lese fra en fil som fortsatt blir skrevet til.

-Laget en cron-jobb som transkoder og erstatter ferdige filer fra PCM/WAV til Ogg/Vorbis for å spare plass.

-Initialisert en ny loggfil én gang i døgnet.

-Lagret i database datofelt fra- og til-tidspunkt for hver fil slik at databasen kan brukes til å finne korrekt fil.

-Brukt tidspunktene lagret i databasen til å gi kommandolinjeverktøyet korrekt offset og lengde.

 

Slik jeg ser det er eneste potensielle problem med dette oppførsel av kontinuerlig tilskrevet fil.

 

Jeg hadde brukt ffmpeg bare fordi det er et godt verktøy med aktiv utvikling:

 

ffmpeg -i 2009-01-06.wav -ss 11250 -t 60 -acodec vorbis -ab 160k 2009-01-06-11250-60.ogg

 

Dette skal lagre 60 sekunder fra 11250 sekunders offset i 160kbps Ogg/Vorbis-format.

Lenke til kommentar

Jeg er lite fan av å bruke filsystem til lagre informasjon. Skal du f.eks hente ut lyden mellom 1234567890 og 1234567900 må du potensielt statte alle råfilene og ut fra det finne den fila som er nyligst opprettet før 1234567890 og om den varer til lengre enn 1234567900. Det kan potensielt være mange hundre spørringer mot filsystemet og mye manuelt arbeid.

 

En SQLite-database kan holde informasjonen flott og denne spørringen henter fila:

SELECT filename FROM sourcefiles WHERE start >= 1234567890 AND stop <= 1234567900 ORDER BY created LIMIT 1 ;

Lenke til kommentar

Tusen takk for raske svar.

 

Denne strategien virker jo veldig fornuftig. Men som du sier, så er spørsmålet hvordan man skal hente logg fra inneværende døgn. Hvordan får jeg ut timestamp, forresten?

 

Noen som kunne tenke seg å skrive et forslag til hvordan scriptet skulle se ut?

Lenke til kommentar
Noen som kunne tenke seg å skrive et forslag til hvordan scriptet skulle se ut?

I god «jeg har en hammer»-stil:

 

Recorder, executed by cron
Set/check mutex lock (sys_get_temp_dir, file_get_contents, file_put_contents)
	Check if recording interval expired
	Read capture PID from file
	Check if process is still running (exec+ps)
		if running
			if expired
				kill process (exec+kill)
				register file interval end in database
			else
				return
			start new process (proc_open+ffmpeg)
			register PID (proc_get_status)
			register file in database (SQLite)
Release mutex

Extractor, executed by Apache
Parse/validate requested interval
Ask database for correct file if exists
Extract compressed file for interval (exec+ffmpeg)
	Parse process output and write progress to cache (MC, APC, file, database)
	Deliver progress to AJAX-process updating message to user

Endret av JohndoeMAKT
Lenke til kommentar

Flott platform det. Det bør vel i teorien bare være å kjøre f.eks ffmpeg og bruke /dev/dsp som kilde.

 

Hva jeg skal ha for å lage systemet? Tenker du penger da? Kontakter du bedriften jeg jobber for kan vi sikkert lage det for en 150 000,- :!:

 

Men litt mer seriøst har vi mandag om åtte dager en prosjekt-deadline, så neste uke vil jeg trolig legge inn 50-60 timer, med andre ord blir det lite tid da. Om du har god tid kan jeg muligens uka etter det legge litt tid inn i dette fordi jeg syntes det er litt interessant og at jeg lagde noe ikke så ulikt i høst.

Lenke til kommentar
  • 1 måned senere...
Flott platform det. Det bør vel i teorien bare være å kjøre f.eks ffmpeg og bruke /dev/dsp som kilde.

 

Hva jeg skal ha for å lage systemet? Tenker du penger da? Kontakter du bedriften jeg jobber for kan vi sikkert lage det for en 150 000,- :!:

 

Men litt mer seriøst har vi mandag om åtte dager en prosjekt-deadline, så neste uke vil jeg trolig legge inn 50-60 timer, med andre ord blir det lite tid da. Om du har god tid kan jeg muligens uka etter det legge litt tid inn i dette fordi jeg syntes det er litt interessant og at jeg lagde noe ikke så ulikt i høst.

 

Beklager sent svar, jeg har vært veldig opptatt i det siste.

Har du lyst å se på et slikt script? Hadde vært utrolig moro å fått det til.

Lenke til kommentar

Heisann igjen. Jeg har veldig lite tid for tiden og har et annet system jeg skal lage for en veldedig organisasjon jeg er i styret av ved siden av jobb, men jeg kan hvertfall føre det opp på listen min og se om jeg får tid til å lage de mest avanserte bitene. Så kan eventuelt noen andre fylle inn resten.

Lenke til kommentar
Heisann igjen. Jeg har veldig lite tid for tiden og har et annet system jeg skal lage for en veldedig organisasjon jeg er i styret av ved siden av jobb, men jeg kan hvertfall føre det opp på listen min og se om jeg får tid til å lage de mest avanserte bitene. Så kan eventuelt noen andre fylle inn resten.

 

Fantastisk. Gleder meg til å se hva du får til :)

Lenke til kommentar
  • 2 uker senere...

På jobb: Et system for å transkode videofiler fra flere kunder til flere formater som transporteres til opptil flere servere hvor selve komprimeringsjobben kan gjøres på flere servere i parallell og opprettholde en rettferdig kø mellom kundene og estimere tid til komprimering er ferdig. Det er faktisk veldig kjekt.

 

Privat: En nettside som skal være et samlingssted for tidligere beboere av samme bofellesskap (estimert omtrent 4000 tidligere beboere) med forhåpentligvis en del interaktivitet.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...