0

我需要在 Flash 中播放多个 (66) 个同步的 .flv 视频。我所做的:

我创建了一个新的 NetConnection(所有 NetStreams 一个)

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

我有一个创建所有网络流的功能

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);
        }
    }
}

这需要一段时间。

4

1 回答 1

1

尝试仅在应该可见时将视频添加到 DisplayList。

噢噢噢。

将一个 MovieClip 作为播放器:

var currentClip:MovieClip = new MovieClip();

并将其添加到舞台。

然后在 addCamera 函数中添加的剪辑(这里不要 stage.addChild),将它们推入 Vector

然后,当您想要播放特定剪辑时,请将 currentClip 引用到 Vector 中要显示的剪辑。


至于寻找,也许尝试有一个引用所有流的流的向量,并通过寻找其中的每一个来循环......

我需要一点时间来从每个摄像头获取流对象。同样这样,您只需要一个 for 循环而不是嵌套的。它将占用更多内存,而不是 Vector 中每个流的引用。

于 2014-02-02T08:50:16.590 回答