Просмотр полной версии : flv плеер с подстройкой под размер видео файла
Здраствуйте
столкнулся с такой проблемкой:
у меня flv плеер который должен проигрывать видео файлы размеры которых разные, следовательно пытаюсь спрограммировать автоподстройку размера видео под окно проигрывыателя ( уменьшение, центрирование)
для этого я передаю через Xml размеры файла и в соответствии с ними провожу манипуляуии с размерами кампонентой MediaDisplay (в которую грузится видео) - результат отличен от ожидаемого
может что то в инспекторе самой компоненты что то поменять необходимо?
или для реалезации данного плеера необходим другой подход некий?
благадарю
amexdesign
11.11.2009, 01:16
вот полный код плеера. После полной загрузки плеер принимает размеры видио(их не нужно указывать в xml). Scin Bar также принимает ширину видео. Разбирайтесь и пользуйтесь....
var amountLoaded:Number;
var duration:Number;
var heightY:Number;
var widthX:Number;
var pausePos:Number;
var scrubInterval;
var video:String;
import mx.transitions.Tween;
import mx.transitions.easing.*;
ns.stop(video);
controls._visible = 0;
close_btn._visible = 0;
controls.playButton._visible = 0;
controls.loader.timeBar_mc._width = 0;
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
theVideo.attachVideo(ns);
//ns.setBufferTime(10);
loader.loadbar._xscale = 0;
var loaded_interval:Number = setInterval(checkBytesLoaded, 500, ns);
function checkBytesLoaded(my_ns:NetStream) {
var pctLoaded:Number = Math.round(my_ns.bytesLoaded / my_ns.bytesTotal * 100);
bufferClip.loaded_txt.text = Math.round(my_ns.bytesLoaded / 1000) + " of " + Math.round(my_ns.bytesTotal / 1000) + " KB loaded (" + pctLoaded + "%)";
loader.loadbar._xscale = pctLoaded;
if (pctLoaded >= 100) {
clearInterval(loaded_interval);
var videoInterval = setInterval(videoStatus,100);
theVideo._height = heightY;
theVideo._width = widthX;
theVideo._x = pac._x - widthX/2;
theVideo._y = pac._y - heightY/2;
bufferClip._x = pac._x - bufferClip/2;
bufferClip._y = pac._y - bufferClip/2;
bufferClip._height = heightY;
bufferClip._width = widthX;
controls._x = theVideo._x;
controls._y = theVideo._y + heightY + 2;
controls.controlBarR._x = theVideo._x + theVideo._width - 10;
controls.controlBar._width = controls.controlBarR._x - 10;
close_btn._x = theVideo._x + theVideo._width - close_btn._width/2;
close_btn._y = theVideo._y + 10;
ns.play(video);
}
}
ns.onStatus = function(info) {
//trace(info.code);
if(info.code == "NetStream.Buffer.Full") {
bufferClip._visible = false;
theVideo._height = heightY;
theVideo._width = widthX;
theVideo._x = pac._x - widthX/2;
theVideo._y = pac._y - heightY/2;
bufferClip._x = pac._x - bufferClip/2;
bufferClip._y = pac._y - bufferClip/2;
bufferClip._height = heightY;
bufferClip._width = widthX;
controls._x = theVideo._x;
controls._y = theVideo._y + heightY + 2;
close_btn._x = theVideo._x + theVideo._width - close_btn._width/2;
close_btn._y = theVideo._y + 10;
controls._visible = 1;
close_btn._visible = 1;
}
if(info.code == "NetStream.Buffer.Empty") {
bufferClip._visible = true;
}
if(info.code == "NetStream.Play.Stop") {
ns.seek(0);
}
}
controls.playButton.onRelease = function() {
ns.pause(false);
controls.pauseButton._visible = 1;
this._visible = 0;
}
controls.pauseButton.onRelease = function() {
ns.pause(true);
controls.playButton._visible = 1;
this._visible = 0;
}
controls.rewindButton.onRelease = function() {
ns.seek(0);
}
ns["onMetaData"] = function(obj) {
duration = obj.duration;
heightY = obj.height;
widthX = obj.width;
trace(widthX);
}
function videoStatus() {
amountLoaded = ns.bytesLoaded / ns.bytesTotal;
controls.loader.loadbar._width = amountLoaded * (controls.loader.loadbar._width + 0.3);
controls.loader.scrub._x = ns.time / duration * (controls.loader.loadbar._width + 0.3);
controls.loader.timeBar_mc._width = ns.time / duration * (controls.loader.loadbar._width + 0.3);
controls.controlBarR._x = widthX - 12;
controls.controlBar._width = widthX - 20;//controls.controlBarR._x - 9.2;
controls.mute._x = widthX - 23;
controls.loader.loadbar._width = controls.mute._x - 72;
controls.loader.ob._width = controls.mute._x - 71.7;
controls.loader.u._width = controls.mute._x - 71.7;
controls.loader.r._x = controls.mute._x - 71.7;
bufferClip._visible = false;
theVideo._height = heightY;
theVideo._width = widthX;
theVideo._x = pac._x - widthX/2;
theVideo._y = pac._y - heightY/2;
controls._x = theVideo._x;
controls._y = theVideo._y + heightY + 2;
close_btn._x = theVideo._x + theVideo._width - close_btn._width/2;
close_btn._y = theVideo._y + 10;
}
/*controls.loader.scrub.onPress = function() {
clearInterval(videoInterval);
scrubInterval = setInterval(scrubit,10);
startDrag(this);
}
controls.loader.scrub.onRelease = controls.loader.scrub.onReleaseOutside = function() {
clearInterval(scrubInterval);
videoInterval = setInterval(videoStatus,100);
this.stopDrag();
}*/
function scrubit() {
ns.seek(Math.floor((controls.loader.scrub._x/controls.loader.loadbar._width)*duration));
}
var theMenu:ContextMenu = new ContextMenu();
theMenu.hideBuiltInItems();
_root.menu = theMenu;
var item1:ContextMenuItem = new ContextMenuItem("::::: Video Controls :::::",trace);
theMenu.customItems[0] = item1;
var item2:ContextMenuItem = new ContextMenuItem("Play / Pause Video",pauseIt,true);
theMenu.customItems[1] = item2;
var item3:ContextMenuItem = new ContextMenuItem("Replay the Video",restartIt);
theMenu.customItems[2] = item3;
var item4:ContextMenuItem = new ContextMenuItem("© 2005 Lee Brimelow",trace,true);
theMenu.customItems[3] = item4;
function pauseIt() {
ns.pause();
}
function stopIt() {
ns.seek(0);
ns.pause();
}
function restartIt() {
ns.seek(0);
}
_root.createEmptyMovieClip("vSound",_root.getNextHighestDepth());
vSound.attachAudio(ns);
var so:Sound = new Sound(vSound);
so.setVolume(100);
controls.dragger.onPress = function() {
this.onEnterFrame = function() {
this.startDrag(false, 10, this._y, 60, this._y);
vol = Math.floor((controls.dragger._x)*2)-20;
so.setVolume(vol);
(vol == 0) ? speaker_btn.onRelease() : speakerAus_btn.onRelease();
volumeText = true;
};
};
controls.dragger.onRelease = controls.dragger.onReleaseOutside = function () {
delete this.onEnterFrame;
volumeText = false;
this.stopDrag();
};
controls.mute.onRollOver = function() {
if(so.getVolume()== 100) {
this.gotoAndStop("onOver");
}
else {
this.gotoAndStop("muteOver");
}
}
controls.mute.onRollOut = function() {
if(so.getVolume()== 100) {
this.gotoAndStop("on");
}
else {
this.gotoAndStop("mute");
}
}
controls.mute.onRelease = function() {
if(so.getVolume()== 100) {
so.setVolume(0);
this.gotoAndStop("muteOver");
}
else {
so.setVolume(100);
this.gotoAndStop("onOver");
}
}
благадарю+)
но мне проще будет с нуля разобраться, главное литературу найти
вот тут есть всё чего на данный момент мне не хватает:
http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=Part3_Using_V2_Components_1.html%22]http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=Part3_Using_V2_Components_1.html
Уделил время на анализ и применения функций и свойств media components ( применительно к моей теме с media display) который нашлись в описаниии по ссылке (см. выше в моём сообщении), и тут столкнулся с таким нюансом:
последовательно беру гружу первое видео, потом жму на кнопку грузится второе, но не происходит сбрасываний свойств, то есть такие свойства как :
my_pleer.preferredWidth
my_pleer.preferredHeight
my_pleer.totalTime
(может и ещё какие-нибудь, не проверял) имеют значения предыдущего видео, которое проигрывалось перед текущим+(
может тут есть некая функция, которая сбрасывала бы эти вещи в ноль? или я задаю загрузку неправильно:
my_pleer.contentPath = ur[i];
буду весьма благодарен за подссказку, так как из-за этого тапчусь на месте и не могу двинуться дальше
спасибо
повозился с MediaDisplay, спрограммировал плеер (в приложении прикрепил исходник, на дизайи не серчайте не до него сейчас, главное программинг)
так вот, всё хорошо работает только в IE, если локально на компьютаре открывать плеер в Mazilla или Opera, то при нажатии на кнопку загрузки видеоо (выполняется команда:
my_pleer.contentPath = ur[i];
), то ничего не происходит+( ежеле в интернет выложить плеер, то там срабатывает, но с некой непонятной задержкой+(
буду благадарен, если кто подскажит причину этого безобразия, и есть ли ему решение
спасибо
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.