Question

Je l'ai créé un joueur pour un client dans le passé en utilisant leur serveur LimeLight pour diffuser des vidéos et pas eu un problème avant, mais pour un nouveau client en utilisant un serveur différent Limelight, les vidéos semblent mettre fin à 3-4 secondes trop début.

Mes traces sur 3 vidéos très différentes I testées:

metadata duration = 32        // 32 secs long, ends at 27
Stop [27.350 seconds] = 4.65 

metadata duration = 17        // 17 secs long, ends at 12
Stop [12.852 seconds] = 4.148

metadata duration = 258       // 258 secs long, ends at 255
Stop [255.861 seconds]

Dans les lecteurs vidéo je vérifier NetStream.Play.Stop puis mettre une fonction de type « reset » là-dedans. Cette fonction déclenche cependant trop tôt en raison de ce bug étrange. Quelqu'un at-il déjà vu cela?


private function netStatusHandler(event:NetStatusEvent):void 
    {
        trace("connected is: " + nc.connected );

        switch (event.info.code) 
        {
            case "NetConnection.Connect.Success":
                trace("Connected");
                connectStream();
                break;

            case "NetStream.Play.Start":
                trace("********** Start [" + ns.time.toFixed(3) + " seconds]");
            break;

            case "NetStream.Play.Stop":
                trace("‹ ----------- Playback has stopped. ----------- ›");
                trace("Stop [" + ns.time.toFixed(3) + " seconds]");
                if (nsBuffering){ removeChild(bufferAni); }
                nsBuffering = false;
                videoStatus = "NotPlaying";
                resetVideo(); //<- Video ends so go back to start
                // ^ This triggers too early
            break;
        }
    }

Le seul travail autour que je vois pour cela économise le nombre initial que je reçois de la durée de métadonnées, et l'exécution d'une minuterie pour vérifier en permanence lorsque l'ns.time en cours correspond à des métadonnées, puis exécutez ma fonction de remise à zéro.

Était-ce utile?

La solution

Je CORRECTIF TROUVÉ!

http://www.wildform.com/support/tutorials/loopingFLVs/

Je devais mettre dans un premier chèque lorsque le netstream a frappé play.stop, puis appeler ma fonction de remise à zéro lorsque la mémoire tampon était vide ...

Le code sur le site est AS2, mais je l'a converti en AS3:

.

private function netStatusHandler(event:NetStatusEvent):void 
    {
        trace("connected is: " + nc.connected );

        switch (event.info.code) 
        {
            case "NetConnection.Connect.Success":
                trace("Connected");
                connectStream();
                break;

            case "NetStream.Buffer.Empty":
                trace("‹ ----------- Buffer is Empty! ----------- ›");
                if (nsBuffering){ removeChild(bufferAni); }
                nsBuffering = false;

                if (videoFinished) // < Now I can run my reset
                {
                    resetVideo();
                    videoFinished = false;
                }

            break;

            case "NetStream.Buffer.Full":
                trace("‹ ----------- Buffer is FULL! ----------- ›");
                if (nsBuffering){ removeChild(bufferAni); }
                nsBuffering = false;
            break;

            case "NetStream.Buffer.Flush":
                trace("Data has finished streaming, remaining buffer will be emptied.");
                videoStatus = "NotPlaying";
            break;

            case "NetStream.Play.Stop":
                trace("‹ ----------- Playback has stopped. ----------- ›");

                videoFinished = true; // < This first
            break;
        }
    }

Autres conseils

Je sais que ce fil est très vieux, mais je me cogner la tête en essayant de résoudre ce problème; et en dehors de votre solution, il est tout simplement pas grand-chose à ce sujet en ligne.

Alors, je l'ai compris. Si vous utilisez RTMP, vous devez changer bufferTime false.

Depuis rtmp NE PAS cache, il n'y a pas besoin de temps de mémoire tampon, et si vous définissez un, vous vous limitez et, éventuellement, le tampon est vide.

ns.bufferTime = false;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top