2011-04-05 31 views
3

我正在嘗試開發適用於Android手機的流媒體AV媒體服務器作爲客戶端。這立即給我制約了開發一個使用RTSP的服務器。我熟悉Java編程,並發現可以使用Netty(Java NIO)來填補此協議的Java Media Framework中的其他巨大缺口。我玩過它並沒有取得真正的成功。我知道live555,但我的日程安排很緊,並不想開始搞亂C++,因爲我對這個主題知之甚少。我一直被困在這個問題上好幾個星期,沒有什麼真正的表現。由於Android市場上有許多專有應用程序,因此必須流式傳輸至android。如果有一種簡單的方法來實現一個RTSP AV媒體服務器,它只需流傳輸.mp4或.3gp和.mp3以便在不使用live555庫的情況下使用android,那麼是否能夠有經驗和有關此主題的知識?如果沒有,我只需要快速熟悉C++。先謝謝你。開發適用於Android的流媒體服務器

+0

@ user673090:我不明白這句話......「這立即給我制定了一個使用RTSP的服務器的限制條件」......爲什麼你不得不使用RTSP?我可以在IIS中創建一個虛擬目錄,指向我的PC上的音樂文件夾,並通過Wi-Fi連接使用HTTP將不超過幾行代碼流mp3文件傳輸到我的Android設備。好吧,我並不是說這就是你稱之爲「健壯」的AV服務器解決方案,但它肯定不需要RTSP。詳細說明您爲什麼需要RTSP以及它與Android有什麼關係。 – Squonk 2011-04-05 23:50:27

+1

嗨,感謝您的回覆。我真的一直在苦於RTSP轉移到Android。這個結論已經被繪製並且與Android相關的原因是,如果RTP要通過傳輸協議使用,則必須使用RTSP。現在我意識到HTTP也可以用於流(逐步),這很快成爲一個更好的選擇。您能否詳細說明您如何以及如何通過HTTP將音樂流式傳輸至手機。謝謝。 – user673090 2011-04-06 00:07:11

+0

@ user673090:好的,我理解RTP和RTSP之間的關係,但我仍不明白什麼會讓您認爲流式傳輸到Android設備將需要RTP。給我10分鐘,我會張貼一些代碼來演示我的HTTP示例。 – Squonk 2011-04-06 00:18:52

回答

1

好吧,很簡單,因爲這是使用HTTP流式傳輸。

我在WinXP上用IIS創建了一個名爲'Music'的虛擬文件夾,並將其指向包含mp3文件的文件夾。這是流式傳輸文件所需的完整活動(名稱硬編碼)。

順便說一句,它叫做SimpleNetRadio,就像我最初開始玩Shoutcast流一樣。

package com.mycompany.SimpleNetRadio; 

import android.app.Activity; 
import android.media.AsyncPlayer; 
import android.media.AudioManager; 
import android.net.Uri; 
import android.os.Bundle; 

public class SimpleNetRadio extends Activity 
{ 
    private AsyncPlayer ap = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     ap = (AsyncPlayer) getLastNonConfigurationInstance(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     if (ap != null) 
      ap.stop(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     if (ap == null) { 
      ap = new AsyncPlayer("Simple Player"); 
      ap.play(this, Uri.parse("http://192.168.1.1/Music/02%20-%20Don't%20Stop%20Believin'.mp3"), true, AudioManager.STREAM_MUSIC); 
     } 
    } 

    @Override 
    public Object onRetainNonConfigurationInstance() { 
     return ap; 
    } 
} 

你也應該能夠與更多的代碼與MediaPlayer的做到這一點 - 這將更好地處理錯誤條件,也不會需要更多的工作。

+0

它也可以用於https和mp4嗎? – 2013-05-02 14:21:50

+0

@AdilMalik:對不起,我不知道。我從來沒有試過。上面的代碼非常獨立,您需要做的就是創建一個Android項目並將上面的代碼複製/粘貼到它中,然後嘗試。 – Squonk 2013-05-02 19:39:40

0

我不確定您的具體需求是什麼,但對於靜態文件,您可能會嘗試將Amazon S3和CloudFront相結合,我相信它支持RTSP。

+0

嗨,歡迎回復。這個主題看起來非常有趣,但它並不是我正在尋找的東西。我希望開發服務器,以便它可以在家庭聯網的計算機上進行惡意安裝。 – user673090 2011-04-05 23:26:07

1

使用Netty開發RTSP流媒體服務器是相當直接的任務,不需要太多時間。我自己寫了它,它像魅力一樣工作。你可以看看使用Netty框架開始的一些其他服務器的示例實現。