![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
Новичок ![]() Группа: Новичок Сообщений: 3 Регистрация: 8.07.2010 Пользователь №: 10003 ![]() |
На странице есть несколько flash-проигрывателей одного и того же вида, в каждом из них реализованы функции:
Код public function play():Void { if (!this._firstPlay) { this._position = 0; this._sound = new Sound(); this._sound.loadSound(_root.mp3, true); this._firstPlay = true; } this._sound.start(Math.round(this._position / 1000)); this.isPlaying = true; } public function pause():Void { this._position = this._sound.position; this._sound.stop(); this.isPlaying = false; } public function stop():Void { this._position = 0; this._sound.start(0); this._sound.stop(); this.isPlaying = false; } Проблема, на мой взгляд, заключается в том, что если пользователь нажал на плей, и через секунду-другую нажимает на паузу или на стоп (со стопом могу ошибаться), mp3-файл не перестает загружаться флешкой (браузером). Я так понимаю - кешируется. И чем больше таких действий пользователь совершит на странице, тем медленнее загружается очередная композиция. Даже если остальные уже стоят на паузе (а фактически они грузятся)! А Mozilla Firefox вообще показывает рога и отказывается загружать очередную песню, если до этого уже несколько песен (6-7) активировали методом плей/пауза. Собственно вопрос. Как заставить браузер (flsah-проигрыватель?) при нажатии на паузу или стоп, перестать загружать mp3-файл? До тех пор пока в этом проигрывателе опять не нажмут плей! Заранее спасибо знатокам за помощь. |
|
|
![]() |
![]()
Сообщение
#2
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 777 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Даже если остальные уже стоят на паузе (а фактически они грузятся)! ... Собственно вопрос. Как заставить браузер (flsah-проигрыватель?) при нажатии на паузу или стоп, перестать загружать mp3-файл? До тех пор пока в этом проигрывателе опять не нажмут плей! Насчет паузы - это нормальное поведение. Звук продолжает буферизоваться. ФП уверен, что вы скоро опять нажмете плей, а он вам и подсуетился - уже подгрузил порцию данных. С другой стороны, на самом деле никакой паузы нет - есть только стоп. Т.е. подгрузка звука не прекращается с момента loadSound. И ничем иным не управляется. И вот тут большой вопрос что делать? То ли убивать вообще объект Sound - но я не уверен, что даже это остановит загрузку - надо пробывать. То ли прробывать грузить звуки через нет-коннэкшн. И управлять собственно коннекшенном. Не знаю. В сетевом флеше я как раз не особый знаток. |
|
|
![]()
Сообщение
#3
|
|
Новичок ![]() Группа: Новичок Сообщений: 3 Регистрация: 8.07.2010 Пользователь №: 10003 ![]() |
Насчет паузы - это нормальное поведение. То ли убивать вообще объект Sound - но я не уверен, что даже это остановит загрузку - надо пробывать. То ли прробывать грузить звуки через нет-коннэкшн. И управлять собственно коннекшенном. Я тут вычитал, что паузы вообще нет. Да и это видно из кода. В паузе вызывается опять же метод stop. В общем проблема осталась... кто-то же решил её... если взять известные плееры, например Dewplayer, то у них ничего подобного не происходит. Если разместить хоть 20 плееров на странице и запустить каждый а потом выключить или поставить на паузу, то никаких проблем с загрузкой или задержками нет. Из чего напрашивается вывод, что остановка (даже временная) воспроизведения останавливает и загрузку самого файла браузером. |
|
|
![]()
Сообщение
#4
|
|
Новичок ![]() Группа: Новичок Сообщений: 3 Регистрация: 8.07.2010 Пользователь №: 10003 ![]() |
Почти решил проблему. Сделал так:
Код public function play():Void { if (!this._firstPlay) { if (!this._secondPlay) { //это чтобы второй раз не создавать объект //this._position = 0; this._sound = new Sound(); } this._sound.loadSound(_root.mp3, true); this._firstPlay = true; } this._sound.start(Math.round(this._position / 1000)); this.isPlaying = true; } public function pause():Void { this._position = this._sound.position; this._sound.stop(); if (this.isPlaying) this._secondPlay = true; //это чтобы второй раз не создавать объект this._sound.loadSound('', true); this._sound.stop(); this.isPlaying = false; } public function stop():Void { this._position = 0; this._sound.start(0); this._sound.stop(); this._sound.loadSound('', true); this._sound.stop(); this.isPlaying = false; } Т.е. вот этим: Код this._sound.loadSound('', true); Я вынуждаю браузер прекратить закачку "в кеш". Проверил. С функцией стоп работает прекрасно. А вот с паузой... надо же передать после паузы опять тот же самый файл. Этим занимается функция: Код public function set setUrl(n:String) { this.player["_firstPlay"] = false; _root.mp3 = n; _setProperty("url", _root.mp3); } А уже потом запускается play. Так вот в функции play эта связка не рабтает: Код this._sound.loadSound(_root.mp3, true); this._sound.start(Math.round(this._position / 1000)); Хоть какое задай значение вместо позиции в start, плеер всё-равно начинает песню с начала. Может кто поможет "дожать" эту проблему? Спасибо заранее уважаемым знатокам! |
|
|
![]()
Сообщение
#5
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 777 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Со звуком в потоковом режиме так не выйдет. Он запустится всегда с нуля.
Поэтому с паузой два варианта: 1) Сервер подсовывает стримовый звук с указанной позиции. Флеш запустит его с нуля. Но это нуль и будет точкой паузы. 2) Параллельно грузим не стримовый звук. Если он успел загрузиться, то стартуем с места паузы, если не успел - то опять стартуем с нуля стримового звука. |
|
|
![]()
Сообщение
#6
|
|
Ветеран конференции ![]() ![]() ![]() ![]() Группа: Flash Zone Team Сообщений: 3912 Регистрация: 10.03.2005 Из: Киев Пользователь №: 5 ![]() |
Цитата Я тут вычитал, что паузы вообще нет. ecolora Так и есть, как ты уже сам понял, и как уже говорил chingachgoog. Паузы нет, есть только стоп. Поэтому для реализации паузы в потоковом режиме стоит воспользоваться вышеприведёнными советами chingachgoog. Цитата если взять известные плееры, например Dewplayer, то у них ничего подобного не происходит. Можешь декомпилировать флешку Dewplayer (или другого плеера с такой возможностью) и найти метод, который они используют для создания пауз для стримовых звуков. Цитата 1) Сервер подсовывает стримовый звук с указанной позиции. Флеш запустит его с нуля. Но это нуль и будет точкой паузы. Это распространённый метод реализации паузы, а также "начальной" перемотки (когда звук/видео ещё не загрузилось полностью). Многократно встречал его в аудио и видеоплеерах в Интернете, к примеру подобный метод давно используется на YouTube (для реализации перемотки). Но ещё чаще встречаются плееры без поддержки паузы/перемотки до полной загрузки. |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 5.11.2010 - 15:19 |