Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   ID3 с потоковыми аудиофайлами (http://www.flasher.ru/forum/showthread.php?t=173499)

DarKDoteR 04.01.2012 17:42

ID3 с потоковыми аудиофайлами
 
Собственно код:
Код AS3:

import flash.media.Sound; 
import flash.media.SoundLoaderContext;
import flash.net.URLRequest;
import flash.events.Event;
import flash.media.ID3Info;
 
var s:Sound = new Sound();
var req:URLRequest = new URLRequest("http://88.198.134.36:8000/live");
var context:SoundLoaderContext = new SoundLoaderContext(8000, true);
s.load(req, context);
s.play();
s.addEventListener(Event.ID3, onID3InfoReceived);
 
function onID3InfoReceived(event:Event)
{
    var id3:ID3Info = event.target.id3;
 
    trace("Received ID3 Info:");
    for (var propName:String in id3)
    {
        trace(propName + " = " + id3[propName]);
    }
        songname.text = ("Song name: " + id3.songName);
        artist.text = ("Artist: " + id3.artist);
        album.text = ("Album: " + id3.album);
}

В динамических текстовых полях songname, artist и album должны отображаться метаданные воспроизводимых треков. Но не отображаются ... Почиму?

PainKiller 04.01.2012 20:33

потому что не наступает событие Event.ID3 и соответственно не вызывается функция onID3InfoReceived

Olmer 04.01.2012 20:45

А вы случайно не к Shoutcast Radio подключаетесь? Если да, то там так просто ID3 не получить.

DarKDoteR 04.01.2012 21:41

Цитата:

к Shoutcast Radio подключаетесь?
Нет. К IceCast 2.

Добавлено через 13 минут
Цитата:

не наступает событие Event.ID3
Полагаете?

PainKiller 04.01.2012 22:32

а вы как думаете, почему у вас трейсы не срабатывают?

DarKDoteR 04.01.2012 23:19

В упор не вижу, вроде бы всё "как по книжке" сделано.

cleptoman 05.01.2012 12:58

из всяких *castов ID3 по событию не получить...нужно парсить байты, выдергивать метаданные

Nooob 06.01.2012 00:50

Возможно это поможет, но с crossdomain будут проблемы.
Код AS3:

package
{
        import flash.events.Event;
        import flash.events.EventDispatcher;
        import flash.events.ProgressEvent;
        import flash.net.Socket;
 
        [Event(name="change", type="flash.events.Event")]
        public class ID3Reader extends EventDispatcher
        {
                public const data:Object = {};
 
                public function ID3Reader()
                {
                }
 
                public function getID3(host:String, port:int, get:String):void
                {
                        var socket:Socket = new Socket();
                        socket.connect(host, port);
                        socket.writeUTFBytes("GET /"+get+" HTTP/1.1\r\nHost: "+host+":"+port+"\r\n\r\n");
                        socket.addEventListener(ProgressEvent.SOCKET_DATA, onData);
                }
 
                private function onData(event:ProgressEvent):void
                {
                        var socket:Socket = event.target as Socket;
                        socket.removeEventListener(ProgressEvent.SOCKET_DATA, onData);
 
                        for each(var name:String in socket.readUTFBytes(socket.bytesAvailable).split("\r\n"))
                        {
                                var id3Data:Array = name.split(":");
                                if(id3Data.length == 2)
                                {
                                        data[id3Data[0]] = id3Data[1];
                                }
                        }
 
                        dispatchEvent(new Event(Event.CHANGE));
                }
        }
}

Код AS3:

var icyID3:ID3Reader = new ID3Reader();
icyID3.getID3("88.198.134.36", 8000, "live");
icyID3.addEventListener(Event.CHANGE, onChange);
 
function onChange(event:Event):void
{
        for(var name:String in event.target.data)
        {
                trace (name + " " + event.target.data[name] + "\n");
        }
}


DarKDoteR 06.01.2012 22:28

Код AS3:

var icyID3:ID3Reader = new ID3Reader();

1046: Type was not found or was not a compile-time constant: ID3Reader.
1180: Call to a possibly undefined method ID3Reader.
ID3Reader - это что такое?

Ну в общем попробовал ещё вот так:
Код AS3:

package {
    import flash.display.Sprite;
    import flash.media.Sound;
    import flash.net.URLRequest;
    import flash.media.ID3Info;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.Event;
 
    public class Sound_id3Example extends Sprite {
        private var snd:Sound = new Sound();     
        private var myTextField:TextField = new TextField();
 
        public function Sound_id3Example() {
            snd.addEventListener(Event.ID3, id3Handler);
            snd.load(new URLRequest("http://88.198.134.36:8000/live"));
        }
 
        private function id3Handler(event:Event):void {
            var id3:ID3Info = snd.id3;
 
            myTextField.autoSize = TextFieldAutoSize.LEFT;
            myTextField.border = true;
 
            myTextField.appendText("Received ID3 Info: \n");
 
            for (var propName:String in id3) {
                myTextField.appendText(propName + " = " + id3[propName] + "\n");
            }
 
            myTextField.appendText("\n" + "Artist: " + id3.artist + "\n");
            myTextField.appendText("Song name: " + id3.songName + "\n");
            myTextField.appendText("Album: " + id3.album + "\n\n");
 
            this.addChild(myTextField);
        }
    }
}

Тоже ни чего не вышло, может и вправду ID3 с айскастом не дружит.
Тогда вот что думаю, IceCast 2 всё-таки отправляет же метаданные, например и AIMP3 их читать умеет, ну так вот, ещё пока не знаю как, но допустим что эти метаданные будут сохраняться каждые 10 секунд в некий генерируемый текстовый файл на наш сервер, а наше flash-радио будет их заимствовать из этого файла тоже каждые 10 секунд, нэ? Или всё-таки проще напрячь мозги и что-нибудь придумать в рамках одного лишь flash-файла?

Nooob 07.01.2012 00:16

Цитата:

Сообщение от DarKDoteR (Сообщение 1055366)
Код AS3:

var icyID3:ID3Reader = new ID3Reader();

1046: Type was not found or was not a compile-time constant: ID3Reader.
1180: Call to a possibly undefined method ID3Reader.
ID3Reader - это что такое?

класс то создай и скопируй в корень


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

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