1

我正在创建一个 Radio 应用程序,它将从各种不同的 URL 流式传输。

现在,在从 url 获取流的同时,我们还想要在即元数据上播放的歌曲的内容。

现在为此,我在 TimerTask 中运行另一个线程,该线程将创建 HTTP 连接,例如每 40 秒后。

在使用 OS 5 及更高版本的模拟器时没有问题,但是当我运行相同的线程进行两到三次迭代时,元数据会始终如一地收到,但之后我们得到 TCP 超时异常,这会停止整个系统和设备甚至丢失互联网连接。

您能否建议任何可以解决问题的替代方案。

我还分享了将从流 URL 获取元数据的代码。

class metaData extends Thread {
    public void run() {
        try {
            boolean metaDataCheckBit = false;

            StreamConnection streamConnection = (StreamConnection)Connector.open(url);
            HttpConnection httpConnection = (HttpConnection)streamConnection;
            httpConnection.setRequestProperty("Icy-metadata", "1");
            int httpStatus = httpConnection.getResponseCode();

            if (httpStatus==HttpConnection.HTTP_OK) {
                String mint = httpConnection.getHeaderField("icy-metaint");
                InputStream inputStream = streamConnection.openInputStream();
                int length = Integer.parseInt(mint);
                int b = 0;
                int count = 0;
                while(count++ < length){
                    b = inputStream.read();
                }
                int metalength = ((int)b)*16;

                if (metalength <= 0) return;

                byte buf[] = new byte[metalength];
                inputStream.read(buf,0,buf.length);
                final String metaData = new String(buf);
                final String streamTille = 
                    metaData.substring(14, metaData.indexOf("StreamUrl")-2);
                System.out.println("Stream Title--------"+streamTille);

                UiApplication.getUiApplication().invokeAndWait(new Runnable(){
                    public void run() {
                        try {
                            titleRf.setText(streamTille);
                        } catch (Exception e) {
                            System.out.println("Exception: " + e.toString());
                        }
                    }
                });
            }
        } catch (Exception e){
            System.out.println("Exception in meta data...."+e);
        }
    }
}
4

0 回答 0