Toon posts:

[VXML] Audio streamen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een project waarbij VXML gebruikt wordt. De bedoeling is om via een telefoonlijn stukken geluid af te kunnen luisteren.

Op dit moment maak ik daarvoor gebruik van bestanden van 1 minuut groot. Doelstelling is om deze beperking eraf te halen.

Zeg dat ik een URL heb: http://audio?datum=<datum>&tijd=<tijd>&length=<length>.

Hierbij is <length> facultatief, dwz. als ik 'm weglaat gaat hij gewoon streamen totdat je zelf de stream afbreekt. Dit werkt dus pertinent niet:

XML:
1
2
3
4
5
<form id="geluid">
  <block>
    <audio expr="http://audio?datum=01012005&tijd=12:00" />
  </block>
</form>


Ik dacht 'ah mooi, vxml kan headerless (raw) wave afspelen, dus kan ik gewoon streamen'. Die grap gaat echter niet op, vxml vereist dat in de header (van de webserver) de lengte wordt opgegeven.

VXML kent de mogelijkheid tot het prefetchen van audio. Dus dacht ik, steeds korte stukjes achter elkaar zetten.

Dit werkt dus wel:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form id="intro">
  <block>
    <audio src="audio/intro.wav" />
    <goto next="geluid" />
  </block>
</form>
<form id="geluid">
  <block>
    <audio expr="http://audio?datum=01012005&tijd=12:00&length=60" />
    <goto next="geluid1" />
  </block>
</form>
<form id="geluid1">
  <block>
    <audio expr="http://audio?datum=01012005&tijd=12:01&length=60" />
  </block>
</form>


Als je dit zou testen, zou je eerst de intro.wav krijgen, dan een pauze, en daarna naadloos de twee fragmenten achter elkaar. Het probleem is echter dat hij het tweede element niet ophalt tijdens het afspelen van het eerste, maar voordat het eerste element is afgespeeld. Hij haalt dus eerst ALLES op en gaat het daarna pas afspelen. Als je dus dit doet:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
<form id="intro">
  <block>
    <audio src="audio/intro.wav" />
    <goto next="geluid" />
  </block>
</form>
<form id="geluid">
  <block>
    <audio expr="http://audio?datum=01012005&tijd=12:00&length=60" />
    <goto next="geluid" />
  </block>
</form>


Krijg je niet een naadloze herhaling van dat stuk geluid te horen, maar loopt hij gewoon vast. Na de intro.wav volgt dan stilte. In die stilte gaat continu de loop doorlopen en alles ophalen.

Ik heb echt al van alles geprobeerd, zoals de prefetch instellen (prefetch of save, maakt niet uit), een dummyblock in de loop opnemen, er een prompt van maken met een timeout van 0.1ms, enz.

De eerste vraag is dan ook of iemand een methode weet om het prefetchen te limiteren. Met prefetchhint=false (oid) doet hij dat duidelijk (nog) niet. Ook niet als je in de naam van het op te halen stuk audio een variabele opneemt oid.

De tweede vraag is of iemand een methode weet om met vxml audio te streamen voor onbepaalde tijd, bij voorkeur met behoud van de mogelijkheid tot toetsinvoer.

offtopic:
De bedenkers van VXML moeten aan hun ballen opgehangen worden, dat ze hiervoor XML gebruikt hebben slaat echt nergens op. Het heeft 0 voordelen en alleen maar nadelen. De enige reden dat ze dat gedaan hebben, is omdat ze dan het buzzwoord 'xml' konden gebruiken. Schoolvoorbeeld van een toepassing waar XML helemaal niet handig is.


//edit
Ook werken met de optie 'fetchaudio' bij een goto next werkt helaas niet..

[ Voor 23% gewijzigd door Verwijderd op 13-06-2005 20:15 ]