[Flex] Streaming MP3's naar downloadbaar bestand

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Binnen een website, gemaakt in Flex, hebben wij al enige tijd de mogelijkheid zitten om meerdere MP3's (playlist) automatisch achter elkaar te streamen. Dit op een manier waarop het voor de eindgebruiker klinkt als of het 1 groot audiobestand is, terwijl het toch een X-aantal losse MP3's zijn die al streamend 'aan elkaar gekoppeld worden'.

Nu is er echter ook de wens dat de eindgebruiker het stuk audio zoals hij of zij dit te horen krijgt kan downloaden naar een enkel bestand.

Dus, bijvoorbeeld, 10 MP3 fragmenten op de server, downloaden naar een enkel bestand voor de eindgebruiker. Kan dit of zoiets?

Het enkele bestand op de server samenvoegen lijkt ons niet echt handig, voor X gebruikers +- 100 MB bij elkaar laten rapen. Vinden sommige processen denk ik ook niet echt fijn.

Het mooiste zou daarom zijn als er een soort variant mogelijk zou zijn op het streamen (wat al een 'progressive download is', en i.p.v. het af te spelen via de speakers, de data stream naar een enkel bestand op de PC van de eindgebruiker te sturen.

Ik kan mij voorstellen dat het een wat raar verzoek lijkt, maar we hebben er zo onze reden voor. ;)

:)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 10:54

Janoz

Moderator Devschuur®

!litemod

Waarom denk je dat de server moeite zou hebben met het bij elkaar zoeken van data en dit vervolgens naar de client te sturen? Het bij elkaar zoeken en vervolgens naar de client sturen lijkt mij iets dat gewoon streaming kan gebeuren. Processortijd kost het niet aangezien het enkel van IO afhankjelijk is en geheugen kost het ook niet omdat je gewoon een vaste buffergrootte kunt gebruiken met verzamelde data die je naar de client stuurt.

Die manier klinkt mij iig een stuk logischer in de oren dan raar doen met het herdefiniëren van iets wat naar de speakers gestuurd wordt. Hoe wordt de progressive stream nu gedaan?Gebeurt het aan elkaar rijgen van de mp3's nu door flex (dus op de client) ?

Sowieso moet je je oplossing niet in Flex zoeken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • flashin
  • Registratie: Augustus 2002
  • Laatst online: 17-12-2023

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Misschien was ik nog niet duidelijk genoeg.

We hebben nu al streaming audio op basis van een playlist. Bijvoorbeeld playlist = [1.mp3, 3.mp3, 5.mp3]
Dit gaat gewoon binnen in Flex/ActionScript met de URLRequest, SoundChannel, etc. hoek.

Maar, dit is wel audio die door een Sound(Channel) wordt afgespeeld.

Wat we nu willen is kijken of het mogelijk is om:

playlist = [1.mp3, 3.mp3, 5.mp3]

Te laten downloaden naar

'alles_bij_elkaar.mp3'

wat eigenlijk niets anders is dan 1.mp3 + 3.mp3 + 5.mp3 aan elkaar in EEN bestand.

Of, als het op de commandline zou gebeuren, het equivalent van:

cat 1.mp3 > alles_bij_elkaar.mp3
cat 3.mp3 >> alles_bij_elkaar.mp3
cat 5.mp3 >> alles_bij_elkaar.mp3


Deze 1.mp3, 3.mp3 en 5.mp3 zijn dus wel losse, afzonderlijke bestanden/fragmenten op de server.

Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

Zou je het niet naar een externe serverside script (zoals php) kunnen linken die dan in feite iets zoals dit doet?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$file1 = 'a.txt';
$file2 = 'b.txt';
$file3 = 'c.txt';

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=grootbestand.txt');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Pragma: public');
header('Content-Length: ' . filesize($file1)+filesize($file2)+filesize($file3) );
ob_clean();
flush();

readfile($file1);
readfile($file2);
readfile($file3);


Dus de header zetten voor 1 file en dan de contents van alle files doorsturen.

offtopic:
(hopelijk is dit niet een al te rare opmerking, aangezien ik totaal niet bekend ben met flex :$)

[ Voor 8% gewijzigd door DanielG op 08-03-2010 13:53 . Reden: offtopic tags ]

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:22
Nu heb je mazzel dat MP3tjes niet in een container zitten maar een elementary stream vormen, zodat je de bestanden aan elkaar kunt plakken om tot een geldige combinatie te komen. Let er wel op dat de bestanden die je zo aan elkaar plakt dezelfde sampling rate en aantal kanalen gebruiken en geen non-MPEG data (zoals ID3 tags) bevatten, want daar kunnen veel mediaspelers niet mee overweg.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor de reacties en het meedenken.

Ik ga wel eens even met de PHP suggestie aan de slag... ben benieuwd hoe dat gaat.
Zit namelijk nog wat in dubio over het formaat van alles bij elkaar, zo'n 100MB schat ik in, maar ik denk dat dat gewoon testen en uitproberen wordt.

Zelf ben ik ook nog alles behalve een Flex guru, dus de PHP opmerking vind ik eigenlijk helemaal geen gekke. Ik zal kijken of ik de titel van het topic nog naar Flex/PHP kan veranderen. ;)

Nogmaals dank! :)

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Voor wat apps hebben wij ongeveer hetzelfde moeten doen, toen was het echter een vereiste om het naadloos te laten doorlopen en dat wilde niet met MP3, scheelt per encoder misschien (wij gebruiken LAME). Wat we gedaan hebben is de mp3's als WAV op de server zetten en met Java de WAV's aan elkaar plakken, encoden als mp3 en ter download aanbieden. Klinkt als een sloom proces maar dat was het allerminst..het was supersnel en leverde een topresultaat op :)

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:22
Recoden is niet alleen traag, maar ook ongunstig voor de uiteindelijke geluidskwaliteit. Dan kun je beter een tool als mp3wrap gebruiken om de boel losless aan elkaar te plakken (en nog een stuk sneller ook). Maar die doet ook niet veel anders dan alle MPEG frames achter elkaar zetten. Lijkt er op dat mp3wrap niets anders doet dan files concateneren, dus dat is niet zo zinnig.

edit:
Ah, met WAVs. Kost nog steeds veel CPU om te coderen, natuurlijk, maar blijkbaar was dat geen bezwaar.

[ Voor 27% gewijzigd door Soultaker op 08-03-2010 23:14 ]


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
We hadden de files zelf gemaakt dus we hadden gewoon WAV's beschikbaar. Van re-encoding was geen sprake dus. Verkeerd gezegd :)
Pagina: 1