android中的流和播放.m4a流(Itunes预览Url)



我想流式传输和播放itunes预览URL,如http://a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/mzm.evyxvimp.aac.p.m4a.我尝试使用AAC解码器安卓库。通过它我可以流式传输和播放AAC流URL,如http://http.yourmuze.com:8000/play/paradise/l.aac.但它不会流式传输m4a-urls(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;
        }
    }

更新

  1. 我尝试使用ServeStream,它说url无法打开
  2. 我尝试使用Vitamio SDK,它也无法播放itunes preview Urls

可以在android中玩itunes preview urls吗?

看看ServeStream:

适用于Android的HTTP媒体服务器浏览器和流媒体播放器。

功能:

  • 支持Android 2.2+、3.0+(不支持<2.2)
  • 播放Android支持的媒体文件
  • 对m3u、m3u8、pls和asx播放列表的额外支持
  • 支持多任务处理/在后台播放音频
  • 重复和混洗模式
  • 闹钟支持
  • 主屏幕小部件
  • 利用HTML解析允许导航为HTML页面提供服务的HTTP媒体服务器

M4A和AAC由Android支持。我建议您阅读本页:http://developer.android.com/guide/appendix/media-formats.html

只有几件事你应该注意a) 较旧的设备可能没有特定的编码或格式支持(尤其是在低于OS 2.2的情况下)b) 一些廉价的设备可能在音频/视频堆栈中集成了一些非常奇怪的东西。我在一些廉价的中国设备上看到了它。

因此,您可以尝试使用MediaPlayer API来播放它:http://developer.android.com/reference/android/media/MediaPlayer.html

您可以在此处查看示例:http://blog.endpoint.com/2011/03/api-gaps-android-mediaplayer-example.html

它与媒体格式等无关。苹果只是阻止非苹果客户端访问预览。您可以伪造用户代理标头和预览访问权限。

请在此处阅读我的相关博客文章:http://ahmetalpbalkan.com/blog/how-to-bypass-itunes-music-previews-protection/这就是为什么你在安卓系统上播放音乐时会得到404。这应该能回答你的问题。

相关内容

  • 没有找到相关文章

最新更新