服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

使用java me以流形式播放web服务器上的音乐文件

本文介绍如何使用java me在sonyericsson java 平台6或者更新的电话上,例如w550,w900等,以流形式播放web服务器上的音乐文件。当然,音乐文件可以使用实时流媒体协议播放,但是这里使用的是输入流。

首先,我们需要和服务器端的音乐文件建立流连接,然后把音乐文件存储在在手机的文件系统上。由于jp6平台的电话支持渐进播放音乐文件,因此我们不必等到所有文件都下载完成后才开始播放。

有两方面的问题需要我们考虑好:

1)下载的速度,程序需要建立一个缓冲区。

2)媒体时间,程序需要跟踪媒体时间,如果下载的速度比媒体播放速度慢,当播放器到达文件终点的时候,我们需要重新创建一个缓冲区然后设置正确的媒体时间开始播放。

下面的程序可以在电话的文件系统上创建一个文件并打开输出流。

fconn = (fileconnection)connector.open("file:///c:/other/mymusic.mp3");
fconn.create();
outputstream = fconn.openoutputstream();

接下来把从输入流的数据写入到输出流中。

httpconnection conn = (httpconnection)connector.open(url);
inputstream is = conn.openinputstream();

int chunksize = 512;
byte []data = new byte[chunksize];
int length = 0;
do{
    length = is.read(data, 0, chunksize);
    progress += length;

    if(length != -1){
        outputstream.write(data, 0, length);
    }   

}while(length != -1);
当下载的缓冲区就绪之后,我们就可以播放文件了。

final string file = "file:///c:/other/mymusic.mp3";

player = manager.createplayer(file);
player.addplayerlistener(this);
player.realize();
player.setmediatime(starttime);

记得记录媒体时间,当我们重新播放音乐的时候用得着。

player应该实现playerlistener接口,这样可以跟踪媒体的播放状态,如下所示:

public void playerupdate(javax.microedition.media.player player, string str, object obj) {
    if(str == playerlistener.end_of_media){
        playerbufferadd();
        player.close();
    }
}

在playerupdate()方法中我们跟踪是否播放器到达了文件的终点,如果是的话,创建一个新的缓冲区和新的播放器,把前面的播放器关闭,然后继续播放。

扫描关注微信公众号