Просмотр полной версии : Ключевые (опорные) кадры FLV
UnVisible
23.03.2008, 18:39
Здавствуйте!
Появился наболевший вопрос.
Я PHP програмист (в АС пока относительно ламер).
Постала задача сделать плеер, но чтобы при открытии страницы с ним не отображался черный екран, а один (или несколько, в стиле слайдшоу) наилучших по качеству кадров (тоесть опорных (ключевых)) формата FLV.
Была мысль вытянуть опорные кадры средствами DirectShow, но такого модуля под ПХП да ещё и под линукс я не нашел.
Остается только 2 варианта:
1. Средствами ПХП давать запрос AS, и чтобы тот возвращал 1 (или несколько) изображений опорных кадров.
2. AS сам при загрузке вытягивал из видео 1 (или несколько) опорных кадров и делал слайдшоу.
Вопросы:
1. Как, или каким класом, из FLV формата можно выдрать опорный кадр?
2. Сужиствуют ли вообще в FLV формате опорные кадры? (если нет, тогда вопрос вообще теряет смысл).
3. Может кто знает, возможно ли на одном ПХП такое зделать?
P.S. Сколько не роюсь в инете по поводу "Описание FLV формата" или "Работа с FLV форматом" - нахожу один маразм, типа конвертеры, плееры и т.д. :(
Заранее пасибо! :)
не решение, только предположения по теме:
ключевые кадры есть, NetStream.seek(offset:Number) гонит видео в кейфрейм, ближайший к offset (в секундах);
стало быть есть возможность 'сфотографировать' эти кейфреймы - BitmapData.draw(..), правда для этого надо дождаться загрузки всего потока
показать эти скриншоты в самой флешке, понятно, не вопрос..
вернуть сриншоты серверу в плеере ниже 9-ки не получиться..
в 9-ке (AS3) есть возможность послать картинку как ByteArray, декодеров под разные форматы понаписано достаточно, легко нагуглишь..
как это все можно (и можно ли вообще) в ПХП не знаю
UnVisible
24.03.2008, 10:35
Огромное спасибо! =)
Теперь хоть знаю в какую сторону копать! :drinks:
chingachgoog
24.03.2008, 12:50
стало быть есть возможность 'сфотографировать' эти кейфреймы - BitmapData.draw(..), правда для этого надо дождаться загрузки всего потока
Тут где-то на форуме вроде было решение, как не дожидаться загрузки всего потока. (кто-то про ютуб спрашивал по-моему)
вернуть сриншоты серверу в плеере ниже 9-ки не получиться..
в 9-ке (AS3) есть возможность послать картинку как ByteArray, декодеров под разные форматы понаписано достаточно, легко нагуглишь..
Не ByteArray одним жив флеш :)
Можно и ниже 9-ки передать - начиная с ФП поддерживающего битмапдату
UnVisible
26.03.2008, 16:12
Появилась проблема. Поставил Флеш 9 АС3. Загрузка видео и переход на определенный кадр работает. А вот при попытке вывести его через БитМап дает ошибку. Что я не так делаю?
Вот код скрипта:
import flash.display.Bitmap;
import flash.display.BitmapData;
var conteiner:MovieClip = _root.createEmptyMovieClip("conteiner", this.getNextHighestDepth());
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
my_video.attachVideo(stream_ns);
stream_ns.play("d:/clip.flv");
stream_ns.pause(true);
stream_ns.seek(78);
var copy_screen:BitmapData = new BitmapData(200,200);
copy_screen.draw(stream_ns);
var bit:Bitmap = new Bitmap(copy_screen);
this.addChild(bit);
Дает ошибку:
The class or interface 'flash.display.Bitmap' could not be loaded.
var bit:Bitmap = new Bitmap(copy_screen);
Total ActionScript Errors: 1 Reported Errors: 1
путаница какая-то: ты пишешь (видимо и публикуешь) под 8-ку (AS2), а пытаешься пользоваться Bitmap'ом, а его там нет, о чем тебе компилятор и докладывает.
UnVisible
26.03.2008, 19:02
Ну вот это же работает (взято с примера):
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.text.TextField;
var tf:TextField = new TextField();
tf.text = "bitmap text";
var myBitmapData:BitmapData = new BitmapData(80, 20);
myBitmapData.draw(tf);
var bmp:Bitmap = new Bitmap(myBitmapData);
this.addChild(bmp);
Ну и пишу я в АС3. :(
Где вы видите в названиии раздела цифру 3?
Пакет flash.display в АС2 содержит один-единственный класс - BitmapData, а в АС3 их там куча, Bitmap в том числе.
Зайти в Publish Settings - Flash выставить там плеер 9 и АС3 в настройках. Ну и тему запостить в раздел про АС3 %)
ЗЫ. Про Ю-туб я спрашивал. Ну, решение... решение в том, что ФЛВ можно начинать буферить и проигрывать с любой позиции в файле. Если сервер умеет такое. Но правда никаких приемлимых результатов с этим я пока не добился =( Да, и еще, сразу скажу, пока не было события от NetStream'a NetStream.Buffer.Flush заносить чего-то в битмапдату нет смысла.
ЗЫЫ. В примере вы не используете класс Bitmap, само по себе выражение import еще не значит, что компилятор клас добавит в проект, его нужно еще где-нибудь в коде использовать. Иначе импорты типа import flash.display.*; работали бы очень плохо.
UnVisible
27.03.2008, 11:18
Где вы видите в названиии раздела цифру 3?
Я когд регился меня не пустило чето в цифру "3". Да и тема одна и таже - зачем мусорить форум, если можно продолжить здесь - и всем будет ясна суть моей проблемы в целом! =)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.