我需要在flash中播放多个(66)同步的.flv视频。我做了什么:
我创建了一个新的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);
}
}
}
需要一段时间。
答案 0 :(得分:1)
尝试仅在可见时将视频添加到DisplayList。
Orrrr。
将一个MovieClip作为播放器:
var currentClip:MovieClip = new MovieClip();
并将其添加到舞台上。
然后在addCamera函数中添加的剪辑(不要在这里使用stage.addChild),将它们推送到Vector
然后,当您想要播放特定剪辑时,请将currentClip引用到要显示的Vector中的剪辑。
至于寻求,也许尝试有一个引用所有流的流的向量,并循环寻找其中的每一个...
我花了一点时间从每个摄像头获取流对象。这样你只需要一个for循环而不是嵌套。它会占用Vector中每个流的引用更多的内存。