我正在创建一个广播应用,它将从各种不同的网址流式传输。
现在,当从网址中提取流时,我们也想要播放哪首歌的内容,即元数据。
现在为此我在TimerTask中运行另一个线程,它将创建HTTP连接,就像每隔40秒一样。
虽然使用OS 5及更高版本的模拟器没有问题,但是当我运行相同的线程进行两到三次迭代时,元数据会一致地收到,但之后我们得到了TCP超时异常,这会停止整个系统和设备甚至丢失了互联网连接。
请你提出任何可以解决问题的替代方案。
我也在分享将从流媒体网址获取metaData的代码。
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);
}
}
}