Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Het streamen van video met on-the-fly transcoding dmv ffmpeg

Pagina: 1
Acties:

  • ErikKo
  • Registratie: Mei 2009
  • Laatst online: 13:41
Dag mede-tweakerts,

Ik zit nu al een aantal weken te worstelen met een stuk perfectie die ik maar niet krijg bereikt.
Ik zal eerst mijn situatie uitleggen.

Situatie
Ik stream video van een mediaserver, genaamd Firefly Media Server.
Deze server biedt dynamische mogelijkheid om via commandline de media te transcoden naar wens.
Zodra ik een .avi opvraag van de mediaserver, begint deze met transcoden naar FLV, en gooit de stream naar mij, de client toe. Dit werkt in een flash player in de browser. (ter verduidelijking, het transcoden gebeurt server-side. client-side zie ik alleen een flv stream)
Ik maak gebruik van ffmpeg om de .avi te transcoden naar flv.
ffmpeg -i "$FILE" -f flv -ar 22050 -qscale 5 -
Probleem
Natuurlijk heeft de FLV (tijdens het transcoden) geen metadata, waardoor 'seeken' door het filmpje niet mogelijk is. Ffmpeg biedt functionaliteit om metadata mee te nemen. Maar na al mijn pogingen geen succes; Ik vermoed dat de metadata _na_ het transcoden pas geinjecteerd wordt.

Halve oplossing?
Ik heb de output van ffmpeg gepiped naar flvtool2, een tool die een flv kan injecteren met metadata.
Ik heb gekozen voor flvtool2 omdat alles via commandline gaat, en flvtool2 de enige is die zowel stdin als stdout ondersteunt. Dit werkt wel, maar met een zuur resultaat: Ffmpeg transcode eerst de hele video, flvtool2 doet zijn ding, en dan pas wordt er de stream naar de client gestuurd. Niet helemaal het idee van 'on-the-fly' transcoding dus.
ffmpeg -i "$FILE" -f flv -ar 22050 -qscale 25 - | flvtool2 -U stdin stdout
Resultaat
Ik heb nu 2 werkende 'oplossingen':
- Direct streamen, maar geen metadata, waardoor seeken niet mogelijk is. Geeft ook niet aan hoever het bufferen is; Wanneer de video de buffer inhaalt, moet je opnieuw beginnen.
- Eerst de hele video transcoden (terwijl de client wacht) en daarna pas beginnen met streamen. Niet naar wens, want een filmpje van 1 minuut duurt al 6 seconden om te transcoden. Die 6 seconden gaan in zodra je op play drukt, terwijl je verwacht dat het filmpje begint te streamen.

Pogingen
Ik heb naar meerdere oplossingen gekeken. De bovenstaande kwamen er uit. Ik heb geprobeerd gebruik te maken van ffserver, maar deze biedt geen oplossing.

Om het samen te vatten; Ik streef naar een oplossing om via een commandline een .avi te transcoden naar .flv, waar vanaf het begin al de metadata in staat. Dit klinkt als tegenspraak, want metadata wordt altijd achteraf geinjecteerd.

Heeft iemand tips hoe ik avi's on-the-fly kan transcoden, speelbaar zijn in een browser, maar ook seekable zijn?

P.S. Modje: Mocht het topic fout geplaatst zijn, wilt u zo vriendelijk zijn deze op een goede plek te zetten? Danku. :)

  • dj_tjerk
  • Registratie: Januari 2003
  • Laatst online: 25-11 20:55
Ik heb eerlijk gezegd geen idee wat een flv seekable maakt (ik denk iets van recovery points of zo?), maar misschien kan je eens proberen of de flv muxer van x264 het wel goed doet. Dus iets als
x264 --preset <iets> -crf <iets> -o file.flv -
In ieder geval 1 developer van x264 is op het moment bezig met veel streaming optimalisaties/implementaties. Dus als het er nu niet is, komt het misschien binnenkort wel ;)

Als dat niet werkt stel ik voor je dat het vraagt op een forum meer gericht op video encoding als doom10 ("official" x264 support forum) of doom9.

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Het platform waar je dit alles op wil bereiken is misschien ook wel handig om te weten, zeker in een subforum als Client Software Algemeen. Gezien je pipe ( | ) gebruikt, ga ik er vanuit dat het op het Linux platform is.

  • Zer0
  • Registratie: September 1999
  • Niet online

Zer0

Destroy 2000 Years Of Culture

GJtje schreef op vrijdag 25 december 2009 @ 14:37:
Het platform waar je dit alles op wil bereiken is misschien ook wel handig om te weten, zeker in een subforum als Client Software Algemeen. Gezien je pipe ( | ) gebruikt, ga ik er vanuit dat het op het Linux platform is.
pipe werkt ook op Windows...

maybe we sit down and talk about the revolution and stuff
but it doesn't work like that
you can't turn back now there's no way back
you feel the power to destroy your enemy..


  • ErikKo
  • Registratie: Mei 2009
  • Laatst online: 13:41
Thanks dj_tjerk, die site kende ik nog niet.

En het is inderdaad Linux. Was ik vergeten te zeggen. :)

  • RenHoek
  • Registratie: Oktober 2001
  • Laatst online: 15-09 16:35
Is hier ooit nog een oplossing uit gekomen? Dit is wat ik aan het zoeken ben op het moment..
Pagina: 1