Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > Не воспроизводится звуковой файл из потока(Stream)


Автор: OlegJ 19.1.2006, 12:59
Не получается считать и воспроизвести звуковой файл из потока(InputStream)
Вообщем на сервере рабоатет простой сокетный сервер и он по потоку через сокеты высылает побайтово весь файл

PrintStream out = new PrintStream( new BufferedOutputStream(socket.getOutputStream(), 1024), false);
inputFile = new File("a.amr");
inFile = new FileReader(inputFile);
while ((c = inFile.read()) != -1){
out.write©;
}
inFile.close();


Клиент - мидлет соедененыый с этим сокетом серверным и считывающий этот файл в поток,а поток является данными для
проигывателя(используется MMAPI на Siemens c65)

InputStream sc = (SocketConnection) Connector.open("socket://localhost:5190");
is = sc.openInputStream();
Player p = Manager.createPlayer(is, "audio/amr");
p.realize();
p.prefetch();
p.start();

В момент старта проигрывателяон подвисает и дальше уже программа не работает.
В эмуляторе Siemens выдается

** Audio doRealize **
-- End doRealize --
** Audio doPrefetch **
Filename: 26922701.amr
Calling Connector.open with: file:///0:/System/java/57133/26922701.amr
The file did not exist
File was created

При чем,если просто считывать входящий поток следующимобразом,то файл приходит,проверял.
int s;
while ( (s=is.read()) != -1 ){
System.out.println(s);
}
И так же проверил просто проигрывание amr-файла звукового из jar файла локального на телефоне
проигрывателем проходит успешно.А вот получить и воспроизвестиего из потока не получается.
Есть мысли какие-нибудь?




Автор: Dancer 19.1.2006, 14:35
если тебе хватит Heap или есть доступ к файловой системе телефона из Java и хватит места для хранения файлика, то я в принципе делал так:
у меня звуковые файлики маленькие, я их сохраняю в памяти телефона.
причём проверь у себя настройку в симуляторе, скорее всего у тебя маленькая скорость эмуляции обмена данными по сети стоит

И проверь настройки своего симулятора, он же тебе ругается, что файла который он пытается проиграть не находит: file:///0:/System/java/57133/26922701.amr

Код

            try {
                System.out.println("read file from server as InputStream");

                InputStream sc = (SocketConnection) Connector.open("socket://localhost:5190");
                InputStream is = sc.openInputStream();

                System.out.println("is = "+is);
                System.out.println("is.avaliable() = "+is.available());

                int offset = 0;
                int readBytes = is.available();
                byte [] buf = new byte[readBytes];
                while (is.read(buf,offset,readBytes) != -1) {
                    System.out.println("can read bytes from server: "+ readBytes);
                    readBytes = is.available();
                    if (readBytes ==  0) {
                        readBytes = 1;
                    }
                    if(readBytes < 0) {
                        System.out.println("Error. readBytes < 0: readBytes = "+readBytes);
                    } else {
                        byte [] tmp = new byte[buf.length];
                        System.arraycopy(buf,0,tmp,0,buf.length);
                        buf = new byte [buf.length + readBytes];
                        System.arraycopy(tmp,0,buf,0,tmp.length);
                        offset = tmp.length;
                    }
                }
                System.out.println("buf.len = "+buf.length);
                System.out.println("create ByteArrayInputStream from file server InputStream: "+buf);

                System.out.println("create Player as (Player)Manager.createPlayer((InputStream) new ByteArrayInputStream(buf),\"audio/x-wav\")");
                pl = (Player)Manager.createPlayer((InputStream) new ByteArrayInputStream(buf),"audio/x-wav");

                System.out.println("Player created: "+pl);
                pl.addPlayerListener(this);

                System.out.println("start realize player");
                pl.realize();
                System.out.println("Player realized()");
                pl.prefetch();
                System.out.println("Player prefetched()");
                pl.start();
            } catch (IOException e) {
                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                System.out.println("IOException during create Player: "+e.toString());
                pl = null;
            } catch (MediaException e) {
                System.out.println("MediaException during create Player: "+e.toString());
                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                pl = null;
            } catch(Exception e) {
                System.out.println("Not occured exception: "+e.toString());
                e.printStackTrace();
                pl = null;
            }


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)