PDA

Просмотр полной версии : Срабатывание события onMetaData


Bred45
06.03.2009, 15:02
Привет всем.
Приведу небольшой абстрактный код, так чтобы вычленить проблему.
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
my_video.attachVideo(ns);
ns.play("test.flv");
ns.onMetaData = function(infoObject:Object) {
trace("запуск onMetaData");
};
ns.onStatus = function(infoObject:Object):Void {
if (infoObject.code == "NetStream.Play.Start") {
ns.seek(0);
}
};

Есть два flv видеоролика. Оба имеют метаданные.

Ролик 1 имеет метаданные:

filesize = 3224817
audiocodecid = 2
stereo = false
audiosamplesize = 16
audiosamplerate = 44100
videocodecid = 4
framerate = 1000
videodatarate = 0
height = 288
width = 352
duration = 57.417

Ролик 2 имеет метаданные:

canSeekToEnd = true
audiocodecid = 2
audiodelay = 0.038
audiodatarate = 64
videocodecid = 4
framerate = 25
videodatarate = 400
height = 288
width = 352
duration = 27.76

Вопрос 1: Почему onMetaData выполняется только на первом ролике? Из-за наличия в нем filesize?

Вопрос 2: Второй ролик был закодирован Adobe Flash CS3 Video Encoder. Почему в нем нет filesize?

Вопрос 3: Если убрать команду ns.seek(0), то событие будет срабатывать на обоих роликах. Объясните, если можно, в двух словах это влияние. Мне казалось, что onMetaData срабатывает после play, если ролик содержит метаданные.

Буду очень признателен, если кто-то подскажет ответы. Спасибо.

Molecula
06.03.2009, 21:49
1) Нет, не из-за filesize;
2) Разные энкодеры зашивают разные данные;
3) Да, тогда и срабатывает onMetaData.

Зачем перемотку в начало поставили, когда видео начало проигрываться? Получается нелогично как-то.

Если убрать команду ns.seek(0), то событие будет срабатывать на обоих роликах.

Какое событие, onMetaData?

А как второй ролик запускаете?

cleptoman
06.03.2009, 22:34
по seek срабатывает onStatus, но не отрабатывает onMetaData

Bred45
07.03.2009, 12:37
Ребята, спасибо что ответили.
Второй ролик запускается как и первый (по очереди переименовываем их в test.flv).

1) Нет, не из-за filesize;
А из-за чего?

2) Разные энкодеры зашивают разные данные;
На работе закодированный этой же программой ролик событие onMetaData запускает, а на домашнем - никак. А настроек для матаданных в самом энкодере я не нашел.

Какое событие, onMetaData?
да

Зачем перемотку в начало поставили, когда видео начало проигрываться? Получается нелогично как-то.
Согласен. Но сейчас вопрос в другом: в различном поведении на разных роликах.

по seek срабатывает onStatus, но не отрабатывает onMetaData
Хорошо. Но почему не отрабатывает на ролике 2, но отрабатывает на ролике 1?

И все равно механизм мне не понятен. Запускаем play (видео, кстати, запускается), метаданные получены, что мешает сработать onMetaData еще даже до выполнения seek. Или как это seek может отключить это событие...
:)