Показать сообщение отдельно
Старый 15.06.2007, 23:10
D12 вне форума Посмотреть профиль Отправить личное сообщение для D12 Найти все сообщения от D12
  № 8  
D12
меценат
 
Аватар для D12

блогер
Регистрация: Jan 2004
Адрес: D
Сообщений: 1,592
Записей в блоге: 2
Код:
/// Stream FLV-player by MureJlb.
/// (c) DeCafe
/// http://dcafe.ru
/// Размер видео - 320 x 240
/// Чтобы изменить размер видео, нужно изменить размер видеоКлипа motion_vid, вложенного в motion_mc.
// Если входящее видео отличается по размеру от окна видеоКлипа - оно будет подогнано без учета пропорций.

var src:String = "decafe.flv";
//имя файла для подгрузки



var flv_connect:NetConnection = new NetConnection();
flv_connect.connect(null);
var motionStream:NetStream = new NetStream(flv_connect);
var soundControll:Sound = new Sound(_level0);
var duration:Number = 0;
// длина ролика. ее мы будем получать по событию onMetaData
var seeker:Number = null;
// переменная для setInterval - для ускорения перемотки
var timePressed:Number = 0;
// таймер фиксирующий время нажатия клавиши перемотки
var onTheRun:Boolean = false;
// состояние плеера - проигрывается видео или нет
//////////Чтобы проигрывать видео необходимо создать экземпляр типа Video (Делается это в библиотеке)
motion_mc.motion_vid.attachVideo(motionStream);
motionStream.setBufferTime(2);
/// Указывает сколько секунд видео должно загрузиться чтобы началось воспроизведение. В процессе проигрывания, если первые 2 секунды уже проигрались, а вторая порция еще не подгрузилась происходит остановка, до тех пор пока не подгрузятся следубщие 2 секунды.
motionStream.onMetaData = function(meta:Object):Void  {
	duration = meta.duration;
	/*событие возникает, когда плеер связывается с видеоФайлом, и получает от него Мета_данные в виде объекта.
	Чтобы трассировать эти данные необходимо раскомментировать код.*/
	//for (var prop in meta) {
	//	trace(prop+" = "+meta[prop]);
	//}
};
motionStream.onStatus = function(motion_status:Object):Void  {
	//for(var prop in motion_status) {
	//trace(prop + ": "+motion_status[prop]);
	//};
	//// Событие помогает отслеживать состояния воспроизведения - ошибки загрущки, остановку, начало, перемотку - читаем хелп, там все написано. Вот тут возможен момент - если готовить flv  в Макромедиа Флеш8Видео энкодере - и подрезать там длину ролика - то это неблагоприятно сказывается на статусе СТОП. Вывод - не резать длину ролика в энкодере.
	if (motion_status.code == "NetStream.Play.Stop") {
		motionStream.seek(duration);
		motionStream.pause(true);
		play_btn._visible = true;
		pause_btn._visible = false;
	}
};
////// Обработчики кнопок
play_btn.onRelease = function():Void  {
	this._visible = false;
	pause_btn._visible = true;
	if (onTheRun) {
		if (vt_mc._width == 320) {
			motionStream.seek(0);
		}
		motionStream.pause(false);
	} else {
		onTheRun = true;
		motionStream.play(src);
	}
};
pause_btn.onRelease = function():Void  {
	this._visible = false;
	play_btn._visible = true;
	motionStream.pause(true);
};
stop_btn.onRelease = function():Void  {
	motionStream.seek(0);
	onTheRun = false;
	pause_btn._visible = false;
	play_btn._visible = true;
	motionStream.close();
	motion_mc.motion_vid.clear();
};
rew_btn.onPress = function():Void  {
	clearInterval(seeker);
	timePressed = 0;
	seeker = setInterval(changePos, 100, -2);
};
fwd_btn.onPress = function():Void  {
	clearInterval(seeker);
	timePressed = 1;
	seeker = setInterval(changePos, 50, 1);
};
fwd_btn.onRelease = rew_btn.onRelease=function ():Void {
	clearInterval(seeker);
	timePressed = 1;
};
//////////seek
function changePos(dir:Number):Void {
	timePressed++;
	dir *= Math.ceil(timePressed/10);
	var dest:Number = motionStream.time+dir;
	if (dest<0) {
		dest = 0;
	}
	if (dest>duration) {
		dest = duration;
	}
	motionStream.seek(dest);
}
///////////////// volume
volumes.vd_mc.onPress = function():Void  {
	this.startDrag(false, 7, 2, 45, 2);
	this.onMouseMove = changeVolume;
};
volumes.vd_mc.onRelease = volumes.vd_mc.onReleaseOutside=function ():Void {
	this.stopDrag();
	delete this.onMouseMove;
};
function changeVolume():Void {
	var val:Number = Math.floor((this._x-7)*2.7);
	soundControll.setVolume(val);
	this._parent.vi_mc._x = this._x;
	updateAfterEvent();
}
////// инит графики
vt_mc._width = 0;
// vt - индикатор времени 
vl_mc._width = 0;
// vl - индикатор загруженного контентая
motion_mc.onEnterFrame = function():Void  {
	var proc:Number = Math.floor(motionStream.bytesLoaded/motionStream.bytesTotal*320);
	vl_mc._width = proc<320 ? proc : 320;
	var timer:Number = Math.ceil(motionStream.time/duration*320);
	vt_mc._width = timer<320 ? timer : 320;
};
//volumes._y = 256;
volumes.vi_mc.setMask(volumes.vm_mc);
pause_btn._visible = false;
__________________
Безвыходных положений небывает © Барон Мюнхаузен=)Исходники