2011-06-21 32 views
4

我想從HttpResponse對象播放視頻內容。內容是從流媒體服務器下載的。從HttpResponse對象Android視頻流

我的要求是創建一個HTTP POST請求到服務器。請求包含用於認證的用戶的視頻,用戶名和密碼的URL。

我想知道我們如何可以創建一個HTTP POST請求和播放/下載視頻。

請提供一些提示,步驟/代碼繼續。

感謝,

回答

5

我不是100%肯定,但我認爲你不能因向流大部分視頻格式存儲視頻的元數據。這就是爲什麼你管必須轉換你的視頻文件,而不是以任何格式顯示它們。 有些協議封裝了這個元數據,並允許你流式傳輸任何視頻(這就是youtube移動所做的)。你應該看看RTSP:http://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol

如果你在videoView中使用rtsp鏈接,它應該完美地流化視頻。問題是你的問題是服務器而不是客戶端相關的。

正如你可以抓住從m.youtube.com rtsp鏈接,只是用setVideoPath傳遞給videoView,它應該工作的鍛鍊。

如果不能改變服務器實現,那麼你很可能他們,我猜你的解決方案是:

1)下載並自行解碼視頻,你就必須處理所有的元數據,並保證視頻不工作雖然。理論上,你可以編譯android的ffmpeg來幫助你,但是我無法通過網絡選項將它編譯成android。這是很多工作。

2)寫自己的實現RTSP或其他流媒體協議。在線程中下載視頻,並在設備中創建本地服務器,將該視頻文件流式傳輸到videoView實例。我其實有一個應用程序的工作。 Android不支持客戶端服務器使用的特定協議,我必須讓它工作。這花了我整整一個月的時間。我無法發佈任何示例代碼,因爲它是所有客戶端的代碼,但如果您有興趣,我可以提供關於此的更多信息。

無論哪種方式,如果你不能改變的視頻服務器/格式,那麼你應該對一大堆工作做準備。

+0

謝謝,renam.antunes流呢。 當前服務器使用Http流,檢索到的視頻文件爲.mp4格式。像http://www.pocketjourney.com/downloads/pj/video/famous.3gp這樣的其他流式啓用鏈接在Android客戶端應用程序中工作正常。 您是否可以提供啓用流的服務器所需的服務器配置的更多詳細信息? –

+0

這裏:http://stackoverflow.com/questions/1613737/server-to-stream-rtsp-to-android。 Android 3.0應該與HTTP Live Streaming一起工作,並且從2.2開始,你有Flash 10.1,所以我猜你可以編寫基於Flash的應用程序並使用RTMP/Flash HTTP Streaming。不過,不知道究竟如何。 –

+0

好吧,我會檢查並更新你。謝謝。 –

1
+0

謝謝Ashwani。 我想知道的步驟/代碼從響應流媒體直播內容,並在媒體播放器或VideoView播放。 :( –

+0

「對於流,我認爲你必須下載完整的文件,然後顯示它在視頻播放器」我想沒有必要下載該視頻流,如果是這樣的流媒體直播,然後怎麼運作的? –

4

檢查顯示的視頻觀看網址http或RTSP下面的代碼。

現在調用您的videoview前..只是得到

public class VideoViewDemo extends Activity { 

    /** 
    * TODO: Set the path variable to a streaming video URL or a local media 
    * file path. 
    */ 
    private String path = ""; 
    private VideoView mVideoView; 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.videoview); 
     mVideoView = (VideoView) findViewById(R.id.surface_view); 

     if (path == "") { 
      // Tell the user to provide a media file URL/path. 
      Toast.makeText(
        VideoViewDemo.this, 
        "Please edit VideoViewDemo Activity, and set path" 
          + " variable to your media file URL/path", 
        Toast.LENGTH_LONG).show(); 

     } else { 

      /* 
      * Alternatively,for streaming media you can use 
      * mVideoView.setVideoURI(Uri.parse(URLstring)); 
      */ 
      mVideoView.setVideoPath(path); 
      mVideoView.setMediaController(new MediaController(this)); 
      mVideoView.requestFocus(); 

     } 
    } 
} 

現在既然你的要求是不同的先通HTTP POST請求到服務器...獲得所需的輸入流..寫流作爲MP4到你的本地文件系統。那麼你可以使用下面的代碼來播放內容

// this can be path on file system 
String path="/adf.mp4" ; 
    public void playVideo() { 

     MediaController mediaController = new MediaController(this); 
     mediaController.setMediaPlayer(videoView); 
     videoView.setVideoPath(path); 
     videoView.setMediaController(mediaController); 
     videoView.requestFocus(); 
     videoView.start(); 
     mediaController.show(); 
+0

喜Anil,以上代碼是用於下載視頻並將其保存在文件系統中並播放它的,但我的要求是直接從服務器播放(視頻流)。 –

+0

hi adarsh ...您可以直接使用rtsp視頻流video view setVideoPath method。...然後在這種情況下,它會發出請求,但就你的問題而言,你需要在發送請求時發送用戶名和密碼..所以如果你還沒有嘗試過,那麼有一種解決方法。 。seprately。使一個HTTP POST請求並獲得身份驗證令牌..與URL令牌一起傳遞認證來下載視頻並使用視頻查看 –

2

我想這和它的工作對我來說:D無RTSP什麼都沒有,只是一個URL與MP4視頻和它玩了!

public class VideoActivity extends Activity { 
    public static final String KEY = "video_id"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fotogaleria_video); 
    Intent i = getIntent(); 
    if(i.hasExtra(KEY)){ 
     String url = "https://sites.google.com/site/tempmp4download/bnm.mp4"; 
     VideoView vv = (VideoView)findViewById(R.id.fotogaleria_video); 
     // vv.setVideoPath(url); 
     vv.setVideoURI(Uri.parse(url)); 
     vv.setMediaController(new MediaController(this)); 
     vv.requestFocus(); 
     vv.start(); 

     } 

    } 
}