Stream/double utilisation de fichier

Résolu
Signaler
Messages postés
266
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
26 juin 2008
-
Messages postés
266
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
26 juin 2008
-
Bonjour amis Mirceurs... hum...

Je suis en train de créer une radio(j'en ai déjà fait une en
utilisant nhtmln etc.. mais bon c'est pas très difficile...). Je me
suis lancé dans le streaming des radio shoutcast(les plus
fréquentes...) = winamp.

J'ai fait cela de 2 manière :

1) nous sommes la radio... ça je boss encore la dessus, ça marche mais les titres ne s'enchainent pas...

2) Nous sommes clients ou auditeurs et là j'ai un problème.

Je reçois le stream(flux de donné) par socket tcp. Je l'enregistre dans un fichier stream.mp3(utilisation de bwrite)

Cependant, lorsque je veux bien sur écouter la radio avec un simple /splay stream.mp3

bwrite fonctionne mais s'affiche alors en boucle, à l'écran :



* /bwrite: unable to open 'H:*****\stream.mp3'



J'ai aussi essayé avec les file handling (/fopen fwrite etc...) mais sans succès et sans son en plus ^^.





Alors voilà, si quelqu'un a une idée pour pouvoir écouter le fichier
même si celui ci est en train d'être modifié, je suis preneur.



Merci
--------------------------------------------
Signature des parents :

7 réponses

Messages postés
290
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
29 février 2008

Hum tous les x octets, fais une instance de ton fichier stream.mp3 et tu /splay avec la position precedente.

Avec ce systeme de double fichier, ca permettra de contourner le probleme de droit d ouvertue du /Splay.
Messages postés
1726
Date d'inscription
vendredi 12 septembre 2003
Statut
Membre
Dernière intervention
13 juin 2009
1
j'avais fais une remote pour écouter les radios shoutcast en live, jss au taff tte la journée, je look ça ce soir si j'ai encore. ça serait pas le -1 que t'as zappé en début de bwrite pour écrire à la fin du fichier?


-1337 connexion-
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
5
T'aurais pas un path avec espaces sinon ? :p
PaDa
Messages postés
266
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
26 juin 2008

Non aux 2 :) le -1 je l'ai mis, les espacesn je fais sans car j'écris directement bwrite stream.mp3

Le problème vien du fait que je le joue avec /splay et que j'essaie d'écrire dedans...



Je vais chercher encore un autre moyen...

Merci Tofu, si tu trouves bah je ne ferais pas la remote, mais ça m aidera pour plus tard :)


------------------------------------
Signature des parents :
Messages postés
266
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
26 juin 2008

En effet Huitre ça marche bien comme ça :)

J'ai mis 1Mo par changement, et ça marche plutot bien, sauf que bien
sur, il y a une coupure de 1sec à chaque fois que l'on change de
fichier de lecture...

Je pense qu'il y a une façon d'optimiser le fonctionnement en fonction
de la connection, de la réception, car il se passe un peu moins de une
minute entre le moment où j'arrète le stream et la fin du mp3... enfin
ça dépend de la qualité ensuite... donc c'est plutot compliqué à la fin.



Merci :)



Si vous voulez que je post le code, Z'avez qu'à demander ^^
---------------------------------------
Signature des parents :
Messages postés
150
Date d'inscription
mardi 15 juin 2004
Statut
Membre
Dernière intervention
24 août 2010
2
Salut je trouve l'idée plutôt interessente si tu pouvai poster le code de façon à voir un peu tout comment ça marche ça serai pas mal.. merci d'avance et bonne continuation pour ce projet qui m'a l'air assez prenant lol.
Messages postés
266
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
26 juin 2008

on *:sockopen:stream:{

if ($sockerr) { echo -a Stream erreur | return }

sockwrite -tn stream GET / HTTP/1.1

; requete du stream remplacez / par /lenom si c'est de la forme 127.0.0.1:8000/lenom

sockwrite -tn stream Host: $sock($sockname).ip

;ip du stream (je sais pas sir $sock... marchera à chaque coup)

sockwrite -tn stream User-Agent: WinampMPEG/5.0

sockwrite -tn stream Accept: */*

sockwrite -tn stream Connection: close

sockwrite -tn stream $crlf

set %stream.oct 1

}

on 1:sockread:fuck:{

bunset &stream

sockread &stream

var %stream = $calc($file(stream.mp3).size - %stream.oct)

; on calcule le nombre d'octets ajouté depuis la dernière instance de stream.mp3

bwrite stream.mp3 -1 -1 &stream

;on écrit les valeurs dans stream.mp3

if ( %stream >= 1000000 ) {

; si l'on a ajouté plus de 1Mo, on crée le fichier d'instance (la
valeur de 1Mo est modifiable...mais une valeur basse bloque mirc)

var %songpos = $insong.pos

splay stop

if (%newstream) .remove %newstream

; on suprimme la dernière instance

var %ancstream = %newstream

while (%ancstream = %newstream) {

set %newstream $+(stream,$r(1,99999),.mp3)

}

; on crée une nouvelle instance

.copy stream.mp3 %newstream

; on y met les informations

set %stream.oct $file(stream.mp3).size

splay %newstream %songpos

;Play ;)

}

}



Je pense qu'il n'est pas nécessaire de créer une instance et de la
supprimmer ensuite pour recréer... je sais pas :/ j'ai pas testé
autrement!

Je pense qu'en mettant le fichier stream.mp3 en file handling, la vitesse d'exécution serait meilleure aussi... à voir :)




---------------------------------------
Signature des parents :