我正在Android中开发一个使用MediaPlayer播放Shoutcast流的应用程序。我要求将播放的流并行录制到MP3格式的SD卡
Android中有出路吗?是否有任何示例代码可用于实现此目的
答案 0 :(得分:0)
我曾经使用Last.FM播放器(实际工作时)。然而,这不是一种简单的录音方式。
步骤1:使用流记录功能编写代理
第2步:根您的手机
第3步:在手机上运行:
iptables -t nat -N proxy
iptables -t nat -A OUTPUT -m owner --uid-owner (uid of streaming app) -p tcp -j proxy
iptables -t nat -A proxy -p tcp -j DNAT --to proxyip:port
我的'第1步'是用perl编写的,而且非常混乱。对于shoutcast,可能已经有一个录制代理。
答案 1 :(得分:0)
我正在研究类似的问题并遇到同样的问题。
我能够播放流但是我在录制部分遇到问题,我假设我必须一点一点地读取流并将其保存到文件中。到目前为止,这是我录制的方法。
P.S。在录制时不要忘记权限。
private void startRecording() {
String fileName = Environment.getExternalStorageDirectory().getAbsolutePath();
fileName += "/FM-Recording-"+recordFile;
mRecorder = new MediaRecorder();
//mRecorder.setAudioSource(mediaPlayer.getAudioSessionID());
mRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setOutputFile(fileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed "+e.toString());
}
mRecorder.start();
}
private class RecorderThread extends Thread {
public void go(){
runOnUiThread (new Thread(new Runnable() {
public void run() {
isRecording = true;
startRecording();
}
}));
}
}
这是布局: Application Layout
答案 2 :(得分:0)
private void startRecording() {
BufferedOutputStream writer = null;
try {
URL url = new URL(RADIO_STATION_URL);
URLConnection connection = url.openConnection();
writer = new BufferedOutputStream(new FileOutputStream(new File(fileName)));
recordingStream = connection.getInputStream();
final int BUFFER_SIZE = 100;
byte[] buffer = new byte[BUFFER_SIZE];
while (recordingStream.read(buffer, 0, BUFFER_SIZE) != -1 && isRecording) {
writer.write(buffer, 0, BUFFER_SIZE);
writer.flush();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
recordingStream.close();
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}