Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    40

    Problema con player per flusso streaming

    Semplice player per flusso shoucast in streaming: 2 pulsanti uno per play uno per stop

    Ecco l' AS3 sul 1° frame:

    codice:
    import flash.media.Sound;
    import flash.media.SoundLoaderContext;
    import flash.net.URLRequest;
    import flash.media.SoundChannel;
    
    var mySound:Sound = new Sound();
    var req:URLRequest = new URLRequest("HTTP://91.121.173.25:8540");
    var context:SoundLoaderContext = new SoundLoaderContext(1000, true);
    var mySoundChannel :SoundChannel = new SoundChannel();
    
    play_btn.addEventListener(MouseEvent.CLICK, soundplay);
    stop_btn.addEventListener(MouseEvent.CLICK, soundstop);
    
    function soundplay(event:MouseEvent):void {
    mySound.load(req, context);
    mySoundChannel = mySound.play();
    }
    function soundstop(event:MouseEvent):void {
    mySoundChannel.stop();
    }
    Se per la prima volta faccio play il suono viene riprodotto. Se faccio stop viene fermato.
    Se provo a fare play dopo aver stoppato esce fuori questo errore:

    codice:
    Error: Error #2037: Le funzioni sono state richiamate usando una sequenza non valida oppure una chiamata precedente ha avuto esito negativo.
    	at flash.media::Sound/_load()
    	at flash.media::Sound/load()
    	at player_fla::MainTimeline/soundplay()
    Dove sbaglio?

  2. #2
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ciao

    Fai così:

    Codice PHP:
    import flash.media.Sound;
    import flash.media.SoundLoaderContext;
    import flash.net.URLRequest;
    import flash.media.SoundChannel;

    var 
    mySound:Sound = new Sound();
    var 
    req:URLRequest = new URLRequest("http://91.121.173.25:8540");
    var 
    context:SoundLoaderContext = new SoundLoaderContext(1000,true);
    var 
    mySoundChannel :SoundChannel = new SoundChannel();
    mySound.load(reqcontext);

    play_btn.addEventListener(MouseEvent.CLICKsoundplay);
    stop_btn.addEventListener(MouseEvent.CLICKsoundstop);

    function 
    soundplay(event:MouseEvent):void
    {
        
    mySoundChannel mySound.play();
    }
    function 
    soundstop(event:MouseEvent):void
    {
        
    mySoundChannel.stop();

    Ho spostato la riga: mySound.load(req, context); in modo che le informazioni per lo streaming dei dati siano visibili in tutto il codice.


    ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    40
    Originariamente inviato da Sleter
    Ho spostato la riga: mySound.load(req, context); in modo che le informazioni per lo streaming dei dati siano visibili in tutto il codice.
    ciao
    bene così funziona..xò lo stop in realtà si comporta solo da pausa..ciò significa che lui bufferizza lo streaming all'apertura del filmato e nella riproduzione riparte sempre da quel punto (anche se hai premuto stop da 5 min...lui ti rifà ascoltare tutto dalla bufferizzazione all'apertura della clip)

    Invece io voglio che stop interrompa il flusso e al prossimo play mi ribufferizza e prosegue da quell'esatto momento.

  4. #4
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    ...Si infatti, ricomincia sempre dall'inizio del flusso caricato in precedenza.

    Ho fatto una ricerca nella guida in linea di ActionScript 3.0 e ho visto che per l'oggetto Sound c'è il metodo: .close ();
    Interrompe lo streaming e provoca l'arresto di tutte le operazioni di scaricamento dati. Dopo la chiamata al metodo close() non è più possibile leggere dati dallo streaming.

    Quindi l'ho aggiunto alla funzione di stop e inserito il codice di caricamento dello streaming in una funzione specifica che chiamo subito e richiamo dopo lo stop.
    Il metodo oggettoSound.close (); infatti come indicato nella guida elimina definitivamente la possibilità di leggere dati da quello streaming per cui richiamando la funzione ''stream" lo ri-creo di nuovo.

    Non ti garantisco che questa sia la soluzione più giusta in quanto non conosco molto queste classi però mi sembra che funzioni bene:

    Codice PHP:
    import flash.media.Sound;
    import flash.media.SoundLoaderContext;
    import flash.net.URLRequest;
    import flash.media.SoundChannel;

    var 
    mySoundChannel:SoundChannel;
    var 
    mySound:Sound;

    stream();
    function 
    stream():void
    {
        
    mySound = new Sound();
        
    mySoundChannel = new SoundChannel();
        var 
    req:URLRequest = new URLRequest("http://91.121.173.25:8540");
        var 
    context:SoundLoaderContext = new SoundLoaderContext(1000,true);
        
    mySound.load(reqcontext);
        
    play_btn.visible true
    }

    play_btn.addEventListener(MouseEvent.CLICKsoundplay);
    stop_btn.addEventListener(MouseEvent.CLICKsoundstop);

    function 
    soundplay(event:MouseEvent):void
    {
        
    play_btn.visible false
        mySoundChannel 
    mySound.play();
    }
    function 
    soundstop(event:MouseEvent):void
    {
        
    mySoundChannel.stop();
        
    mySound.close();
        
    stream();

    Nota anche che nella funzione play rendo invisibile il pulsante play_btn perchè se si premeva più volte su quel pulsante andavano in play più tracce sovrapposte.
    Potresti anche disabilitarlo e riabilitarlo nella funzione "stream".


    ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    40
    Originariamente inviato da Sleter
    ...Si infatti, ricomincia sempre dall'inizio del flusso caricato in precedenza.

    Nota anche che nella funzione play rendo invisibile il pulsante play_btn perchè se si premeva più volte su quel pulsante andavano in play più tracce sovrapposte.
    Potresti anche disabilitarlo e riabilitarlo nella funzione "stream".
    ciao
    Perfetto ti ringrazio..mi hai risolto un bel problemone. Per quanto riguarda i pulsanti ho evitato di rendere invisibile (funzionale si...ma esteticamente non gradivo molto) ma semplicemente ho disabilitato la funzione aggiungendo una semplice variabile booleana (controllo) come segue:

    codice:
    import flash.media.Sound;
    import flash.media.SoundLoaderContext;
    import flash.net.URLRequest;
    import flash.media.SoundChannel;
    
    var mySoundChannel:SoundChannel;
    var mySound:Sound;
    var controllo:Boolean;
    
    stream();
    function stream():void
    {
        mySound = new Sound();
        mySoundChannel = new SoundChannel();
        var req:URLRequest = new URLRequest("http://91.121.173.25:8540");
        var context:SoundLoaderContext = new SoundLoaderContext(1000,true);
        mySound.load(req, context);    
    }
    
    play_btn.addEventListener(MouseEvent.CLICK, soundplay);
    stop_btn.addEventListener(MouseEvent.CLICK, soundstop);
    
    function soundplay(event:MouseEvent):void
    {
    	if (!controllo)
    	{
        mySoundChannel = mySound.play();
    	controllo = true;
    	}
    }
    function soundstop(event:MouseEvent):void
    {
        mySoundChannel.stop();
        mySound.close();
        stream();
    	controllo = false;
    }
    Grazie infinite. Adesso non mi resta che sistemare le azioni per l'aumento e diminuzione del volume.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    40
    Eccomi quì di nuovo..dopo aver concluso tutto il player e averlo testato su flash ho provato a inserirlo su una pagina web. Da locale per motivi di sicurezza non viene eseguito alcun suono.

    Il problema è che anche da remoto non succede nulla. Ricordo vagamente che per permettere la comunicazione con un server esterno bisognava creare un file xml all'interno dello spazio web dove venivano inseriti dei parametri per autorizzare la cosa.

    Mi chiedo è possibile che il problema sia questo? o c'è dell'altro?

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    40
    EDIT:

    Problema risolto. A chi dovesse servire, non so per quale ragione ma leggendo in una guida in inglese ho capito che nel urlrequest bisogna aggiungere un punto e virgola dopo l'indirizzo dello streaming

    Es. "http://186.158.96.52:8090/;"

    In più ho aggiungo il parametro "security.allowDomain" in modo da permettere a flash di autorizzare la comunicazione con il dominio dello stream. E poi settato il file crossdomain.xml sul server web per completare l'autorizzazione.

    Ciao e grazie a tutti.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    1
    Ciao a tutti, ciao Sarohash
    nuovissimo in questo forum, faccio i complimenti a tutti.
    Sono alle primissime armi con actionscript e co., ti chiedo se potresti dirmi qual'e' il codice da aggiungere per per far partire il suono in automatico (autoplay) e soprattutto dove devo aggiungerlo.
    Lo so che e' un post vecchio, ma cambiando alcune cose sono riuscito a far partire lo streaming.
    Adesso mi manca solo la partenza in automatico del player.
    Grazie in ogni caso e buona serata.
    mikkos

  9. #9
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ciao, può darsi che chi ha partecipato alla discussione non frequenti più il forum, pertanto è sempre meglio aggiungere un nuovo thread e magari inserire un link che punta a questo.
    Per ora lasciamo così e vediamo se qualcuno intende riprendere la discussione.
    Semmai, avvisami via privati che apri una nuova discussione e rimetto questa in armadio

  10. #10
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Originariamente inviato da mikkos
    Sono alle primissime armi con actionscript e co., ti chiedo se potresti dirmi qual'e' il codice da aggiungere per per far partire il suono in automatico (autoplay) e soprattutto dove devo aggiungerlo.
    Se vuoi che lo streaming parta in automatico ti basta mettere l'istanza della classe Sound in play:

    Codice PHP:
    import flash.media.Sound;
    import flash.media.SoundLoaderContext;
    import flash.net.URLRequest;

    var 
    mySound:Sound;

    mySound = new Sound();
    var 
    req:URLRequest = new URLRequest("http://91.121.173.25:8540");
    var 
    context:SoundLoaderContext = new SoundLoaderContext(1000,true);
    mySound.load(reqcontext);

    mySound.play(); 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.