【发布时间】:2012-07-16 07:11:41
【问题描述】:
我想流式传输和播放 iTunes 预览网址,例如 http://a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/mzm.evyxvimp.aac.p.m4a。我尝试使用AAC Decoder Android 库。通过它我可以流式传输和播放 AAC 流 url,例如 http://http.yourmuze.com:8000/play/paradise/l.aac。但它不支持 m4a url(Logcat 说 java.io.FileNotFoundException: http://a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/mzm.evyxvimp.aac.p.m4a)。
如何流式传输 .m4a 链接?
我的代码:
public class AACPlayerActivity extends Activity implements OnClickListener,PlayerCallback{
private Button btnPlay;
private ProgressBar progress;
private Handler uiHandler;
private MultiPlayer multiPlayer;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnPlay = (Button)findViewById(R.id.playButton);
progress = (ProgressBar)findViewById(R.id.progress);
progress.setVisibility(View.INVISIBLE);
btnPlay.setOnClickListener(this);
uiHandler = new Handler();
}
public void playerException(Throwable arg0) {
// TODO Auto-generated method stub
}
public void playerMetadata(String arg0, String arg1) {
// TODO Auto-generated method stub
}
public void playerPCMFeedBuffer(boolean arg0, final int audioBufferSizeMs, final int audioBufferCapacityMs) {
// TODO Auto-generated method stub
uiHandler.post(new Runnable() {
public void run() {
// TODO Auto-generated method stub
progress.setProgress( audioBufferSizeMs * progress.getMax() / audioBufferCapacityMs );
}
});
}
public void playerStarted() {
uiHandler.post(new Runnable() {
public void run() {
// TODO Auto-generated method stub
progress.setProgress( 0 );
progress.setVisibility( View.VISIBLE );
}
});
}
public void playerStopped(int arg0) {
// TODO Auto-generated method stub
uiHandler.post(new Runnable() {
public void run() {
// TODO Auto-generated method stub
progress.setVisibility( View.INVISIBLE );
}
});
}
public void onClick(View v) {
// TODO Auto-generated method stub
if(btnPlay.getText().equals("Play")){
start();
btnPlay.setText("stop");
}else{
stop();
}
}
private void start() {
stop();
// we cannot do it in playerStarted() - it is too late:
multiPlayer = new MultiPlayer(this,MultiPlayer.DEFAULT_AUDIO_BUFFER_CAPACITY_MS, MultiPlayer.DEFAULT_DECODE_BUFFER_CAPACITY_MS);
multiPlayer.playAsync("http://a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/mzm.evyxvimp.aac.p.m4a");
}
private void stop() {
if (multiPlayer != null) {
multiPlayer.stop();
multiPlayer = null;
}
}
更新
- 我尝试使用ServeStream 显示无法打开网址。
- 我尝试使用Vitamio SDK 也无法播放
itunes preview Urls。
itunes preview urls可以在android上玩吗?
【问题讨论】:
-
什么是
MultiPlayer?您是否尝试过将 URL 传递给 Android 的默认MediaPlayer实例? -
我试过了,但安卓默认媒体播放器无法流式传输 aac 流 url。所以我尝试使用使用 MultiPlayer 而不是 MediaPlayer 的 AAC 解码器库。但它也不是流媒体。
-
我是ServeStream的开发者。我尝试了您提供的 URL,它使用最新版本 (0.4.11) 播放没有问题,仅供参考。 ServeStream 将满足您的要求。
-
@WilliamSeemann 我用最新版本(0.4.11)尝试了这个网址a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/…,它显示该网址无法打开。
-
刚刚在运行 API 15 的模拟器中试了一下,效果很好。也许您的设备不支持这种格式?
标签: android stream media-player itunes aac