Estranho NetStream problema quando utilizar a função de
-
28-09-2019 - |
Pergunta
Este código faz com que o meu arquivo f4v para parar a reprodução prematuramente.A mudança de horário, mas cerca de 8-10 segundos.
loadSong();
function loadSong()
{
if(!songPlaying)
{
songPlaying = true;
var customClient:Object = new Object();
customClient.onCuePoint = cuePointHandler;
customClient.onMetaData = metaDataHandler;
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.client = customClient;
ns.play("song.f4v");
}
trace("HERE");
}
function cuePointHandler(infoObject:Object):void{
trace(infoObject.name);
}
function metaDataHandler(infoObject:Object):void {
trace("metaData");
}
Este código, vamos a f4v jogar até o fim.WTF!?Parece que quando eu chamá-lo através de uma função que faz com que o problema.FYI, o código é armazenado no primeiro quadro da linha de tempo principal, e o F4v é apenas de áudio.Qualquer ajuda seria apreciada.
if(!songPlaying)
{
songPlaying = true;
var customClient:Object = new Object();
customClient.onCuePoint = cuePointHandler;
customClient.onMetaData = metaDataHandler;
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.client = customClient;
ns.play("song.f4v");
}
Solução
O que está acontecendo, quando você declarar seu NetConection
e NetStream
dentro da função, é a de que o escopo da variável é o local para essa função.O que significa que nada mais é fazer referência a NetConnection
você criou e, portanto, o coletor de lixo varre-lo durante a sua próxima execução (é por isso que você está vendo o tempo variável).
Quando você declará-lo em apenas uma instrução se as variáveis estão no escopo do filme e que contém uma referência para eles e, portanto, não são lixo coletado.
Eu não sei o que a arquitetura é para o resto de seu código, mas, se você quiser usar funções para manter o seu código, tente colocar uma declaração para o var nc:NetConnection = new NetConnection();
pouco antes de o loadSong();
instrução.
Arquitetonicamente, você pode querer refatorar seu código para fora da moldura, mas ele pode realmente não valer a pena, se ele é apenas um par de linhas de código.Só depende do seu projeto.
Para obter mais informações sobre a coleta de lixo, confira Compreendendo coleta de lixo no Flash Player 9 (Ele diz que o Flash Player 9, mas é aplicável às 10 bem).