Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 05.06.2008, 19:24
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 1  
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
По умолчанию Как сделать "искатель" в Плейбаре FLV плеера?

То есть временная шкала (она у меня уже есть) и по ней едет полоска проигрывания.

Мне нкжно сделать искатель. Т.е. чтобы по плейбару куда кликнешь, что-бы с того места начинается проинрывание.

Плеер:
Код:
// Stream FLV-player by Jonathan
// Разрешение видео - 320 x 240

var src:String = "letstalk.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
play_btn.onEnterFrame = function() {
  if(this.direct) this.nextFrame();
  else this.prevFrame();
}
play_btn.onRollOver = function() {
	this.direct = true;
}
play_btn.onRollOut = function() {
this.direct = 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
pause_btn.onEnterFrame = function() {
  if(this.direct) this.nextFrame();
  else this.prevFrame();
}
pause_btn.onRollOver = function() {
	this.direct = true;
}
pause_btn.onRollOut = function() {
this.direct = false; 
}
pause_btn.onRelease = function():Void  {
	this._visible = false;
	play_btn._visible = true;
	motionStream.pause(true);
};
//STOP
stop_btn.onEnterFrame = function() {
  if(this.direct) this.nextFrame();
  else this.prevFrame();
}
stop_btn.onRollOver = function() {
	this.direct = true;
}
stop_btn.onRollOut = function() {
this.direct = false; 
}
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, 1, 5, 44, 5);
	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();
	if (this._x < 2) {
		_root.vol_ico.gotoAndStop(2);
	}
	if (this._x > 1) {
		_root.vol_ico.gotoAndStop(1);
	}
	
}
////// инит графики
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;
Креплю исходник.
Вложения
Тип файла: rar FLVplayer.rar (13.6 Кб, 83 просмотров)
__________________
Убейте меня!

Старый 05.06.2008, 21:47
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
см. NetStream.seek

Старый 05.06.2008, 22:46
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 3  
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
О! Здорово! А как мне проследить куда именно тыкнул юзер? Что мне нужно сздать в качестве полосы, по которой тыкает юзер? Клип чтоли какой-то? Не доходит до меня...
__________________
Убейте меня!


Последний раз редактировалось джонатан; 05.06.2008 в 22:48.
Старый 27.03.2009, 04:49
toha20072008 вне форума Посмотреть профиль Отправить личное сообщение для toha20072008 Найти все сообщения от toha20072008
  № 4  
toha20072008

Регистрация: Jan 2009
Сообщений: 7
Джонатан! и Все остальные флэшеры!! Подскажите пожалуйста какие изменение нужно внести в скрипт этого проигрывателя что бы воспроизведение этого .flv файла начиналось автоматически, а не после нажатия на кнопку PLAY, как это работает сейчас!

Очень прошу - Помогите!
Своими силами проблему решить не удалось.. ((

Старый 06.06.2008, 00:25
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
клип вполне подойдет..

юзер тычет обычно в точку с координатами _xmouse, _ymouse

Старый 06.06.2008, 00:35
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 6  
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
А как бы это написать? Всмысле как будет выглядеть

if (клацнул на _xmouse=7, _ymouse=15) {
NetStream.seek(percent);
}
__________________
Убейте меня!

Старый 06.06.2008, 01:06
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
в хелп заглянуть не пробовал ?
по форуму опять же поискать как отследить нажатие..

жалко канеш, что "Stream FLV-player by Jonathan" может не состояться из-за такой ерунды, но обсуждать здесь азы как-то не с руки..

Старый 06.06.2008, 01:18
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 8  
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Цитата:
Stream FLV-player by Jonathan


Да лажу я, лажу. Уже что-то получасться даже стало
__________________
Убейте меня!

Старый 06.06.2008, 01:18
olexandr вне форума Посмотреть профиль Отправить личное сообщение для olexandr Посетить домашнюю страницу olexandr Найти все сообщения от olexandr
  № 9  
olexandr
 
Аватар для olexandr

Регистрация: Aug 2007
Адрес: Ukraine, Kyiv
Сообщений: 643
Отправить сообщение для olexandr с помощью ICQ Отправить сообщение для olexandr с помощью MSN Отправить сообщение для olexandr с помощью Skype™
Код:
....onRelease = function() {
  var percent:Number = (this._xmouse/this._width)*100;
  ....seek(percent);
}
__________________
сайт, vk

Старый 06.06.2008, 02:14
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 10  
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Немного не так!
Код:
seek();
Указывается не в процентах, а в секундах! Написал вот так:
Код:
_root.sledak.onRelease = function() {
	var number_one:Number = this._xmouse/this._width;
	var number_two:Number = duration*number_one;
 	motionStream.seek(number_two);
}
Расшифрую код:
duration - это длина видео, полученная из onMetaData (У меня это 40.464 секунды)
Остальное вроде понятно.


Теперь заработало, но не так как хотелось бы. Есть небольшая неточность!
Почему-то когда тыкаешь в некоторые точки определенные, в моем варианте их 4 это:
1) x: ≈ 55
2) x: ≈ 130
3) x: ≈ 212
4) x: ≈ 295
То все прекрасно работает. Видео переходит. Но если не попадаешь в эти 4 точки, то как не крути, воспроизведение прыгает на x координату одной из этих 4-х точек, в увеличительном порядке. Почему так происходит? Как с этим бороться?


Эх... И почему я не учил математику в школе? Дурак...
__________________
Убейте меня!


Последний раз редактировалось джонатан; 06.06.2008 в 04:39.
Создать новую тему Закрытая тема Часовой пояс GMT +4, время: 22:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:32.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.