问题描述
我要玩一个.PLS文件,我使用这个网址Android应用程序 http://playerservices.streamtheworld.com/pls/VIRGINRADIO_DUBAIAAC.pls
我知道这是不可能的使用MediaPlayer的directly.So我解析使用PLS解析这个文件,并设置每个url到媒体player.But是行不通的。也展示了误差错误(1,-2147483648)。
I want to play a .pls file for my android application using this url http://playerservices.streamtheworld.com/pls/VIRGINRADIO_DUBAIAAC.pls
I know that it is not possible to play .pls files using MediaPlayer directly.So I parsed this file using a Pls parser and set each url to a media player.But it won't work .Also shows the error error (1, -2147483648)
.
public class PlayListParser {
private BufferedReader reader;
public PlayListParser(String url) {
try {
URL plsFileUrl = new URL(url.trim());
URLConnection urlConnection = plsFileUrl.openConnection();
// InputStream input = new BufferedInputStream(urlConnection.openStream());
InputStream iStream = urlConnection.getInputStream();
this.reader = new BufferedReader(new InputStreamReader(iStream));
// this.reader = new BufferedReader(new FileReader(file), 1024);
} catch (MalformedURLException e) {
Log.e("PlayListParser", "Got MalformedURLException = " + e.getMessage());
} catch (IOException e) {
Log.e("PlayListParser", "Got IOException = " + e.getMessage());
}
}
public List<String> getUrls() {
LinkedList<String> urls = new LinkedList<String>();
while (true) {
try {
String line = reader.readLine();
if (line == null) {
break;
}
String url = parseLine(line);
if (url != null && !url.equals("")) {
urls.add(url);
}
} catch (IOException e) {
e.printStackTrace();
}
}
return urls;
}
private String parseLine(String line) {
if (line == null) {
return null;
}
String trimmed = line.trim();
if (trimmed.indexOf("http") >= 0) {
return trimmed.substring(trimmed.indexOf("http"));
}
return "";
}
}
PlayListParser playListParser = new PlayListParser(URL_PLS_STREAMING);
List<String > playList = playListParser.getUrls();
if(playList != null && ! playList.isEmpty()){
for(String url : playList){
MediaPlayer mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(playList.get(0));//"http://stream2.streamq.net:8020/");
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
//mediaPlayer.prepare();
} catch (IllegalArgumentException e) {
Log.e("MainActivity","Got IllegalArgumentException = " + e.getMessage());
} catch (IllegalStateException e) {
Log.e("MainActivity","Got IllegalStateException = " + e.getMessage());
} catch (IOException e) {
Log.e("MainActivity","Got IOException = " + e.getMessage());
}
}
}
我怎么可以玩这个.PLS文件?我无法找到有关it.Also一个很好的参考,我想播放,暂停和倒带这些文件。
How can i play this .pls file? I could not find a good reference about it.Also i want to play,pause,and rewind these files.
在此先感谢
推荐答案
这将返回URL如 http://stream2.streamq.net:8020
package com.direct.radio.global;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.LinkedList;
import android.content.Context;
import android.util.Log;
public class GetStreamingUrl {
private static String LOGTAG = "GetStreamingUrl";
private Context mContext;
public GetStreamingUrl(Context context) {
Log.i(LOGTAG, "call to constructor");
this.mContext = context;
}
public LinkedList<String> getStreamingUrl(String url) {
Log.i(LOGTAG, "get streaming url");
final BufferedReader br;
String murl = null;
LinkedList<String> murls = null;
try {
URLConnection mUrl = new URL(url).openConnection();
br = new BufferedReader(
new InputStreamReader(mUrl.getInputStream()));
murls = new LinkedList<String>();
while (true) {
try {
String line = br.readLine();
if (line == null) {
break;
}
murl = parseLine(line);
if (murl != null && !murl.equals("")) {
murls.add(murl);
}
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i(LOGTAG, "url to stream :" + murl);
return murls;
}
private String parseLine(String line) {
if (line == null) {
return null;
}
String trimmed = line.trim();
if (trimmed.indexOf("http") >= 0) {
return trimmed.substring(trimmed.indexOf("http"));
}
return "";
}
}
Activity_Player.java或Service_Player.java
您可以这样写code根据您的需要,定义这个方法
Activity_Player.java or Service_Player.java
you can write this code as per your need , Define this method
LinkedList<String> urls;
private LinkedList<String> fGetPlayableUrl(String mPls) {
GetStreamingUrl oGetStreamingUrl = new GetStreamingUrl(Activity_Splash.this);
urls = oGetStreamingUrl.getStreamingUrl(mPls);
return urls;
}
下面, fGetPlayableUrl(字符串MPLS)
通过 .PLS
URL。现在你已经流媒体URL。
Here, fGetPlayableUrl(String mPls)
pass .pls
URL. Now you have streaming URL.
MediaPlayer mMediaPlayer = new MediaPlayer();
现在,通过网址
mMediaPlayer.setDataSource(urls.toString());
mMediaPlayer.prepareAsync();
mMediaPlayer.start();
这篇关于如何做.PLS文件的android流?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!