Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Mp3 плеер, проблема кеширования (http://www.flasher.ru/forum/showthread.php?t=73957)

timoshenkov 08.01.2006 02:51

Mp3 плеер, проблема кеширования
 
Подскажите пожалуйста кто занимался написание mp3 плеера на Flash.

Уроки и примеры которые выложенны в интернете не объсняют ряд проблем, а именно: подглючивание с загрузкой треков

Ситуация следующая:
  • по умолчанию загружается автоматом первый трек, но это не важно
  • отрисовывается прогресс бар
  • если трек не дозагрузился, а пользователь нажмет кнопку на следующий трек, то загрузка прервется и начнется новая
  • то вот здесь и вслывает проблема! ролик не грузит в себя (как мне кажется) второй раз этот трек, а использует то, что есть

Результат
  • вместо проигрования слышно как будто зациклен маленький фрагментик


почему так странно играет понятно, так как метод play в моем плеере рабетает через свойства sound объекта (position, duration), а они не соотведствуют действительности


Код:

Audio.prototype.play = function(){
        if(this._loaded != 100){return;}
        if(this._mute)
                {this._soundObj.setVolume(0);}
        this.isPlaying = true;
        this._soundObj.stop();
        this._soundObj.start(this.position/1000, 0);
        this.createProgressBar();
}




Как мне объяснить флешу, да и вообще узнать это, что если трек не догрузился, то загрузить его заного целиком.

На медленном канале, человек очень с большой вероятностью захочет переключить на следующий трек не дождавшись загрузки текущего.


Кто нибудь может помочь?


Вот как происходит загрузка
Код:

Audio.prototype.loadUrl = function(url)
{
        this.isPlaying = false;
        this._soundObj.loadSound(url, false);
        this._loaded = 0;
        this._nDownloadInterval = setInterval(this,"checkDownload",3);
        this.createProgressBar();
}

//this._soundObj = new Sound(target);
//создается при создании объекта


//this.isPlaying если это false то плеер не играет
//this._loaded если это не 100 то плеер не играет




//вот как происходит проверка загрузки mp3
Audio.prototype.checkDownload = function(){
    if(this._loaded != 100) {
this._loaded=Math.round(this._soundObj.getBytesLoaded()/this._soundObj.getBytesTotal()*100);
        }
        else
        {
                this.onLoadUrl();
        }
}




////////////////
//onLoadUrl(); в это функции я убираю загрузчик
//и начинаю проигрование
//и загружаю данные из sound объекта


так вот у меня складывается мнение что onLoadUrl() вызывается раньше времени


спасибо.

Madasan 08.01.2006 07:00

Вот посмотри там исходник есть, авось поможет. :)

timoshenkov 08.01.2006 07:55

спасибо, но в нем я не нашел, что бы как то обрабатывалясь эта ошибка.

Точнее там это сделано через интерфейс. Сначала кнопка загрузить потом, только play()
если заставять пользователя нажимать на кнопку два раза, что бы проиграть трек, то это издевательство.
А автоматически это состояние загруженности или недозагруженности, как я писал, у меня плеер сам определить не может, галюценирует.
То есть у меня он в состояние play() переходить через загрузку, если загружено, начнет проигрывать.

Madasan 08.01.2006 08:14

Цитата:

если заставять пользователя нажимать на кнопку два раза, что бы проиграть трек, то это издевательство.
Зачем два раза? один раз чтобы загрузить, второй, чтобы проиграть, можно конечно сделать, чтобы сразу проигрывалось как загрузиться, но это уже дело вкуса. Меня например иногда пугала музыка, которую поставил загружаться и пошел че-нить смотореть другое, а она как грянет внезапно, аж подскакиваешь!
А сути твоей ошибки чесно говоря не уловил, просто дал свой вариант плеера! :)

Antares 08.01.2006 15:56

Суть ошибки в необходимости прервать загрузку.
У Сенокулара было про это.

timoshenkov 08.01.2006 19:03

Цитата:

Сообщение от Antares
Суть ошибки в необходимости прервать загрузку.
У Сенокулара было про это.


А это где сенокуляр? :)
я не понимаю просто в какой момент её разорвать? первый раз то её пользователь сам рвет, гад.
Или мне тупо грузить 2 раза, что бы наверника? Но это криво как то.

Antares 08.01.2006 19:07

Ну вы, блин, даете...(с)

senocular.com

timoshenkov 08.01.2006 19:10

упс, пардон.

я на его примере и делал плеер :)
только у него он был сделан на присоединении из библиотеки, поэтому ни какких запар с загрузкой :(

Antares 08.01.2006 19:13

Есть беспроигрышный вариант узнать от самого автора -- пойти на Ультрашок и там завести тему "проблема с измененным исходником с senocular.com". Он там завсегдатай.

timoshenkov 08.01.2006 19:51

на измененный исходник это уже не похоже :)
я подрезал идею с классом, удобно выглядить типа такого:

player = new player()
player.stop()
player.newxtTrask()

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


Ладно попробую на ултрашоке поспрашивать.


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

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