IPB

Здравствуйте, гость ( Вход | Регистрация )

> Проблема с множественным воспроизведением звука
ecolora
сообщение 8.07.2010 - 16:33
Сообщение #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-файл? До тех пор пока в этом проигрывателе опять не нажмут плей!

Заранее спасибо знатокам за помощь.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
Открыть новую тему
Ответов (1 - 5)
chingachgoog
сообщение 8.07.2010 - 20:09
Сообщение #2


Ветеран конференции
****

Группа: Пользователь
Сообщений: 777
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Цитата(ecolora @ 8.07.2010 - 17:33) *
Даже если остальные уже стоят на паузе (а фактически они грузятся)!
...
Собственно вопрос. Как заставить браузер (flsah-проигрыватель?) при нажатии на паузу или стоп, перестать загружать mp3-файл? До тех пор пока в этом проигрывателе опять не нажмут плей!


Насчет паузы - это нормальное поведение. Звук продолжает буферизоваться. ФП уверен, что вы скоро опять нажмете плей, а он вам и подсуетился - уже подгрузил порцию данных.
С другой стороны, на самом деле никакой паузы нет - есть только стоп. Т.е. подгрузка звука не прекращается с момента loadSound. И ничем иным не управляется. И вот тут большой вопрос что делать?

То ли убивать вообще объект Sound - но я не уверен, что даже это остановит загрузку - надо пробывать.
То ли прробывать грузить звуки через нет-коннэкшн. И управлять собственно коннекшенном.

Не знаю. В сетевом флеше я как раз не особый знаток.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ecolora
сообщение 10.07.2010 - 08:39
Сообщение #3


Новичок
*

Группа: Новичок
Сообщений: 3
Регистрация: 8.07.2010
Пользователь №: 10003



Цитата(chingachgoog @ 8.07.2010 - 21:09) *
Насчет паузы - это нормальное поведение.
То ли убивать вообще объект Sound - но я не уверен, что даже это остановит загрузку - надо пробывать.
То ли прробывать грузить звуки через нет-коннэкшн. И управлять собственно коннекшенном.


Я тут вычитал, что паузы вообще нет. Да и это видно из кода. В паузе вызывается опять же метод stop.

В общем проблема осталась... кто-то же решил её... если взять известные плееры, например Dewplayer, то у них ничего подобного не происходит. Если разместить хоть 20 плееров на странице и запустить каждый а потом выключить или поставить на паузу, то никаких проблем с загрузкой или задержками нет. Из чего напрашивается вывод, что остановка (даже временная) воспроизведения останавливает и загрузку самого файла браузером.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ecolora
сообщение 12.07.2010 - 14:06
Сообщение #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, плеер всё-равно начинает песню с начала.

Может кто поможет "дожать" эту проблему?

Спасибо заранее уважаемым знатокам!
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 15.10.2010 - 18:42
Сообщение #5


Ветеран конференции
****

Группа: Пользователь
Сообщений: 777
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Со звуком в потоковом режиме так не выйдет. Он запустится всегда с нуля.

Поэтому с паузой два варианта:
1) Сервер подсовывает стримовый звук с указанной позиции. Флеш запустит его с нуля. Но это нуль и будет точкой паузы.
2) Параллельно грузим не стримовый звук. Если он успел загрузиться, то стартуем с места паузы, если не успел - то опять стартуем с нуля стримового звука.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
MustLive
сообщение Вчера, 0:38
Сообщение #6


Ветеран конференции
****

Группа: Flash Zone Team
Сообщений: 3912
Регистрация: 10.03.2005
Из: Киев
Пользователь №: 5



Цитата
Я тут вычитал, что паузы вообще нет.

ecolora

Так и есть, как ты уже сам понял, и как уже говорил chingachgoog. Паузы нет, есть только стоп. Поэтому для реализации паузы в потоковом режиме стоит воспользоваться вышеприведёнными советами chingachgoog.

Цитата
если взять известные плееры, например Dewplayer, то у них ничего подобного не происходит.

Можешь декомпилировать флешку Dewplayer (или другого плеера с такой возможностью) и найти метод, который они используют для создания пауз для стримовых звуков.

Цитата
1) Сервер подсовывает стримовый звук с указанной позиции. Флеш запустит его с нуля. Но это нуль и будет точкой паузы.

Это распространённый метод реализации паузы, а также "начальной" перемотки (когда звук/видео ещё не загрузилось полностью). Многократно встречал его в аудио и видеоплеерах в Интернете, к примеру подобный метод давно используется на YouTube (для реализации перемотки). Но ещё чаще встречаются плееры без поддержки паузы/перемотки до полной загрузки.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 5.11.2010 - 15:19