2014-02-01 11 views
0

Мне нужно воспроизвести несколько (66) синхронизированных FLV-видео во флэш-памяти. Что я делаю:Несколько NetStreams и производительность

создать новый NetConnection (один для всех NetStreams)

var connection: NetConnection, 
clipper: MovieClip; 
connection = new NetConnection(); 
connection.connect(null); 

У меня есть функция, чтобы создать все Netstream

function addCamera(id, url, pos_x, pos_y) { 
    var player: Video = new Video(stageSize.x, stageSize.y), 
     stream: NetStream, 
     clip: MovieClip; 
    clip = new MovieClip(); 
    stage.addChildAt(clip, 0) 
    stream = new NetStream(connection); 
    stream.client = this; 
    clip.addChild(player); 
    player.attachNetStream(stream); 
    stream.bufferTime = 1; 
    stream.receiveAudio(false); 
    stream.receiveVideo(true); 
    stream.inBufferSeek = true; 
    stream.play(url) 
    player.visible = false; 

    if (!camera[pos_x]) { 
     camera[pos_x] = []; 
     trace("new camera row:" + pos_x.toString()); 
     planeSize[0] = planeSize[0] + 1; 
    } 
    trace("new camera: [" + pos_x.toString() + ", " + pos_y.toString() + "]"); 
    camera[pos_x][pos_y] = { 
     "stream": stream, 
     "player": player, 
     "pos_x": pos_x, 
     "pos_y": pos_y, 
     "buffered": false, 
     "buffer": 0, 
     "id": id 
    } 

Только одно видео видно, в то время :

camera[currentCamera[0]][currentCamera[1]].player.visible = true; 

(остальное имеет .visible=false)

Это отлично работает для новых компьютеров, но для старых это кошмар. Возможно ли, чтобы скрытые видео сохраняли свои временные метки, но чтобы вспышка не отображала их?

Кроме того, когда я ищу:

function seekTo(time) { 
    trace("Seek to: " + time.toString()); 
    for each(var pos_x in camera) { 
     for each(var curCamera in pos_x) { 
      seeking = true; 
      curCamera.stream.seek(time); 
     } 
    } 
} 

это занимает некоторое время.

ответ

1

Старайтесь добавлять видео в DisplayList только тогда, когда они должны быть видимыми.

Orrrr.

Есть один мувиклип в качестве проигрывателя:

var currentClip:MovieClip = new MovieClip(); 

и добавить его на сцену.

Тогда клипы, которые добавляются в функции addCamera (не stage.addChild здесь), толкать их в вектор

Затем, когда вы хотите конкретный клип для воспроизведения, ссылочный currentClip к клипу в векторе, который должен быть показан.


Что касается поисков, Может быть, попытаться иметь вектор потоков, что ссылки всех потоков и проходные ищут каждый из тех, кто ...

Я занимает немного времени, чтобы получить объект потока от каждой камеры. Также вам нужен только один цикл, а не вложенный. Это займет больше памяти, чем ссылка каждого потока в векторе.