2012-07-17 71 views
11

我想流式傳輸並播放像http://a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/mzm.evyxvimp.aac.p.m4a這樣的iTunes預覽URL。我試圖使用AAC Decoder Android庫。通過哪個我可以流並播放AAC流網址,如http://http.yourmuze.com:8000/play/paradise/l.aac。但它是流m4a網址(Logcat說java.io.FileNotFoundException: http://a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/mzm.evyxvimp.aac.p.m4a)。Android中的Stream和Play .m4a流(Itunes preview Url)

我該如何傳輸.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它說的網址無法打開。我試圖用Vitamio SDK它也無法播放itunes preview Urls

是可以在android中玩itunes preview urls

+0

什麼是'MultiPlayer'?您是否嘗試將URL傳遞給Android的默認'MediaPlayer'實例? – Devunwired 2012-08-28 17:20:25

+0

我試過,但android默認媒體播放器不能流aac流urls。所以我嘗試使用AAC解碼庫,它使用MultiPlayer而不是MediaPlayer。但它也不是流媒體。 – 2012-08-29 12:51:58

+0

我是ServeStream的開發者。我嘗試了你提供的URL,並且使用最新版本(0.4.11),即FYI玩了沒有問題。 ServeStream將滿足您的要求。 – 2012-09-04 04:35:09

回答

0

它無關,與媒體格式等。蘋果只是阻止非Apple客戶端訪問預覽。您可以欺騙用戶代理標題並訪問預覽。

請閱讀我的相關博客文章:http://ahmetalpbalkan.com/blog/how-to-bypass-itunes-music-previews-protection/這就是爲什麼你在Android上播放音樂時獲得404。這應該回答你的問題。

+0

我覺得也是這樣......是否只有區域限制?請參閱William Seemann的評論...但使用ServeStream它從來沒有爲我工作..我從印度的不同設備和模擬器測試它。 – 2012-09-28 06:41:18

5

ServeStream看看:

HTTP媒體服務器瀏覽器和流播放器爲Android。

特點:

  • 支持Android 2.2以上版本,3.0+(否< 2.2支持)
  • 播放的Android支持的媒體文件
  • 爲M3U,M3U8,PLS和ASX播放列表的附加支持
  • 在後臺支持多任務/播放音頻
  • 重複和隨機播放模式
  • 鬧鐘支持
  • 主屏幕小部件
  • 利用HTML解析,以便服務於HTML頁面
+0

感謝您的回覆,我嘗試了應用程序。它也顯示URL無法打開... – 2012-07-21 08:56:08

+1

我是ServeStream的開發人員。我嘗試了你提供的URL,並且使用最新版本(0.4.11),即FYI玩了沒有問題。 ServeStream將滿足您的要求。 – 2012-09-04 04:26:53

3

M4A和AAC是由Android支持HTTP媒體服務器的導航。我建議閱讀此頁:http://developer.android.com/guide/appendix/media-formats.html

只是幾件事你應該知道的 一)較早的設備可能沒有特別的編碼或格式的支持(特別是,如果你去下面的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

+0

我也試過這個。但不是流式傳輸。我得到一個java.io.FileNotFoundException。 – 2012-08-29 12:55:05

+0

您是否授予訪問互聯網的權限?我認爲問題在於它無法訪問它(相對於它無法播放它) – 2012-08-29 20:45:40

+0

我也添加了權限.. – 2012-08-30 08:50:14