![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
день добрый.
я совсем новичок в as3 . пробую написать flv-проигрыватель. никак не могу понять как мне узнать данные о длине видеофайла. нашел в хелпе в adobe flash cs3 professional пример, создал пустой fla файл и прописал для него базовый класс, куда добавил код из примера , который по их мнению должен вывести всю инфу. package { import flash.net.NetConnection; import flash.net.NetStream; import flash.events.NetStatusEvent; import flash.media.Video; import flash.display.Sprite; public class test extends Sprite { public function test() { // из примера var nc:NetConnection = new NetConnection(); nc.connect(null); var ns:NetStream = new NetStream(nc); ns.client = this; ns.play('video.flv'); var vid:Video = new Video(); vid.attachNetStream(ns); addChild(vid); // <<< из примера } // из примера function onMetaData(infoObject:Object):void { var key:String; for (key in infoObject) { trace(key + ": " + infoObject[key]); } } // <<< из примера } } |
|
|||||
private var FileSrc:String = "Video.flv"; private var videoStream:NetStream; private var nc:NetConnection; private var customClient:Object = new Object(); private var videoTotalSec:uint; public function setFlv(src:String):void { FileSrc = src; removeEventListener(Event.ADDED_TO_STAGE, onAdd); nc = new NetConnection(); nc.connect(null); videoStream = new NetStream(nc); videoStream.client = customClient; customClient.onMetaData = onMetaDataHandler; //trace(this.playPause); this.videoObject.attachNetStream(videoStream); videoStream.play(FileSrc); videoStream.pause(); } private function onMetaDataHandler(metadata:Object):void { trace("MetaData length: " + metadata.duration); videoTotalSec = metadata.duration; } |
|
|||||
|
Спасибо Fillini за быстрый ответ. Перебросил бебе ваш код, закомментировал только строку removeEventListener(Event.ADDED_TO_STAGE, onAdd)- вроде лишняя. Но по прежнему в окно output ничего не выводится. и ошибок тоже нет.
|
|
|||||
|
а видео проигрывает?
|
|
|||||
|
видео проигрывает
|
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
у меня примерно такой же код, что вы привели первым работает.
function open (source:String) {
videoURL = source;
connection = new NetConnection();
connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
connection.connect(null);
}
private function netStatusHandler(event:NetStatusEvent):void {
//trace ("net status code: "+event.info.code);
switch (event.info.code) {
case "NetStream.Play.Stop":
isPlay = false;
break;
case "NetConnection.Connect.Success":
connectStream();
break;
case "NetStream.Play.StreamNotFound":
trace("Unable to locate video: " + videoURL);
break;
}
}
private function connectStream():void {
stream = new NetStream(connection);
stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
//stream.addEventListener(flash.net., metaDataHandler);
stream.play(videoURL);
//stream.client = new MetaDataClient();
stream.client = this;
//addChild(video);
video = new Video();
video.attachNetStream(stream);
video.addEventListener (Event.ENTER_FRAME, videoEnterFrameHandler);
addChildAt(video, 0);
//video.width = 400; video.height = 300;
trace ("video.width=" + video.width + " video.height=" + video.height);
video.width = Main.cur.realWidth; video.height = Main.cur.realHeight;
control.x = (video.width - control.width) / 2;
control.y = video.height - control.height - 10;
isPlay = true;
}
public function onMetaData(info:Object):void {
//trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate);
duration = info.duration;
}
|
|
|||||
|
попробовал ваш код под себя переписать , но только видео проигрывается.
у меня получился вот такой код базового класса. может есть какие недоделки? package { import flash.net.NetConnection; import flash.net.NetStream; import flash.events.NetStatusEvent; import flash.media.Video; import flash.display.Sprite; import flash.events.Event; public class test extends Sprite { private var FileSrc:String = "Video.flv"; private var videoStream:NetStream; private var nc:NetConnection; private var customClient:Object = new Object(); private var videoTotalSec:uint; private var videoObject:Video = new Video(); public function test() { this.setFlv('video.flv'); } public function setFlv(src:String):void { FileSrc = src; nc = new NetConnection(); nc.connect(null); videoStream = new NetStream(nc); videoStream.client = customClient; customClient.onMetaData = onMetaDataHandler; addChild(videoObject); videoObject.attachNetStream(videoStream); videoStream.play(FileSrc); //videoStream.pause(); } private function onMetaDataHandler(metadata:Object):void { trace("MetaData length: " + metadata.duration); videoTotalSec = metadata.duration; } } } |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 61
|
Для кадра
var nc:NetConnection = new NetConnection(); nc.connect(null); var movie:NetStream = new NetStream(nc); movie.play("movie.flv"); var vid:Video = new Video(); vid.attachNetStream(movie); addChild(vid); movie.client = this; function onMetaData(infoObject:Object):void { var key:String; for (key in infoObject) { trace(key + ": " + infoObject[key])} trace (infoObject.duration); } |
|
|||||
|
я думал что в каждом видеофайле они полюбому быть должны. щас глянул это видео на каком-то готовом проигрывателе , а там нет бегунка на полосе времени клипа и время указано в 00:00-- получается что нет метаданных по которым, как я понимаю можно построить бегунок на шкале времени и определтить само время
Добавлено через 2 минуты Ребята , спасибо всем за помощь . действительно метаданных не было в файлах, которые воспроизводил. скачал новых --- и пришло счастье)))) поднял я шум ни из-за чего. все работает!!! |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:33. |
|
|
« Предыдущая тема | Следующая тема » |
|
|