2013-07-01 105 views
2

我使用以下代碼播放來自url的視頻。它工作正常,除了它首先下載視頻,然後播放該視頻從url下載Android視頻

Uri uri = Uri.parse(URL); 
    video.setVideoURI(uri); 
    video.start(); 

但我想流的實時視頻,而不是下載它,然後播放

+0

它應該流 - 你測試的Android版本是什麼? –

+1

您可以將URL發佈到視頻中,以便我們可以測試是否支持流式傳輸 – Peshal

+0

可以將來自YouTube的任何視頻作爲示例 –

回答

3

我有YouTube視頻流的工作,那是沒有下載視頻。 這隻有在您播放YouTube視頻時纔有效。

您必須使用YouTube API並使用它來輕鬆管理您的任務。

您必須啓用YouTube服務並使用Developer Key即可訪問YouTube API。

How to use YouTube API ?您可以Find Here相同的示例代碼。

指出樣品示例的我有使用

PlayerViewDemoActivity.java & YouTubeFailureRecoveryActivity.java和XML視圖按照需求。

播放視頻

public class PlayerViewDemoActivity extends YouTubeFailureRecoveryActivity 
{ 
    String youtube_id = "_UWXqFBF86U"; 

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

     YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view); // Replace your developer key 
     youTubeView.initialize(DeveloperKey.DEVELOPER_KEY, this); 

    } 

    @Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, 
      YouTubePlayer player, boolean wasRestored) 
    { 
     if (!wasRestored) 
     { 
      player.cueVideo(youtube_id); 
     } 
    } 

    @Override 
    protected YouTubePlayer.Provider getYouTubePlayerProvider() 
    { 
     return (YouTubePlayerView) findViewById(R.id.youtube_view); 
    } 

} 

希望這將幫助你,讓我知道如果您有任何疑問。

+0

我需要從我的服務器流視頻以及! –

+0

@SourabhSaldi好的,我已發佈我的答案根據您的評論,'測試任何youtube視頻'.BTW你可以添加權限在配置文件,以便視頻不會下載,而你從服務器流式傳輸 –

+0

偉大的示例!!!謝謝:) – Nevaeh

3

有流媒體工作的一些要求。

該文件可能無法 「正確」

http://developer.android.com/guide/appendix/media-formats.html

對於流式傳輸通過HTTP或RTSP,還有額外的要求視頻內容編碼:

  • 對於3GPP和MPEG-4容器,moov原子必須位於原子的任何mdat之前,但必須成功接收ftyp原子。
  • 對於3GPP,MPEG-4和WebM容器,對應於相同時間偏移的音頻和視頻樣本可能不超過500 KB。爲了儘量減少這種音頻/視頻漂移,考慮以較小的塊大小交錯音頻和視頻。

您可能會在較舊版本的Android不支持它

HTTP 2.2中只添加漸進式流,HTTPS僅支持3.0+,直播只在支持甚至更高版本。

0

使用這樣:

Uri uri = Uri.parse(URL); //Declare your url here. 

VideoView mVideoView = (VideoView)findViewById(R.id.videoview) 
mVideoView.setMediaController(new MediaController(this));  
mVideoView.setVideoURI(uri); 
mVideoView.requestFocus(); 
mVideoView.start(); 

另一種方法:

String LINK = "type_here_the_link"; 
    VideoView mVideoView = (VideoView) findViewById(R.id.videoview); 
    MediaController mc = new MediaController(this); 
    mc.setAnchorView(videoView); 
    mc.setMediaPlayer(videoView); 
    Uri video = Uri.parse(LINK); 
    mVideoView.setMediaController(mc); 
    mVideoView.setVideoURI(video); 
    mVideoView.start(); 

如果您收到此錯誤Couldn't open file on client side, trying server side Error in Android。還有Refer this。 希望這會給你一些解決方案。

0
For showing buffering you have to put progressbar of ProgressDialog ,... here i post progressDialog for buffering ... 

pDialog = new ProgressDialog(this); 

    // Set progressbar message 
    pDialog.setMessage("Buffering..."); 
    pDialog.setIndeterminate(false); 
    pDialog.setCancelable(false); 
    // Show progressbar 
    pDialog.show(); 

    try { 
     // Start the MediaController 
     MediaController mediacontroller = new MediaController(this); 
     mediacontroller.setAnchorView(mVideoView);  

     Uri videoUri = Uri.parse(videoUrl); 
     mVideoView.setMediaController(mediacontroller); 
     mVideoView.setVideoURI(videoUri); 

    } catch (Exception e) { 

     e.printStackTrace(); 
    } 

    mVideoView.requestFocus(); 
    mVideoView.setOnPreparedListener(new OnPreparedListener() { 
     // Close the progress bar and play the video 
     public void onPrepared(MediaPlayer mp) { 
      pDialog.dismiss(); 
      mVideoView.start(); 
     } 
    }); 
    mVideoView.setOnCompletionListener(new OnCompletionListener() { 

     public void onCompletion(MediaPlayer mp) { 
      if (pDialog.isShowing()) { 
       pDialog.dismiss(); 
      } 
      finish();    
     } 
    });